private void CreateEditor() { DestroyEditor(); if (Editor.Selection.activeObject == null) { return; } UnityObject[] selectedObjects = Editor.Selection.objects.Where(o => o != null).ToArray(); if (selectedObjects.Length != 1) { return; } Type objType = selectedObjects[0].GetType(); for (int i = 1; i < selectedObjects.Length; ++i) { if (objType != selectedObjects[i].GetType()) { return; } } ExposeToEditor exposeToEditor = Editor.Selection.activeGameObject != null? Editor.Selection.activeGameObject.GetComponent <ExposeToEditor>() : null; if (exposeToEditor != null && !exposeToEditor.CanInspect) { return; } GameObject editorPrefab; if (objType == typeof(Material)) { Material mat = selectedObjects[0] as Material; if (mat.shader == null) { return; } editorPrefab = m_editorsMap.GetMaterialEditor(mat.shader); } else { if (!m_editorsMap.IsObjectEditorEnabled(objType)) { return; } editorPrefab = m_editorsMap.GetObjectEditor(objType); } if (editorPrefab != null) { m_editor = Instantiate(editorPrefab); m_editor.transform.SetParent(m_panel, false); m_editor.transform.SetAsFirstSibling(); } if (m_addComponentRoot != null && exposeToEditor) { IProject project = IOC.Resolve <IProject>(); if (project == null || project.ToAssetItem(Editor.Selection.activeGameObject) == null) { m_addComponentRoot.SetActive(true); if (m_addComponentControl != null) { m_addComponentControl.ComponentSelected += OnAddComponent; } } } }
private void CreateEditor() { DestroyEditor(); if (Editor.Selection.activeObject == null) { return; } if (Editor.Selection.objects[0] == null) { return; } UnityObject[] selectedObjects = Editor.Selection.objects.Where(o => o != null).ToArray(); Type objType; if (!OfSameType(selectedObjects, out objType)) { return; } ExposeToEditor exposeToEditor = null; if (objType == typeof(GameObject)) { exposeToEditor = Editor.Selection.activeGameObject.GetComponent <ExposeToEditor>(); if (exposeToEditor != null && !exposeToEditor.CanInspect) { return; } } GameObject editorPrefab; if (objType == typeof(Material)) { Material mat = selectedObjects[0] as Material; if (mat.shader == null) { return; } Shader shader = mat.shader; for (int i = 0; i < selectedObjects.Length; ++i) { Material material = (Material)selectedObjects[i]; if (material.shader != shader) { return; } } editorPrefab = m_editorsMap.GetMaterialEditor(mat.shader); } else { if (!m_editorsMap.IsObjectEditorEnabled(objType)) { return; } editorPrefab = m_editorsMap.GetObjectEditor(objType); } if (editorPrefab != null) { m_editor = Instantiate(editorPrefab); m_editor.transform.SetParent(m_panel, false); m_editor.transform.SetAsFirstSibling(); } if (m_addComponentRoot != null && exposeToEditor && (m_settingsComponent == null || m_settingsComponent.BuiltInWindowsSettings.Inspector.ShowAddComponentButton)) { IProject project = IOC.Resolve <IProject>(); if (project == null || project.ToAssetItem(Editor.Selection.activeGameObject) == null) { m_addComponentRoot.SetActive(true); if (m_addComponentControl != null) { m_addComponentControl.ComponentSelected += OnAddComponent; } } } }