Exemplo n.º 1
0
        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);
                }
            };
        }
Exemplo n.º 2
0
        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);
        }