每当调用函数时,我都会尝试在 Unity 中实例化一个对象。
这是我的UiHandler脚本中的启动方法
public void Start() {
GameObject obj = Instantiate(userPanelPrefab, userPanelContainer) as GameObject;
}
这是我的“OnPlayer”方法,也在UiHandler脚本中,每次“玩家”进入游戏时都会调用它。(他们不是真正的玩家,只是通过 WebSocket 服务器发送到 Unity 的名称)
public void OnPlayer(WebsocketManager.PlayerEvent e) {
Debug.Log("On Player");
if (e.type == WebsocketManager.JOIN_TYPE) {
Debug.Log("On Join");
GameObject obj = Instantiate(userPanelPrefab, userPanelContainer) as GameObject;
Debug.Log("Assign User Panel");
UserPanel p = obj.GetComponent<UserPanel>();
p.Set(e.name);
}
}
当调用 start 方法时,Object 将按其应有的方式实例化。但是,每当调用“OnPlayer”方法时,什么都不会发生,并且实例化函数下面的代码甚至都不会运行。控制台中不显示任何错误或信息。它什么也不做。
带有调试消息的控制台输出是
在播放器上
加入时
“分配用户面板”日志也永远不会显示在控制台中。
对于 WebSocket 集成,我使用的是Socket Sharp,后端套接字服务器在 NodeJs 上运行。
这是我的WebsocketManager脚本中的 WebSocket 代码
public const string JOIN_TYPE = "join";
WebSocket ws = new WebSocket("ws://10.0.0.8:3069/");
ws.OnMessage += (sender, m) => {
string json = GetStringFromArray(m.Data);
if (IsJson(json, out PlayerEvent ev)) {
Debug.Log("Is Valid JSON");
if (ev.type == JOIN_TYPE) {
AddPlayer(ev.name);
} else if (ev.type == LEAVE_TYPE) {
RemovePlayer(ev.name);
}
uiHandler.OnPlayer(ev);
}
}
任何帮助表示赞赏!