void OnEnable()
 {
     m_MultiArray      = serializedObject.FindProperty(MultiMaterialData.materialArrayPub);
     m_Materials       = m_MultiArray.FindPropertyRelative(MaterialArray.materialsPub);
     m_MaterialEditors = new MaterialEditor[] {};
     MaterialArrayDrawers.UpdateShaderNames();
 }
        public void OnEnable()
        {
            m_MaterialEditors = new MaterialEditor[] {};
            m_MultiMaterial   = target as MultiMaterial;
            if (m_MultiMaterial.multiMaterialData != null)
            {
                m_MultiMaterialData = new SerializedObject(m_MultiMaterial.multiMaterialData);
            }
            m_Renderer = m_MultiMaterial.gameObject.GetComponent <Renderer>();

            ValidateEditorData();
            MaterialArrayDrawers.UpdateShaderNames();
        }
        public override void OnInspectorGUI()
        {
            var targetData = target as MultiMaterialData;

            EditorGUI.BeginChangeCheck();
            serializedObject.Update();
            var materialPropList = new List <SerializedProperty>();

            m_Materials.arraySize = EditorGUILayout.DelayedIntField("Size", m_Materials.arraySize);
            serializedObject.ApplyModifiedProperties();
            for (var i = 0; i < m_Materials.arraySize; ++i)
            {
                materialPropList.Add(m_Materials.GetArrayElementAtIndex(i));
            }
            var materialProperties = materialPropList.ToArray();

            serializedObject.ApplyModifiedProperties();
            var changed = EditorGUI.EndChangeCheck();

            MaterialArrayDrawers.OnInspectorGUI(serializedObject,
                                                targetData.materialArrayData, ref m_MaterialEditors, changed, materialProperties);

            var targetArray = targetData.materialArrayData;

            if (MaterialArrayDrawers.AddSelectedButtons(serializedObject, targetArray))
            {
            }

            if (GUILayout.Button("Select Materials"))
            {
                if (targetArray != null && targetArray.materials != null && targetArray.materials.Length > 0)
                {
                    Selection.objects = targetArray.materials;
                }
            }
        }
        public override void OnInspectorGUI()
        {
            var changed = false;

            EditorGUI.BeginChangeCheck();
            serializedObject.Update();
            base.OnInspectorGUI();
            serializedObject.ApplyModifiedProperties();
            changed = EditorGUI.EndChangeCheck();

            ValidateEditorData();

            if (!useRenderer)
            {
                m_MultiMaterialData.Update();
                EditorGUI.BeginChangeCheck();
                m_Materials.arraySize = EditorGUILayout.DelayedIntField("Size",
                                                                        m_Materials.arraySize);
                m_MultiMaterialData.ApplyModifiedProperties();
                if (EditorGUI.EndChangeCheck())
                {
                    if (m_MultiMaterial.multiMaterialData != null)
                    {
                        m_MultiMaterialData = new SerializedObject(m_MultiMaterial.multiMaterialData);
                    }
                    ValidateEditorData();
                    changed = true;
                }
            }
            else if (m_Renderer != null)
            {
                if (CreateMultiMaterialDataButton(false))
                {
                    if (m_MultiMaterial.multiMaterialData != null)
                    {
                        m_MultiMaterialData = new SerializedObject(m_MultiMaterial.multiMaterialData);
                    }
                    ValidateEditorData();
                }
            }

            if (!useRenderer || m_Renderer != null)
            {
                MaterialArrayDrawers.OnInspectorGUI(m_MultiMaterialData, materialArray,
                                                    ref m_MaterialEditors, changed, m_MaterialProperties);

                if (m_Renderer == null && MaterialArrayDrawers.AddSelectedButtons(m_MultiMaterialData, materialArray))
                {
                    MaterialArrayDrawers.RebuildMaterialEditors(ref m_MaterialEditors, materialArray);
                    return;
                }

                if (GUILayout.Button("Select Materials"))
                {
                    if (materialArray != null && materialArray.materials != null &&
                        materialArray.materials.Length > 0)
                    {
                        Selection.objects = materialArray.materials;
                    }
                }
            }
        }