Пример #1
0
                private Animator GetClipBoundAnimator()
                {
                    PlayableDirector   selectedDirector = TimelineEditor.inspectedDirector;
                    AnimatorParamTrack track            = base.target as AnimatorParamTrack;

                    if (selectedDirector != null && track != null)
                    {
                        ParentBindingTrack parentTrack = track.parent as ParentBindingTrack;

                        if (parentTrack != null)
                        {
                            Object binding = parentTrack.GetEditorBinding(selectedDirector);

                            if (binding is GameObject)
                            {
                                return(AnimatorParamTrack.GetAnimatorFromGameObject((GameObject)binding));
                            }
                            else if (binding is Transform)
                            {
                                return(AnimatorParamTrack.GetAnimatorFromGameObject(((Transform)binding).gameObject));
                            }
                        }
                        else
                        {
                            return(selectedDirector.GetGenericBinding(track) as Animator);
                        }
                    }

                    return(null);
                }
            public override void ProcessFrame(Playable playable, FrameData info, object playerData)
            {
                if (!_parentBinding)
                {
                    _trackBinding = playerData as Animator;
                }

                if (_trackBinding == null)
                {
                    return;
                }

                AnimatorParamTrack track = (AnimatorParamTrack)_trackAsset;

                if (_firstFrame)
                {
                    _parameterHash = GetHash(track._parameterId);
                    _defaultValue  = GetValue();
                    _firstFrame    = false;
                }

#if UNITY_EDITOR
                //Always update hash in editor
                if (Application.isEditor)
                {
                    _parameterHash = GetHash(track._parameterId);
                }
#endif

                if (_parameterHash == -1)
                {
                    return;
                }

                object value = _defaultValue;

                int numInputs = playable.GetInputCount();

                for (int i = 0; i < numInputs; i++)
                {
                    float inputWeight = playable.GetInputWeight(i);

                    if (inputWeight > 0.0f)
                    {
                        value = ApplyPlayableValue(value, playable.GetInput(i), inputWeight);
                    }
                }

                SetValue(value);
            }
 public void SetParentBinding(object playerData)
 {
     if (playerData is GameObject)
     {
         _trackBinding  = AnimatorParamTrack.GetAnimatorFromGameObject((GameObject)playerData);
         _parentBinding = true;
     }
     else if (playerData is Transform)
     {
         _trackBinding  = AnimatorParamTrack.GetAnimatorFromGameObject(((Transform)playerData).gameObject);
         _parentBinding = true;
     }
     else
     {
         _parentBinding = false;
     }
 }
Пример #4
0
                public override void OnInspectorGUI()
                {
                    AnimatorParamTrack track    = base.target as AnimatorParamTrack;
                    Animator           animator = GetClipBoundAnimator();

                    if (animator != null && animator.runtimeAnimatorController != null)
                    {
                        AnimatorControllerParameter[] controllerParameters = (animator.runtimeAnimatorController as AnimatorController).parameters;

                        List <string> parameters = new List <string>();
                        int           index      = 0;

                        for (int i = 0; i < controllerParameters.Length; i++)
                        {
                            if (controllerParameters[i].type == GetParameterType(track))
                            {
                                if (controllerParameters[i].name == track._parameterId)
                                {
                                    index = parameters.Count;
                                }

                                parameters.Add(controllerParameters[i].name);
                            }
                        }

                        if (parameters.Count > 0)
                        {
                            index = EditorGUILayout.Popup(kParameterLabel, index, parameters.ToArray());
                            track._parameterId = parameters[index];
                        }
                        else
                        {
                            GUI.enabled = false;
                            EditorGUILayout.TextField(kNoParametersLabel);
                            GUI.enabled = true;
                        }
                    }
                    else
                    {
                        GUI.enabled = false;
                        EditorGUILayout.TextField(kParameterLabel, track._parameterId);
                        GUI.enabled = true;
                    }
                }
Пример #5
0
                private AnimatorControllerParameterType GetParameterType(AnimatorParamTrack track)
                {
                    if (track is AnimatorFloatParamTrack)
                    {
                        return(AnimatorControllerParameterType.Float);
                    }

                    if (track is AnimatorIntParamTrack)
                    {
                        return(AnimatorControllerParameterType.Int);
                    }

                    if (track is AnimatorBoolParamTrack)
                    {
                        return(AnimatorControllerParameterType.Bool);
                    }

                    return(AnimatorControllerParameterType.Trigger);
                }