예제 #1
0
        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);
                }
            }
        }
예제 #2
0
        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());
        }