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