Ejemplo n.º 1
0
        private void UpdateEventFromController()
        {
            bool isBlending = _animEvt.IsBlending();

            if (isBlending)
            {
//				FPlayAnimationEvent prevAnimEvt = (FPlayAnimationEvent)_animTrack.GetEvents()[_animEvt.GetId() - 1];

                if (_transitionToState == null)
                {
                    _transitionToState = FAnimationTrackInspector.GetTransitionTo(_animEvt);

                    if (_transitionToState == null)
                    {
//						if( animTrackEditor.PreviewInSceneView )
//							animTrackEditor.ClearPreview();
                        FAnimationTrackInspector.RebuildStateMachine((FAnimationTrack)_trackEditor._track);

                        _transitionToState = FAnimationTrackInspector.GetTransitionTo(_animEvt);
                    }
                }

                if (_transitionSO == null)
                {
                    if (_transitionToState != null)
                    {
                        _transitionSO = new SerializedObject(_transitionToState);
                        //					SerializedProperty p = _transitionSO.GetIterator();
                        //
                        //					while( p.Next( true ) )
                        //						Debug.Log (p.propertyPath );
                        _transitionDuration   = _transitionSO.FindProperty("m_TransitionDuration");
                        _transitionOffset     = _transitionSO.FindProperty("m_TransitionOffset");
                        _transitionConditions = _transitionSO.FindProperty("m_Conditions");
                    }
                }
                else if (_transitionSO.targetObject == null)
                {
                    _transitionDuration   = null;
                    _transitionOffset     = null;
                    _transitionConditions = null;
                    _transitionSO         = null;
                }
            }
            else
            {
                if (_transitionToState != null || _transitionSO != null)
                {
                    _transitionToState    = null;
                    _transitionSO         = null;
                    _transitionOffset     = null;
                    _transitionDuration   = null;
                    _transitionConditions = null;
                }
            }

            if (_transitionSO != null)
            {
                _transitionSO.Update();
                _animEvtSO.Update();

                FPlayAnimationEvent prevAnimEvt = (FPlayAnimationEvent)_animTrack.GetEvents()[_animEvt.GetId() - 1];

                AnimationClip prevAnimEvtClip = prevAnimEvt._animationClip;
                if (prevAnimEvtClip != null)
                {
                    float exitTimeNormalized = (prevAnimEvt.Length / prevAnimEvtClip.frameRate) / prevAnimEvtClip.length;

                    SerializedProperty exitTime = _transitionConditions.GetArrayElementAtIndex(0).FindPropertyRelative("m_ExitTime");

                    if (!Mathf.Approximately(exitTimeNormalized, exitTime.floatValue))
                    {
                        exitTime.floatValue = exitTimeNormalized;
                    }

                    float blendNormalized = (_blendLength.intValue / prevAnimEvtClip.frameRate) / prevAnimEvtClip.length;

                    if (!Mathf.Approximately(blendNormalized, _transitionDuration.floatValue))
                    {
                        _blendLength.intValue = Mathf.Clamp(Mathf.RoundToInt(_transitionDuration.floatValue * prevAnimEvtClip.length * prevAnimEvtClip.frameRate), 0, _animEvt.Length);

                        _transitionDuration.floatValue = (_blendLength.intValue / prevAnimEvtClip.frameRate) / prevAnimEvtClip.length;

                        _animEvtSO.ApplyModifiedProperties();
                    }
                }

                _transitionSO.ApplyModifiedProperties();
            }
        }
 public AnimatorStateTransition(AnimatorStateMachine sm, AnimatorState parentSate, UnityEditor.Animations.AnimatorTransition t)
     : this(sm, parentSate, (UnityEditor.Animations.AnimatorTransitionBase)t)
 {
 }