Unity踩坑:FindObjectsOfType can only be called from the main thread

1.问题:

最近在用Unity做基于socket通信时,遇到个大坑

客户端开了个线程接收消息,用一个MsgManager消息单例去接收序列化后的消息,发现报错。

2.原因:

查了一些资料最后找到问题,开的线程或者异步中,不能去调用主线程的方法,

MsgManager继承了monobehaviour,在AddMsg里面直接做表现(UGUI)属于是跨线程操作

简单来说不能跨线程操作。

3.解决方法:

socketclient声明一个消息队列,用消息队列存储当前收到的消息

public Queue<byte[]> receiveMsg;

将数据通过SocketManager的Update进行获取就好了

4.总结:

clientSocket对象脚本中添加一个消息队列获取服务器消息,再在调用clientSocket对象脚本中的Update进行消息获取再处理。

猜你喜欢

转载自blog.csdn.net/ysn11111/article/details/127765090