void SetupChildList() { float vSpace = 2; mChildList = new UnityEditorInternal.ReorderableList(serializedObject, serializedObject.FindProperty(() => Target.m_ChildCameras), true, true, true, true); mChildList.drawHeaderCallback = (Rect rect) => { EditorGUI.LabelField(rect, "Virtual Camera Children"); }; mChildList.drawElementCallback = (Rect rect, int index, bool isActive, bool isFocused) => { rect.y += vSpace; Vector2 pos = rect.position; rect.height = EditorGUIUtility.singleLineHeight; SerializedProperty element = mChildList.serializedProperty.GetArrayElementAtIndex(index); EditorGUI.PropertyField(rect, element, GUIContent.none); }; mChildList.onChangedCallback = (UnityEditorInternal.ReorderableList l) => { if (l.index < 0 || l.index >= l.serializedProperty.arraySize) { return; } Object o = l.serializedProperty.GetArrayElementAtIndex( l.index).objectReferenceValue; CinemachineVirtualCameraBase vcam = (o != null) ? (o as CinemachineVirtualCameraBase) : null; if (vcam != null) { vcam.transform.SetSiblingIndex(l.index); } }; mChildList.onAddCallback = (UnityEditorInternal.ReorderableList l) => { var index = l.serializedProperty.arraySize; var vcam = CinemachineMenu.CreateDefaultVirtualCamera(); Undo.SetTransformParent(vcam.transform, Target.transform, ""); vcam.transform.SetSiblingIndex(index); }; mChildList.onRemoveCallback = (UnityEditorInternal.ReorderableList l) => { Object o = l.serializedProperty.GetArrayElementAtIndex( l.index).objectReferenceValue; CinemachineVirtualCameraBase vcam = (o != null) ? (o as CinemachineVirtualCameraBase) : null; if (vcam != null) { Undo.DestroyObjectImmediate(vcam.gameObject); } }; }
public override void OnGUI(Rect rect, SerializedProperty property, GUIContent label) { const float hSpace = 2; float iconSize = rect.height + 4; rect.width -= iconSize + hSpace; EditorGUI.PropertyField(rect, property, EditorGUI.BeginProperty(rect, label, property)); rect.x += rect.width + hSpace; rect.width = iconSize; var oldEnabled = GUI.enabled; var target = property.objectReferenceValue as Transform; if (target == null || target.GetComponent <CinemachineTargetGroup>() != null) { GUI.enabled = false; } if (GUI.Button(rect, EditorGUIUtility.IconContent("_Popup"), GUI.skin.label)) { GenericMenu menu = new GenericMenu(); menu.AddItem(new GUIContent("Convert to TargetGroup"), false, () => { GameObject go = InspectorUtility.CreateGameObject( CinemachineMenu.GenerateUniqueObjectName( typeof(CinemachineTargetGroup), "CM TargetGroup"), typeof(CinemachineTargetGroup)); var group = go.GetComponent <CinemachineTargetGroup>(); Undo.RegisterCreatedObjectUndo(go, "convert to TargetGroup"); group.m_RotationMode = CinemachineTargetGroup.RotationMode.GroupAverage; group.AddMember(target, 1, 1); property.objectReferenceValue = group.Transform; property.serializedObject.ApplyModifiedProperties(); }); menu.ShowAsContext(); } GUI.enabled = oldEnabled; }
static void AdoptSceneViewCameraSettings(MenuCommand command) { var vcam = command.context as CinemachineVirtualCamera; CinemachineMenu.SetVcamFromSceneView(vcam); }
void SetupChildList() { float vSpace = 2; float hSpace = 3; float floatFieldWidth = EditorGUIUtility.singleLineHeight * 2.5f; float hBigSpace = EditorGUIUtility.singleLineHeight * 2 / 3; mChildList = new UnityEditorInternal.ReorderableList(serializedObject, serializedObject.FindProperty(() => Target.m_ChildCameras), true, true, true, true); mChildList.drawHeaderCallback = (Rect rect) => { EditorGUI.LabelField(rect, "Virtual Camera Children"); GUIContent priorityText = new GUIContent("Priority"); var textDimensions = GUI.skin.label.CalcSize(priorityText); rect.x += rect.width - textDimensions.x; rect.width = textDimensions.x; EditorGUI.LabelField(rect, priorityText); }; mChildList.drawElementCallback = (Rect rect, int index, bool isActive, bool isFocused) => { rect.y += vSpace; rect.height = EditorGUIUtility.singleLineHeight; rect.width -= floatFieldWidth + hBigSpace; SerializedProperty element = mChildList.serializedProperty.GetArrayElementAtIndex(index); EditorGUI.PropertyField(rect, element, GUIContent.none); float oldWidth = EditorGUIUtility.labelWidth; EditorGUIUtility.labelWidth = hBigSpace; SerializedObject obj = new SerializedObject(element.objectReferenceValue); rect.x += rect.width + hSpace; rect.width = floatFieldWidth + hBigSpace; SerializedProperty priorityProp = obj.FindProperty(() => Target.m_Priority); EditorGUI.PropertyField(rect, priorityProp, new GUIContent(" ", priorityProp.tooltip)); EditorGUIUtility.labelWidth = oldWidth; obj.ApplyModifiedProperties(); }; mChildList.onChangedCallback = (UnityEditorInternal.ReorderableList l) => { if (l.index < 0 || l.index >= l.serializedProperty.arraySize) { return; } Object o = l.serializedProperty.GetArrayElementAtIndex( l.index).objectReferenceValue; CinemachineVirtualCameraBase vcam = (o != null) ? (o as CinemachineVirtualCameraBase) : null; if (vcam != null) { vcam.transform.SetSiblingIndex(l.index); } }; mChildList.onAddCallback = (UnityEditorInternal.ReorderableList l) => { var index = l.serializedProperty.arraySize; var vcam = CinemachineMenu.CreateDefaultVirtualCamera(); Undo.SetTransformParent(vcam.transform, Target.transform, ""); vcam.transform.SetSiblingIndex(index); }; mChildList.onRemoveCallback = (UnityEditorInternal.ReorderableList l) => { Object o = l.serializedProperty.GetArrayElementAtIndex( l.index).objectReferenceValue; CinemachineVirtualCameraBase vcam = (o != null) ? (o as CinemachineVirtualCameraBase) : null; if (vcam != null) { Undo.DestroyObjectImmediate(vcam.gameObject); } }; }
private void SetupChildList() { float vSpace = 2; float hSpace = 3; var floatFieldWidth = EditorGUIUtility.singleLineHeight * 2.5f; mChildList = new ReorderableList( serializedObject, FindProperty(x => x.m_ChildCameras), true, true, true, true); mChildList.drawHeaderCallback = rect => { EditorGUI.LabelField(rect, "Virtual Camera Children"); var priorityText = new GUIContent("Priority"); var textDimensions = GUI.skin.label.CalcSize(priorityText); rect.x += rect.width - textDimensions.x; rect.width = textDimensions.x; EditorGUI.LabelField(rect, priorityText); }; mChildList.drawElementCallback = (rect, index, isActive, isFocused) => { rect.y += vSpace; rect.width -= floatFieldWidth + hSpace; rect.height = EditorGUIUtility.singleLineHeight; var element = mChildList.serializedProperty.GetArrayElementAtIndex(index); if (m_ColliderState == ColliderState.ColliderOnSomeChildren || m_ColliderState == ColliderState.ColliderOnChildrenAndParent) { var hasCollider = ObjectHasCollider(element.objectReferenceValue); if (m_ColliderState == ColliderState.ColliderOnSomeChildren && !hasCollider || m_ColliderState == ColliderState.ColliderOnChildrenAndParent && hasCollider) { var width = rect.width; rect.width = rect.height; var label = new GUIContent(""); label.image = EditorGUIUtility.IconContent("console.warnicon.sml").image; EditorGUI.LabelField(rect, label); width -= rect.width; rect.x += rect.width; rect.width = width; } } EditorGUI.PropertyField(rect, element, GUIContent.none); var obj = new SerializedObject(element.objectReferenceValue); rect.x += rect.width + hSpace; rect.width = floatFieldWidth; var priorityProp = obj.FindProperty(() => Target.m_Priority); var oldWidth = EditorGUIUtility.labelWidth; EditorGUIUtility.labelWidth = hSpace * 2; EditorGUI.PropertyField(rect, priorityProp, new GUIContent(" ")); EditorGUIUtility.labelWidth = oldWidth; obj.ApplyModifiedProperties(); }; mChildList.onChangedCallback = l => { if (l.index < 0 || l.index >= l.serializedProperty.arraySize) { return; } var o = l.serializedProperty.GetArrayElementAtIndex( l.index).objectReferenceValue; var vcam = o != null ? o as CinemachineVirtualCameraBase : null; if (vcam != null) { vcam.transform.SetSiblingIndex(l.index); } }; mChildList.onAddCallback = l => { var index = l.serializedProperty.arraySize; var vcam = CinemachineMenu.CreateDefaultVirtualCamera(); Undo.SetTransformParent(vcam.transform, Target.transform, ""); var collider = Undo.AddComponent <CinemachineCollider>(vcam.gameObject); collider.m_AvoidObstacles = false; Undo.RecordObject(collider, "create ClearShot child"); vcam.transform.SetSiblingIndex(index); }; mChildList.onRemoveCallback = l => { var o = l.serializedProperty.GetArrayElementAtIndex( l.index).objectReferenceValue; var vcam = o != null ? o as CinemachineVirtualCameraBase : null; if (vcam != null) { Undo.DestroyObjectImmediate(vcam.gameObject); } }; }
static void AdoptSceneViewCameraSettings(MenuCommand command) { var vcam = command.context as CinemachineVirtualCamera; vcam.m_Lens = CinemachineMenu.MatchSceneViewCamera(vcam.transform); }