protected override void OnUpdate() { //TODO:控制刷新或请求频率 var requestArray = RequestGroup.ToComponentDataArray <RoleLooksNetRequest>(Allocator.TempJob); if (requestArray.Length == 0) { requestArray.Dispose(); return; } var requestEntityArray = RequestGroup.ToEntityArray(Allocator.TempJob); // Copy requests as spawning will invalidate Group var requests = new RoleLooksNetRequest[requestArray.Length]; for (var i = 0; i < requestArray.Length; i++) { requests[i] = requestArray[i]; PostUpdateCommands.DestroyEntity(requestEntityArray[i]); } for (var i = 0; i < requests.Length; i++) { SprotoType.scene_get_role_look_info.request req = new SprotoType.scene_get_role_look_info.request(); req.uid = requests[i].roleUid; Entity owner = requests[i].owner; if (!EntityManager.Exists(owner)) { continue; } UnityMMO.NetMsgDispatcher.GetInstance().SendMessage <Protocol.scene_get_role_look_info>(req, (_) => { SprotoType.scene_get_role_look_info.response rsp = _ as SprotoType.scene_get_role_look_info.response; // Debug.Log("rsp.result : "+rsp.result.ToString()+" owner:"+owner.ToString()); if (rsp.result == UnityMMO.GameConst.NetResultOk) { RoleMgr.GetInstance().SetName(req.uid, rsp.role_looks_info.name); RoleMgr.GetInstance().UpdateLooksInfo(req.uid, new RoleLooksInfo { uid = req.uid, career = (int)rsp.role_looks_info.career, body = (int)rsp.role_looks_info.body, hair = (int)rsp.role_looks_info.hair, weapon = (int)rsp.role_looks_info.weapon, wing = (int)rsp.role_looks_info.wing, horse = (int)rsp.role_looks_info.horse, hp = (int)rsp.role_looks_info.hp, maxHp = (int)rsp.role_looks_info.max_hp, name = rsp.role_looks_info.name, }); if (m_world.GetEntityManager().HasComponent <HealthStateData>(owner)) { var hpData = m_world.GetEntityManager().GetComponentData <HealthStateData>(owner); hpData.CurHp = rsp.role_looks_info.hp; hpData.MaxHp = rsp.role_looks_info.max_hp; m_world.GetEntityManager().SetComponentData <HealthStateData>(owner, hpData); } bool hasTrans = m_world.GetEntityManager().HasComponent <Transform>(owner); if (hasTrans) { var transform = m_world.GetEntityManager().GetComponentObject <Transform>(owner); //因为是异步操作,等后端发送信息过来时PostUpdateCommands已经失效了,所以不能这么用 RoleLooksSpawnRequest.Create(m_world.GetEntityManager(), (int)rsp.role_looks_info.career, transform.localPosition, transform.localRotation, owner, (int)rsp.role_looks_info.body, (int)rsp.role_looks_info.hair); } } }); } requestEntityArray.Dispose(); requestArray.Dispose(); }