ET版本:8.1
Unity版本:2022.3.15f1c1
鄙人刚接触ET想做一个简易的范围喊话功能练练手,于是用Demo项目进行修改,已经完成了从客户端发动一个信息给Map,Map这边的Handle确定收到了,但是怎样给AOI内的所有unit分别发送一个信息,犯了难。aoiEntity.GetSeePlayers得到的是一个Dictionary<long, EntityRef<AOIEntity>>,问题就在于EntityRef<AOIEntity>我没看到这个类有返回其包裹的entity变量的方法,所以来求助下,另外问下我思路是否正确,有没有更好的广播信息的方案。 另外拿到Unit之后,怎样对Unit对应的客户端发送消息,我也不知道怎么做,可以具体讲讲代码该如何写吗?谢谢
以下是Run中写到一半的代码:
protected override async ETTask Run(Unit unit, C2M_SendChatMsg request, M2C_SendChatMsg response) {
LogMsg.Instance.Debug(unit.Fiber(),$"C2M_SendChatMsgHandle Run unit:{unit} Scene:{unit.Fiber().Root.SceneType}");
var aoiEntity = unit.GetComponent<AOIEntity>();
var allPeople = aoiEntity.GetSeePlayers();
foreach (var people in allPeople.Values) {
people//卡在这里了,people拿不到unit
//怎样对Unit所在客户端发消息?
}
await ETTask.CompletedTask;
people.Unit
wanger 不行,找不到Unit,我看了下MapMessageHelper.Broadcast的代码,如果改成foreach (AOIEntity people in allPeople.Values)这样则可以
看这个 UnitFactory.Create 的调用,Unit创建的时候 其Id 为 Player.Id。
所以这两个Id是一致的,而 Unit 加入了 Location,根据Id就可以找到它。
而这个方法其实已经封装了就是:MapMessageHelper.Broadcast
看了下代码我的想法和MapMessageHelper.Broadcast基本一致,直接用这个方法应该就行了