【发布时间】:2019-08-13 14:05:11
【问题描述】:
我在某个地方看到在 Unity 的线程中,您无法使用 Unity API。
我想知道一般异步回调是否也是这种情况(例如,在使用 WebSocketSharp 时分配给 WebSocket.OnMessage 的函数),如果是这样,那么有没有办法知道什么是允许的,什么是不允许的? t(即什么是“Unity API”)?
作为一个例子,当使用 WebSocketSharp 的 WebSocket.OnMessage 时,我把它放在了 MonoBehavior 的 Start 函数中:
// ws is a WebSocketSharp.WebSocket
// displayText is a UnityEngine.UI.Text
ws.OnMessage += (sender, evt) =>
{
// 1
boo = UnityEngine.Random.Range(1, 1000).ToString();
// 2
displayText.text = "Heyoo";
};
1 错误下的行(没有日志超出它)但没有显示错误消息。而当该行不在此回调中时(例如Update 的顶级),我可以看到它的结果没有问题。
至于2 下的行,Unity 中的 Inspector 会显示更新后的文本,但播放屏幕不会,直到我更新 Inspector 中的一个属性,好像文本字段确实更新了,但是当它需要时使用 Unity API 来更新屏幕,它失败了,所以直到单独的更新发生它才真正出现。
这是我对这些奇怪行为的假设,所以请让我知道这是否正确,以及是否有简洁(或记录)的方式来描述我所描述的内容。
【问题讨论】: