【问题标题】:Unable to Instantiate UI Object in Unity无法在 Unity 中实例化 UI 对象
【发布时间】:2019-12-28 23:51:23
【问题描述】:

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

感谢任何帮助!

【问题讨论】:

  • 你把它放到画布上了吗?
  • @BugFinder userPanelContainer 是画布的一部分。 userPanel 应该以容器为父对象进行实例化

标签: c# unity3d websocket unity-ui


【解决方案1】:

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

【讨论】:

  • 不幸的是,这似乎对我不起作用。一旦调用了实例化方法,函数内的其他代码就不会运行,并且实例化方法根本不会创建对象
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-24
  • 1970-01-01
相关资源
最近更新 更多