13 [RequireComponent(typeof(CompoundButton))]
25 private void Awake() {
26 GetComponent<Button>().StateChange += StateChange;
27 if (TargetAnimator == null) {
28 TargetAnimator = GetComponent<Animator>();
36 if (TargetAnimator == null) {
40 if (AnimActions == null) {
44 if (!gameObject.activeSelf)
47 for (
int i = 0; i < AnimActions.Length; i++) {
48 if (AnimActions[i].ButtonState == newState) {
49 if (!
string.IsNullOrEmpty(AnimActions[i].ParamName)) {
50 switch (AnimActions[i].ParamType) {
51 case AnimatorControllerParameterType.Bool:
52 TargetAnimator.SetBool(AnimActions[i].ParamName, AnimActions[i].BoolValue);
55 case AnimatorControllerParameterType.Float:
56 TargetAnimator.SetFloat(AnimActions[i].ParamName, AnimActions[i].FloatValue);
59 case AnimatorControllerParameterType.Int:
60 TargetAnimator.SetInteger(AnimActions[i].ParamName, AnimActions[i].IntValue);
63 case AnimatorControllerParameterType.Trigger:
64 TargetAnimator.SetTrigger(AnimActions[i].ParamName);
68 throw new ArgumentOutOfRangeException();
78 public class CustomEditor : MRTKEditor
83 protected override void DrawCustomFooter() {
87 AnimatorControllerParameter[] animParams = null;
96 if (!Application.isPlaying && !
string.IsNullOrEmpty (acb.gameObject.scene.name)) {
99 animParams = animator.parameters;
101 for (
int i = 0; i < buttonStates.Length; i++) {
108 bool invalidParam =
true;
109 foreach (AnimatorControllerParameter animParam
in animParams) {
112 invalidParam =
false;
136 bool actionIsEmpty =
string.IsNullOrEmpty(action.
ParamName);
138 UnityEditor.EditorGUILayout.LabelField(action.
ButtonState.ToString(), GUILayout.MaxWidth(150f), GUILayout.MinWidth(150f));
140 if (animParams != null && animParams.Length > 0) {
142 string[] options =
new string[animParams.Length + 1];
143 options[0] =
"(None)";
144 int currentIndex = 0;
145 for (
int i = 0; i < animParams.Length; i++) {
146 options[i + 1] = animParams[i].name;
147 if (animParams[i].name == action.
ParamName) {
148 currentIndex = i + 1;
151 GUI.color = actionIsEmpty ? Color.gray : Color.white;
152 int newIndex =
UnityEditor.EditorGUILayout.Popup(currentIndex, options, GUILayout.MinWidth(150f), GUILayout.MaxWidth(150f));
156 action.
ParamName = animParams[newIndex - 1].name;
157 action.
ParamType = animParams[newIndex - 1].type;
161 GUI.color = action.
InvalidParam ? Color.yellow : Color.white;
162 UnityEditor.EditorGUILayout.LabelField(actionIsEmpty ?
"(None)" : action.
ParamName, GUILayout.MinWidth(75f), GUILayout.MaxWidth(75f));
165 GUI.color = Color.white;
167 if (!actionIsEmpty) {
168 UnityEditor.EditorGUILayout.LabelField(action.
ParamType.ToString(),
UnityEditor.EditorStyles.miniLabel, GUILayout.MinWidth(75f), GUILayout.MaxWidth(75f));
170 case AnimatorControllerParameterType.Bool:
174 case AnimatorControllerParameterType.Float:
178 case AnimatorControllerParameterType.Int:
182 case AnimatorControllerParameterType.Trigger: