private void _DisplayApiExample( ) { string helpText = "TRYME! Try to drag game object from various places and Display prefab properties.\n" + "- From scene\n" + "- From asset folder\n" + "- From prefab editing stage\n" + "- Nested prefab, child of nested prefab, non-prefab\n" + "Output below."; EditorGUILayout.HelpBox(helpText, MessageType.Info); m_TestingPrefab = EditorGUILayout.ObjectField("Testing GameObject", m_TestingPrefab, typeof(GameObject), true); if (m_TestingPrefab == null) { m_CurrentDisplayingPrefab = null; } if (m_TestingPrefab != m_CurrentDisplayingPrefab) { m_CurrentDisplayingPrefab = m_TestingPrefab; m_CurrentProperties = PrefabHelper.GetPrefabProperties(m_TestingPrefab as GameObject); } // Display output var prop = m_CurrentProperties; string report = ""; if (prop.isPartOfPrefabStage) { report += "Is "; if (prop.isPrefabStageRoot) { report += "root of "; } else { report += "child of "; } report += "prefabStage"; report += "\n"; } if (prop.isPartOfPrefabAsset) { report += "Is "; if (prop.isPrefabAssetRoot) { report += "root of "; } else { report += "child of "; } report += "prefabAsset"; report += "\n"; } if (prop.isPartOfPrefabInstance) { report += "Is "; if (prop.isPrefabInstanceRoot) { report += "root of "; } else { report += "child of "; } report += "prefabInstance"; report += "\n"; } #if false if (prop.isVariant) { report += "variant"; report += " "; } #endif if (prop.isSceneObject) { report += "Is sceneObject"; report += "\n"; } report += "nearest AssetPath: " + prop.prefabAssetPath; report += "\n"; if (prop.prefabAssetRoot != null) { report += "Prefab asset root is: " + prop.prefabAssetRoot.name; report += "\n"; } EditorGUILayout.HelpBox(report, MessageType.None); if (prop.nearestInstanceRoot != null) { GUI.enabled = false; EditorGUILayout.LabelField("Resolved nearest instance root"); EditorGUI.indentLevel += 1; EditorGUILayout.ObjectField(prop.nearestInstanceRoot, typeof(GameObject), true); EditorGUI.indentLevel -= 1; GUI.enabled = true; } if (prop.prefabAssetRoot != null) { GUI.enabled = false; EditorGUILayout.LabelField("Resolved prefab asset root"); EditorGUI.indentLevel += 1; EditorGUILayout.ObjectField(prop.prefabAssetRoot, typeof(GameObject), false); EditorGUI.indentLevel -= 1; GUI.enabled = true; } }
private void _DisplayApiExample( ) { string helpText = "TRYME! Try to drag game object from various places and Display prefab properties.\n" + "- From scene\n" + "- From asset folder\n" + "- From prefab editing stage\n" + "- Nested prefab, child of nested prefab, non-prefab\n" + "Output below."; EditorGUILayout.HelpBox(helpText, MessageType.Info); m_TestingPrefab = EditorGUILayout.ObjectField("Testing GameObject", m_TestingPrefab, typeof(GameObject), true); if (m_TestingPrefab == null) { m_CurrentDisplayingPrefab = null; } if (m_TestingPrefab != m_CurrentDisplayingPrefab || m_CurrentProperties == null) { m_CurrentDisplayingPrefab = m_TestingPrefab; m_CurrentProperties = PrefabHelper.GetPrefabProperties(m_TestingPrefab as GameObject); } if (m_CurrentProperties == null) { return; } // Display output var prop = m_CurrentProperties; string report = ""; if (prop.isPartOfPrefabStage) { report += "This is "; if (prop.isPrefabStageRoot) { report += "root of "; } else { report += "child of "; } report += "prefabStage"; report += "\n"; } if (prop.isPartOfPrefabAsset) { report += "This is "; if (prop.isPrefabAssetRoot) { report += "root of "; } else { report += "child of "; } report += "prefabAsset"; report += "\n"; } if (prop.isPartOfPrefabInstance) { report += "This is "; if (prop.isPrefabInstanceRoot) { report += "root of "; } else { report += "child of "; } report += "prefabInstance"; report += "\n"; } if (prop.isPrefabAssetVariant) { report += "This is variant"; report += "\n"; } if (prop.isSceneObject) { report += "This is sceneObject"; report += "\n"; } report += "nearest AssetPath: " + prop.prefabAssetPath; report += "\n"; if (prop.prefabAssetRoot != null) { report += "Prefab asset root is: " + prop.prefabAssetRoot.name; report += "\n"; } EditorGUILayout.HelpBox(report, MessageType.None); if (prop.nearestInstanceRoot != null) { EditorGUILayout.LabelField("Resolved nearest instance root"); EditorGUI.indentLevel += 1; GUILayout.Label(Helper.GetGameObjectPath(prop.nearestInstanceRoot)); GUI.enabled = false; EditorGUILayout.ObjectField(prop.nearestInstanceRoot, typeof(GameObject), true); GUI.enabled = true; EditorGUI.indentLevel -= 1; } if (prop.prefabAssetRoot != null) { EditorGUILayout.LabelField("Resolved prefab asset root, this object was from this asset:"); EditorGUI.indentLevel += 1; GUILayout.Label(Helper.GetGameObjectPath(prop.prefabAssetRoot)); GUI.enabled = false; EditorGUILayout.ObjectField(prop.prefabAssetRoot, typeof(GameObject), false); GUI.enabled = true; EditorGUI.indentLevel -= 1; } int level = 1; GameObject oneLevelUp = prop.GetSourcePrefab( ); while (oneLevelUp != null) { if (level > 10) { GUILayout.Label("AND MORE!...."); break; } EditorGUILayout.LabelField($"Sourced from ({level} level up), this object was made from:"); EditorGUI.indentLevel += 1; GUILayout.Label(Helper.GetGameObjectPath(oneLevelUp)); GUI.enabled = false; EditorGUILayout.ObjectField(oneLevelUp, typeof(GameObject), false); GUI.enabled = true; EditorGUI.indentLevel -= 1; // To next level++; oneLevelUp = PrefabUtility.GetCorrespondingObjectFromSource(oneLevelUp); // this is function behind GetSourcePrefab } }