ET版本:8.1
我写了一个UI逻辑是按下按钮发送信息C2M_SendChatMsg,包含一个string给服务端,服务端广播这个string发送一个信息,客户端监听M2C_ReceiveChatMsg信息在UI中显示这条string,但是实际去做发现UI是在SceneType.Current中被创建的,但是如果把MessageHandle注册在SceneType.Current无法接收到M2C_ReceiveChatMsg,注册在SceneType.Demo下的话可以接收到M2C_ReceiveChatMsg,但是因为UI是在SceneType.Current下创建的所以没法在Demo中找到UI,我该怎么做才能正确的找到UI对应的Component呢?
以下是代码:
协议:
//ResponseType M2C_SendChatMsg
message C2M_SendChatMsg // ILocationRequest
{
int32 RpcId = 1;
string Msg = 2;
}
message M2C_SendChatMsg // ILocationResponse
{
int32 RpcId = 1;
int32 Error = 2;
string Message = 3;
}
message M2C_ReceiveChatMsg // IMessage
{
string Msg = 1;
}
处理M2C_ReceiveChatMsg的Handle:
这里的entity.Root().GetComponent<UIComponent>().Get(UIType.UIChat)会返回空,因为是在Current中创建的而非Demo,如果改成[MessageHandler(SceneType.Current)]则无法收到事件
最后问下我这种收到消息后去找Component再调用其System方法来更新UI的做法是否规范?