void PlayAnimators(AnimationPanelState targetState) { currentState.Value = targetState; // Hide や Hidden の場合は SetActive(false) されるため true にするのは Show と Active のみ if (targetState == AnimationPanelState.Show || targetState == AnimationPanelState.Active) { gameObject.SetActive(true); } foreach (var animator in AllAnimators) { animator.speed = animationSpeed; string stateName = null; string fallbackStateName = null; switch (targetState) { case AnimationPanelState.Show: stateName = showStateName; break; case AnimationPanelState.Active: stateName = activeStateName; fallbackStateName = showStateName; break; case AnimationPanelState.Hide: stateName = hideStateName; break; case AnimationPanelState.Hidden: stateName = hiddenStateName; fallbackStateName = hideStateName; break; } if (!stateName.IsNullOrEmpty() && animator.HasState(0, Animator.StringToHash(stateName))) { animator.Play(stateName, -1, 0f); } else { animator.Play(fallbackStateName, -1, 1f); } } }
IObservable <UniRx.Unit> WaitAnimators(AnimationPanelState targetState) { return(Observable.Zip(AllAnimators.Select(animator => { return Observable.EveryUpdate().SkipWhile(_ => { var state = GuessAnimatorState(animator); if (state == AnimationPanelState.Unknown) { Debug.LogWarning("AnimationPanelState が Unknown です。遷移しようとしたState:{0}".Formats(targetState)); return false; } return state != targetState; }) .TakeUntilDestroy(this) .Take(1); })).AsUnitObservable()); }