void UpdateAttachedScene() { bool needSceneCreate = false; if (createdViewport != null) { Component_Scene scene = null; if (DisplayScene) { scene = Scene.ReferenceSpecified ? Scene.Value : ParentScene; } if (scene != null) { var ins = ComponentUtility.GetResourceInstanceByComponent(scene); var isResource = ins != null && ins.InstanceType == Resource.InstanceType.Resource; if (isResource) { SceneRecreateIfNeeded(scene); scene = createdScene; needSceneCreate = true; } } createdViewport.AttachedScene = scene; } if (!needSceneCreate) { SceneDestroy(); } }
public void UpdateSubscription() { if (duringUpdate) { return; } duringUpdate = true; try { if (EnabledInHierarchy) { var whenEnable = WhenEnable.Value; if (whenEnable.HasFlag(WhenEnableEnum.Editor) && EngineApp.ApplicationType == EngineApp.ApplicationTypeEnum.Editor || whenEnable.HasFlag(WhenEnableEnum.Simulation) && EngineApp.ApplicationType == EngineApp.ApplicationTypeEnum.Simulation) { var ins = ComponentUtility.GetResourceInstanceByComponent(this); var isResource = ins != null && ins.InstanceType == Resource.InstanceType.Resource; if (whenEnable.HasFlag(WhenEnableEnum.Resource) && isResource || whenEnable.HasFlag(WhenEnableEnum.Instance) && !isResource) { Subscribe(); } } } else { Unsubscribe(); } } finally { duringUpdate = false; } }