0

每当调用函数时,我都会尝试在 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);
    }
}

任何帮助表示赞赏!

4

1 回答 1

0

实例化后,必须将实例化对象设置为画布的父对象,使用 InstantiatedObject.SetParent(canvasTransform);

于 2019-12-29T20:48:08.197 回答