using Unity.Entities; namespace Unity.Spaceship { public class HudSystem : SystemBase { private GameStates m_CurrentGameState = GameStates.None; protected override void OnCreate() { base.OnCreate(); RequireSingletonForUpdate(); } protected override void OnUpdate() { var gameState = GetSingleton(); if (gameState.Value == m_CurrentGameState) return; m_CurrentGameState = gameState.Value; var ecbSystem = World.GetOrCreateSystem(); var cmdBuffer = ecbSystem.CreateCommandBuffer().AsParallelWriter(); Dependency = Entities.ForEach((Entity entity, int entityInQueryIndex, in HudShowState showState, in DynamicBuffer hudObjects) => { for (var i = 0; i < hudObjects.Length; i++) { var isVisible = gameState.Value == showState.Value; if (isVisible) { cmdBuffer.RemoveComponent(entityInQueryIndex, hudObjects[i].Value); } else { cmdBuffer.AddComponent(entityInQueryIndex, hudObjects[i].Value); } } }).Schedule(Dependency); ecbSystem.AddJobHandleForProducer(Dependency); } } }