无法在Unity中实例化UI对象

时间:2019-12-28 23:51:23

标签: c# unity3d websocket unity-ui

无论何时调用函数,我都试图在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方法时,对象将按其实例化。但是无论何时调用“ OnPlayer”方法,都不会发生任何事情,并且实例化函数下面的代码甚至不会运行。控制台中不会显示任何错误或信息。它什么都不做。

带有Debug消息的控制台输出为

  •   

    在播放器上

  •   

    加入时

“分配用户面板”日志也永远不会显示在控制台中。

对于WebSocket集成,我使用Socket Sharp,并且后端套接字服务器在NodeJ上运行。

这是我的 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);
    }
}

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

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