所以,我有这个用 Unity 编写的游戏,它应该通过 UDP 实时接收数据。数据将通过无线方式从一个用 Java 编写的 Android 设备传来,而 Unity 程序是用 C# 编写的。我的问题是,每当我尝试声明一个UdpClient
对象,并在 UnityReceive()
的Update()
方法中调用它的方法时,游戏就会挂起。这是我试图放入我的Update()
方法中的代码 -
UdpClient client = new UdpClient(9877);
IPEndPoint receivePoint = new IPEndPoint(IPAddress.Parse("192.168.1.105"), 9877);
byte[] recData = client.Receive(ref receivePoint);
但这会导致游戏挂起。
然后我尝试了另一种方法 - 我尝试在单独的线程中接收数据。如果我所要做的就是接收 byte
数组,它就像魔术一样工作。没有问题。除了我还需要将接收到的数据用作实际游戏中使用的函数的参数(现在,假设我需要在主游戏窗口中将接收到的数据字节显示为字符串)。但是,我不知道 Unity 中的跨线程是如何工作的。我试过这个 -
string data = string.Empty;
private IPEndPoint receivePoint;
void OnGUI()
{
GUI.Box(new Rect(20, 20, 100, 40), "");
GUI.Label(new Rect(30, 30, 100, 40), data);
}
void Start()
{
LoadClient();
}
public void LoadClient()
{
client = new UdpClient(9877);
receivePoint = new IPEndPoint(IPAddress.Parse("192.168.1.105"), 9877);
Thread startClient = new Thread(new ThreadStart(StartClient));
startClient.Start();
}
public void StartClient()
{
try
{
while (true)
{
byte[] recData = client.Receive(ref receivePoint);
System.Text.ASCIIEncoding encode = new System.Text.ASCIIEncoding();
data = encode.GetString(recData);
}
}
catch { }
}
但是如果我尝试上述方法,我的程序就会挂起。那么,我到底错过了什么?