static void LoadAsset() { if (Application.isPlaying) { if (!s_instance) { s_instance = Resources.Load(typeof(T).Name) as T; } } #if UNITY_EDITOR if (!s_instance) { ResourceSingletonBuilder.BuildResourceSingletonsIfDirty(); // ensure that singletons were built var temp = ScriptableObject.CreateInstance <T>(); var monoscript = MonoScript.FromScriptableObject(temp); ScriptableObject.DestroyImmediate(temp); var scriptPath = AssetDatabase.GetAssetPath(monoscript); var assetDir = Path.GetDirectoryName(scriptPath) + "/Resources/"; var assetPath = assetDir + Path.GetFileNameWithoutExtension(scriptPath) + ".asset"; s_instance = AssetDatabase.LoadAssetAtPath <T>(assetPath); } #endif }
static void LoadAsset() { if (Application.isPlaying) { if (!s_instance) { s_instance = Resources.Load(ResourceFilenameAttribute.Get <T>()) as T; } } #if UNITY_EDITOR if (!s_instance) { ResourceSingletonBuilder.BuildResourceSingletonsIfDirty(); // ensure that singletons were built var temp = CreateInstance <T>(); var monoscript = MonoScript.FromScriptableObject(temp); DestroyImmediate(temp); var scriptPath = AssetDatabase.GetAssetPath(monoscript); var assetDir = Path.GetDirectoryName(scriptPath).Replace("\\", "/") + "/Resources/"; Directory.CreateDirectory(assetDir); var assetPath = assetDir + ResourceFilenameAttribute.Get <T>() + ".asset"; s_instance = AssetDatabase.LoadAssetAtPath <T>(assetPath); } #endif }
private static void ProcessDependencies() { ResourceSingletonBuilder.BuildResourceSingletonsIfDirty(); var so = new UnityEditor.SerializedObject(instance); var types = new string[] { ".cs", ".js" }; var allScriptPaths = Directory.GetFiles("Assets", "*.*", SearchOption.AllDirectories) .Where(s => types.Any(x => s.EndsWith(x, System.StringComparison.CurrentCultureIgnoreCase))) .ToArray(); instance.m_serializedItems.Clear(); for (int i = 0; i < allScriptPaths.Length; ++i) { UnityEditor.MonoScript script = UnityEditor.AssetDatabase.LoadAssetAtPath(allScriptPaths[i], typeof(UnityEditor.MonoScript)) as UnityEditor.MonoScript; if (!script || script.GetClass() == null) { continue; } var type = script.GetClass(); if (!typeof(Component).IsAssignableFrom(script.GetClass()) && !typeof(ScriptableObject).IsAssignableFrom(script.GetClass())) { continue; } var typeExecutionOrder = UnityEditor.MonoImporter.GetExecutionOrder(script); if (typeExecutionOrder == 0) { continue; } instance.m_serializedItems.Add(new SerializedItem() { typeName = type.FullName, executionOrder = typeExecutionOrder, }); } so.Update(); instance.hideFlags = HideFlags.NotEditable; UnityEditor.EditorUtility.SetDirty(instance); UnityEditor.AssetDatabase.Refresh(); }
private static void ProcessDependencies() { ResourceSingletonBuilder.BuildResourceSingletonsIfDirty(); var types = new string[] { ".cs", ".js" }; var allScriptPaths = Directory.GetFiles("Assets", "*.*", SearchOption.AllDirectories) .Where(s => types.Any(x => s.EndsWith(x, System.StringComparison.CurrentCultureIgnoreCase))) .ToArray(); for (int i = 0; i < allScriptPaths.Length; ++i) { UnityEditor.MonoScript script = UnityEditor.AssetDatabase.LoadAssetAtPath(allScriptPaths[i], typeof(UnityEditor.MonoScript)) as UnityEditor.MonoScript; if (!script || script.GetClass() == null) { continue; } if (!typeof(Component).IsAssignableFrom(script.GetClass())) { continue; } var type = script.GetClass(); var attributes = (ComponentDependencyAttribute[])type.GetCustomAttributes(typeof(ComponentDependencyAttribute), true); if (attributes.Length == 0) { continue; } var dependencies = attributes .Where(x => x != null) .SelectMany(x => x.GetComponentDependencies()) .ToArray(); ProcessAll_SetDependencies(type, dependencies); } }