因此,我創建UNet多人遊戲應用程序,但我在接收消息時遇到問題。UNet不發送消息到服務器
應用程序是爲android,但我也建立它的計算機。
當我運行Server
通過統一編輯器並從客戶端連接到它從計算機我有部分代碼來測試連接和發送消息,它是工作和發送消息時,播放器連接。
當我用手機連接它不會發送消息。
我知道是在電話上它返回NetworkTransport.Connect()
價值爲1
這意味着它連接,但我不認爲它連接它,我會在代碼後解釋它。
這裏是我的服務器代碼:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;
using System.Text;
public class Server : MonoBehaviour
{
private const int MAX_CONNECTION = 100;
private int port = 7777;
private int hostId;
private int webHostId;
private int reliableChannel;
private int unreliableChannel;
private bool isStarted;
private byte error;
private void Start()
{
NetworkTransport.Init();
ConnectionConfig cc = new ConnectionConfig();
reliableChannel = cc.AddChannel(QosType.Reliable);
unreliableChannel = cc.AddChannel(QosType.Unreliable);
HostTopology topology = new HostTopology(cc, MAX_CONNECTION);
hostId = NetworkTransport.AddHost(topology, port, null);
webHostId = NetworkTransport.AddWebsocketHost(topology, port, null);
isStarted = true;
}
private void Update()
{
if(!isStarted) { return; }
int recHostId;
int connectionId;
int channelId;
byte[] recBuffer = new byte[1024];
int bufferSize = 1024;
int dataSize;
byte error;
NetworkEventType recData = NetworkTransport.Receive(out recHostId, out connectionId, out channelId, recBuffer, bufferSize, out dataSize, out error);
switch(recData)
{
case NetworkEventType.Nothing:
break;
case NetworkEventType.ConnectEvent:
Debug.Log("Player " + connectionId + " has connected");
break;
case NetworkEventType.DataEvent:
string msg = Encoding.Unicode.GetString(recBuffer, 0, dataSize);
Debug.Log("Player " + connectionId + " has sent: " + msg);
break;
case NetworkEventType.DisconnectEvent:
Debug.Log("Player " + connectionId + " has disconnected");
break;
}
}
}
這裏是客戶端代碼:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;
using UnityEngine.UI;
public class Client : MonoBehaviour
{
private const int MAX_CONNECTION = 100;
private int port = 7777;
private int hostId;
private int webHostId;
private int reliableChannel;
private int unreliableChannel;
private int connectionId;
private float connectionTime;
private bool isConnected;
private bool isStarted = false;
private byte error;
private string playerName;
public Text text;
public void Connect()
{
string pName = GameObject.Find("NameInput").GetComponent<InputField>().text;
if(pName == "")
{
Debug.Log("You must enter a name!");
return;
}
playerName = pName;
NetworkTransport.Init();
ConnectionConfig cc = new ConnectionConfig();
reliableChannel = cc.AddChannel(QosType.Reliable);
unreliableChannel = cc.AddChannel(QosType.Unreliable);
HostTopology topology = new HostTopology(cc, MAX_CONNECTION);
hostId = NetworkTransport.AddHost(topology, 0);
connectionId = NetworkTransport.Connect(hostId, "127.0.0.1", port, 0, out error);
connectionTime = Time.time;
isConnected = true;
}
private void Update()
{
if(!isConnected) { return; }
int recHostId;
int connectionId;
int channelId;
byte[] recBuffer = new byte[1024];
int bufferSize = 1024;
int dataSize;
byte error;
NetworkEventType recData = NetworkTransport.Receive(out recHostId, out connectionId, out channelId, recBuffer, bufferSize, out dataSize, out error);
switch(recData)
{
case NetworkEventType.Nothing:
break;
case NetworkEventType.ConnectEvent:
break;
case NetworkEventType.DataEvent:
break;
case NetworkEventType.DisconnectEvent:
break;
}
}
}
這是我如何測試一步一步的應用。 對於這個測試我實現了線,更改按鈕文字connectionId
這是connectionId = NetworkTransport.Connect(hostId, "127.0.0.1", port, 0, out error);
而且該行
- 構建應用爲
.exe
(對PC) - 生成並運行應用程序作爲
.apk
(針對Android)之後來到Android和PC機作爲客戶端服務器場景(其中有服務器腳本) - 運行應用程序 - - 客戶端的場景(其中有客戶端腳本)
- 輸入名稱,然後按連接PC客戶端上 - 運行裏面編輯器應用(Android的版本)中團結一致樂彈出
Player 1 has connected
- 輸入名稱,然後按連接Android客戶端上 - 裏面什麼都沒有統一,但按鈕上的文字變化發生在1(它連接,這意味着)
- 再次按下連接上PC客戶端(其中添加其他客戶端),它應該是播放器3,因爲在Android連接返回正面,但它會返回
Player 2 has connected
我不知道發生了什麼事。是否有我需要做的Android連接或可能因爲我連接無線網絡(它工作正常與統一網絡管理器,但現在我不能與降低Api)
*「它不發送消息」*您的問題代碼中沒有發送代碼.... – Programmer
在'switch'下的服務器代碼中。這是做好計算機客戶端,但不是與Android客戶端。當我在統一控制檯連接電腦客戶端時,我收到消息,但是當我使用android做它時,我不會 –
好吧,它看起來像是指連接事件不發送/接收事件。在你的客戶端代碼中,爲什麼不把'Debug.Log'放在'switch'語句中以查看會發生什麼? – Programmer