public override async UniTask ExecuteAsync(CancellationToken cancellationToken = default) { var easingType = EasingType.Linear; if (Assigned(EasingTypeName) && !Enum.TryParse(EasingTypeName, true, out easingType)) { LogWarningWithPosition($"Failed to parse `{EasingTypeName}` easing."); } var transitionName = TransitionType.Crossfade; if (Assigned(Transition)) { transitionName = Transition.Value; } var defaultParams = TransitionUtils.GetDefaultParams(transitionName); var transitionParams = Assigned(TransitionParams) ? new Vector4( TransitionParams.ElementAtOrNull(0) ?? defaultParams.x, TransitionParams.ElementAtOrNull(1) ?? defaultParams.y, TransitionParams.ElementAtOrNull(2) ?? defaultParams.z, TransitionParams.ElementAtOrNull(3) ?? defaultParams.w) : defaultParams; if (Assigned(DissolveTexturePath) && !ObjectUtils.IsValid(preloadedDissolveTexture)) { preloadedDissolveTexture = Resources.Load <Texture2D>(DissolveTexturePath); } var transition = new Transition(transitionName, transitionParams, preloadedDissolveTexture); var transitionUI = Engine.GetService <IUIManager>().GetUI <UI.ISceneTransitionUI>(); if (transitionUI != null) { await transitionUI.TransitionAsync(transition, Duration, easingType, cancellationToken); } else { LogErrorWithPosition($"Failed to finish scene transition: `{nameof(UI.ISceneTransitionUI)}` UI is not available."); } }
protected virtual async UniTask ApplyAppearanceModificationAsync(TActor actor, EasingType easingType, float duration, CancellationToken cancellationToken) { if (string.IsNullOrEmpty(AssignedAppearance)) { return; } var transitionName = !string.IsNullOrEmpty(AssignedTransition) ? AssignedTransition : TransitionType.Crossfade; var defaultParams = TransitionUtils.GetDefaultParams(transitionName); var transitionParams = Assigned(TransitionParams) ? new Vector4( TransitionParams.ElementAtOrNull(0) ?? defaultParams.x, TransitionParams.ElementAtOrNull(1) ?? defaultParams.y, TransitionParams.ElementAtOrNull(2) ?? defaultParams.z, TransitionParams.ElementAtOrNull(3) ?? defaultParams.w) : defaultParams; if (Assigned(DissolveTexturePath) && !ObjectUtils.IsValid(preloadedDissolveTexture)) { preloadedDissolveTexture = Resources.Load <Texture2D>(DissolveTexturePath); } var transition = new Transition(transitionName, transitionParams, preloadedDissolveTexture); await actor.ChangeAppearanceAsync(AssignedAppearance, duration, easingType, transition, cancellationToken); }