You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			91 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			C#
		
	
			
		
		
	
	
			91 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			C#
		
	
using UnityEngine;
 | 
						|
using UnityEditor;
 | 
						|
using System.Collections;
 | 
						|
using RootMotion.FinalIK;
 | 
						|
 | 
						|
namespace RootMotion.Demos {
 | 
						|
 | 
						|
	/*
 | 
						|
	 * Custom inspector and scene view helpers for the InteractionTarget.
 | 
						|
	 * */
 | 
						|
	[CustomEditor(typeof(InteractionTarget))]
 | 
						|
	public class InteractionTargetInspector : Editor {
 | 
						|
 | 
						|
		private InteractionTarget script { get { return target as InteractionTarget; }}
 | 
						|
 | 
						|
		private const string twistAxisLabel = " Twist Axis";
 | 
						|
		private const float size = 0.005f;
 | 
						|
		private static Color targetColor = new Color(0.2f, 1f, 0.5f);
 | 
						|
		private static Color pivotColor = new Color(0.2f, 0.5f, 1f);
 | 
						|
 | 
						|
		void OnSceneGUI() {
 | 
						|
			Handles.color = targetColor;
 | 
						|
 | 
						|
			Inspector.SphereCap(0, script.transform.position, Quaternion.identity, size);
 | 
						|
 | 
						|
			DrawChildrenRecursive(script.transform);
 | 
						|
 | 
						|
			if (script.pivot != null) {
 | 
						|
				Handles.color = pivotColor;
 | 
						|
				GUI.color = pivotColor;
 | 
						|
 | 
						|
				Inspector.SphereCap(0, script.pivot.position, Quaternion.identity, size);
 | 
						|
 | 
						|
                if (script.rotationMode == InteractionTarget.RotationMode.TwoDOF)
 | 
						|
                {
 | 
						|
                    Vector3 twistAxisWorld = script.pivot.rotation * script.twistAxis.normalized * size * 40;
 | 
						|
                    Handles.DrawLine(script.pivot.position, script.pivot.position + twistAxisWorld);
 | 
						|
                    Inspector.SphereCap(0, script.pivot.position + twistAxisWorld, Quaternion.identity, size);
 | 
						|
 | 
						|
                    Inspector.CircleCap(0, script.pivot.position, Quaternion.LookRotation(twistAxisWorld), size * 20);
 | 
						|
                    Handles.Label(script.pivot.position + twistAxisWorld, twistAxisLabel);
 | 
						|
                }
 | 
						|
			}
 | 
						|
 | 
						|
			Handles.color = Color.white;
 | 
						|
			GUI.color = Color.white;
 | 
						|
		}
 | 
						|
 | 
						|
        public override void OnInspectorGUI()
 | 
						|
        {
 | 
						|
            serializedObject.Update();
 | 
						|
 | 
						|
            EditorGUILayout.PropertyField(serializedObject.FindProperty("effectorType"));
 | 
						|
            EditorGUILayout.PropertyField(serializedObject.FindProperty("multipliers"), true);
 | 
						|
            EditorGUILayout.PropertyField(serializedObject.FindProperty("interactionSpeedMlp"));
 | 
						|
            EditorGUILayout.PropertyField(serializedObject.FindProperty("pivot"));
 | 
						|
 | 
						|
            EditorGUILayout.Space();
 | 
						|
            EditorGUILayout.PropertyField(serializedObject.FindProperty("rotationMode"));
 | 
						|
 | 
						|
            int rotationMode = serializedObject.FindProperty("rotationMode").enumValueIndex;
 | 
						|
            if (rotationMode == 0)
 | 
						|
            {
 | 
						|
                EditorGUILayout.PropertyField(serializedObject.FindProperty("twistAxis"));
 | 
						|
                EditorGUILayout.PropertyField(serializedObject.FindProperty("twistWeight"));
 | 
						|
                EditorGUILayout.PropertyField(serializedObject.FindProperty("swingWeight"));
 | 
						|
            } else if (rotationMode == 1)
 | 
						|
            {
 | 
						|
                EditorGUILayout.PropertyField(serializedObject.FindProperty("threeDOFWeight"));
 | 
						|
            }
 | 
						|
            EditorGUILayout.PropertyField(serializedObject.FindProperty("rotateOnce"));
 | 
						|
            EditorGUILayout.PropertyField(serializedObject.FindProperty("usePoser"));
 | 
						|
 | 
						|
            if (serializedObject.ApplyModifiedProperties())
 | 
						|
            {
 | 
						|
                EditorUtility.SetDirty(script);
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        private void DrawChildrenRecursive(Transform t) {
 | 
						|
			for (int i = 0; i < t.childCount; i++) {
 | 
						|
 | 
						|
				Handles.DrawLine(t.position, t.GetChild(i).position);
 | 
						|
				Inspector.SphereCap(0, t.GetChild(i).position, Quaternion.identity, size);
 | 
						|
 | 
						|
				DrawChildrenRecursive(t.GetChild(i));
 | 
						|
			}
 | 
						|
		}
 | 
						|
	}
 | 
						|
}
 |