public static void CreateNewInstance() { GameObject go = new GameObject("Scene Reference Resolver"); current = go.AddComponent <SceneReferenceResolver>(); #if UNITY_EDITOR Selection.activeGameObject = go; #endif }
private void OnGUI() { GUILayout.Label("Reference Checker", EditorStyles.boldLabel); GUILayout.Label("Check if an object is referenced by scene or by asset database.", EditorStyles.wordWrappedLabel); this.unityObject = EditorGUILayout.ObjectField(this.unityObject, typeof(UnityEngine.Object), true); if (this.unityObject == null) { EditorGUILayout.HelpBox("Select an object to check if this object is referenced by scene or asset.", MessageType.Info); return; } bool isReferenced = false; bool canBeReferencedByScene = !EditorUtility.IsPersistent(this.unityObject); bool isReferencedByScene = false; bool isReferencedByAsset = false; if (SceneReferenceResolver.Current != null) { isReferenced |= isReferencedByScene = SceneReferenceResolver.Current.Contains(this.unityObject); } if (AssetReferenceResolver.Current != null) { isReferenced |= isReferencedByAsset = AssetReferenceResolver.Current.Contains(this.unityObject); } GUILayout.BeginHorizontal(EditorStyles.helpBox); GUILayout.Label(string.Format("Is Persistent: {0}", EditorUtility.IsPersistent(this.unityObject))); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(EditorStyles.helpBox); GUILayout.Label(string.Format("Is Referenced: {0}", isReferenced)); GUILayout.EndHorizontal(); if (SceneReferenceResolver.Current == null) { EditorGUILayout.HelpBox("There are no scene reference resolver in this scene.", MessageType.Warning); if (GUILayout.Button("Add to Scene", EditorStyles.miniButton)) { SceneReferenceResolver.CreateNewInstance(); } } else { GUILayout.BeginHorizontal(EditorStyles.helpBox); GUILayout.Label(string.Format("Is Referenced By Scene: {0}", isReferencedByScene)); if (!isReferencedByScene && canBeReferencedByScene) { if (GUILayout.Button("Add Reference", EditorStyles.miniButton)) { string guid = SceneReferenceResolver.Current.Add(this.unityObject); Debug.LogFormat("New reference added to Scene with '{0}' GUID.", guid); } } GUILayout.EndHorizontal(); } GUILayout.BeginHorizontal(EditorStyles.helpBox); GUILayout.Label(string.Format("Is Referenced By Asset: {0}", isReferencedByAsset)); if (!isReferencedByAsset && !canBeReferencedByScene) { if (GUILayout.Button("Add Reference", EditorStyles.miniButton)) { string guid = AssetReferenceResolver.Current.Add(this.unityObject); Debug.LogFormat("New reference added to Asset Reference Database with '{0}' GUID.", guid); } } GUILayout.EndHorizontal(); if (isReferencedByAsset) { string path = AssetDatabase.GetAssetPath(this.unityObject); GUILayout.BeginHorizontal(EditorStyles.helpBox); GUILayout.Label("Asset Path:"); EditorGUILayout.SelectableLabel(path, EditorStyles.textField, GUILayout.Height(EditorGUIUtility.singleLineHeight)); GUILayout.EndHorizontal(); } GUILayout.FlexibleSpace(); GUILayout.Label("Made with ❤️ by Bayat", EditorStyles.centeredGreyMiniLabel); }
private void OnEnable() { this.sceneReferenceResolver = (SceneReferenceResolver)target; }