无论何时调用函数,我都试图在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);
}
}
感谢您的帮助!
答案 0 :(得分:0)
实例化之后,您必须使用InstantiatedObject.SetParent(canvasTransform);将实例化的对象设置为画布的父对象。