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; } }
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; } }
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); }