protected override void OnUpdate() { if (m_TimeData == null) { // Look for a valid Time reference (NB: assumes one UnityInstance!) foreach (var world in World.All) { var timeSystem = world.GetExistingSystem <UpdateWorldTimeSystem>(); if (timeSystem == null) { continue; } m_TimeData = timeSystem.m_TimeData; break; } if (m_TimeData == null) { throw new Exception( "UpdateWorldTimeSystem must either be disabled " + "or initialized with SetInstanceTime(TimeData*) before use."); } } // If elapsed time starts from a non-zero point in time, it can break assumptions made in other code // (with Entities fixed time stepping logic being a prime example). Even if our code is protected against // this, users will often expect elapsed time to accumulate from 0. World.SetTime(*m_TimeData); }
private UnityInstance() { m_World = DefaultWorldInitialization.Initialize("Default World"); m_BootPhase = BootPhase.Booting; m_RunState = RunState.Resuming; m_EntityManager = m_World.EntityManager; m_StartTimeInSeconds = 0; m_ElapsedTimeInSeconds = 0; m_PreviousElapsedTimeInSeconds = 0; m_SceneSystemGroup = m_World.GetOrCreateSystem <SceneSystemGroup>(); m_SceneSystem = m_World.GetOrCreateSystem <SceneSystem>(); m_TimeData = (TimeData *)UnsafeUtility.Malloc( UnsafeUtility.SizeOf <TimeData>(), 0, Collections.Allocator.Persistent); }
private UnityInstance() { m_World = DefaultWorldInitialization.Initialize("Default World"); m_BootPhase = BootPhase.Booting; m_RunState = RunState.Resuming; m_EntityManager = m_World.EntityManager; m_StartTimeInSeconds = 0; m_ElapsedTimeInSeconds = 0; m_PreviousElapsedTimeInSeconds = 0; // try to find SceneSystemGroup in worlds foreach (var w in World.All) { m_SceneSystemGroup = w.GetExistingSystem <SceneSystemGroup>(); m_SceneSystem = w.GetExistingSystem <SceneSystem>(); if (m_SceneSystemGroup != null) { break; } } // if cannot find - create in the default world if (m_SceneSystemGroup == null) { m_SceneSystemGroup = m_World.GetOrCreateSystem <SceneSystemGroup>(); m_SceneSystem = m_World.GetOrCreateSystem <SceneSystem>(); } m_TimeData = (TimeData *)UnsafeUtility.Malloc( UnsafeUtility.SizeOf <TimeData>(), 0, Collections.Allocator.Persistent); }
internal void SetInstanceTime(TimeData *timeData) { m_TimeData = timeData; }