protected override void OnUpdate() { if (enterGameQuery.IsEmptyIgnoreFilter == false) { using (var enterGamePlayerEntitys = enterGameQuery.ToEntityArray(Allocator.TempJob)) { for (var i = 0; i < enterGamePlayerEntitys.Length; ++i) { if (EntityManager.HasComponent <PlayerActorType>(enterGamePlayerEntitys[i]) == false) { EntityManager.AddComponentData(enterGamePlayerEntitys[i], new PlayerActorType { value = actorTypeBegin }); //endBarrier.curCommandBuffer.AddComponent(enterGamePlayerEntitys[i], new PlayerActorType { value = 1 }); } } } } // var endCommandBuffer = endBarrier.CreateCommandBuffer(); Entities .WithAllReadOnly <NetworkConnection, PlayerActorSelectNetMessage>() //可以没有Player时修改PlayerActorType .WithNone <NetworkDisconnectedMessage>() .ForEach((Entity playerEntity, ref PlayerActorSelectNetMessage playerActorSelectNetMessage) => { if (playerActorSelectNetMessage.value > actorTypeEnd || playerActorSelectNetMessage.value < actorTypeBegin) { endCommandBuffer.AddComponent(playerEntity, new NetworkDisconnectedMessage { error = (short)DisconnectedErrorsInSystem.PlayerActorSelect }); return; } var playerActorType = new PlayerActorType { value = playerActorSelectNetMessage.value }; if (EntityManager.HasComponent <PlayerActorType>(playerEntity)) { EntityManager.SetComponentData(playerEntity, playerActorType); } else { EntityManager.AddComponentData(playerEntity, playerActorType); //endBarrier.curCommandBuffer.AddComponent(playerEntity, playerActorType); } }); }
protected override void OnUpdate() { if (startPoints.Length == 0) { return; } #if false var createQuery = Entities .WithAllReadOnly <Player, Observer, PlayerGameStartMessage, PlayerActorType>() .WithNone <NetworkDisconnectedMessage>() .ToEntityQuery(); if (createQuery.IsEmptyIgnoreFilter == false) { using (var playerEntitys = createQuery.ToEntityArray(Allocator.TempJob)) using (var players = createQuery.ToComponentDataArray <Player>(Allocator.TempJob)) using (var observers = createQuery.ToComponentDataArray <Observer>(Allocator.TempJob)) using (var actorTypes = createQuery.ToComponentDataArray <PlayerActorType>(Allocator.TempJob)) { for (var i = 0; i < playerEntitys.Length; ++i) { Debug.LogWarning("createQuery"); Entity playerEntity = playerEntitys[i]; Player player = players[i]; Observer observer = observers[i]; PlayerActorType actorType = actorTypes[i]; try { var actorOwner = new ActorOwner { playerEntity = playerEntity, playerId = player.id }; var actorEntity = actorServerSystem.CreateInServer(actorOwner, actorType.value); var t = findNearStartPointT(observer.position); EntityManager.SetComponentData(actorEntity, new Translation { Value = getStartPoint(t) }); EntityManager.SetComponentData(actorEntity, new Rotation { Value = t.rotation }); } catch (System.Exception e) { Debug.Log("System.Exception e"); Debug.LogException(e); PostUpdateCommands.AddComponent <NetworkDisconnectedMessage>(playerEntity); } } } } #else Entities .WithAllReadOnly <Player, ObserverPosition, PlayerGameStartNetMessage, PlayerActorType>() .WithNone <NetworkDisconnectedMessage>() .ForEach((Entity playerEntity, ref Player player, ref ObserverPosition observer, ref PlayerActorType actorType) => { var t = getStartPointT(observer.value); var pos = getStartPoint(t); var rot = t.rotation; var actorOwner = new ActorOwner { playerEntity = playerEntity, playerId = player.id }; var actorEntity = actorSpawnerMap.CreateInServer(actorType.value, actorOwner); EntityManager.SetComponentData(actorEntity, new Translation { Value = pos }); EntityManager.SetComponentData(actorEntity, new Rotation { Value = rot }); }); #endif }