@@ -10,51 +10,45 @@ public static T Instance
1010 {
1111 get
1212 {
13- LoadOrCreateInstance ( ) ;
13+ if ( instance == null )
14+ instance = LoadOrCreateInstance < T > ( ) ;
1415 return instance ;
1516 }
1617 }
1718
1819 [ RuntimeInitializeOnLoadMethod ( RuntimeInitializeLoadType . BeforeSceneLoad ) ]
19- public static void LoadOrCreateInstance ( )
20+ public static T LoadOrCreateInstance < T > ( ) where T : ScriptableObject
2021 {
21- if ( instance != null )
22- return ;
23-
24- instance = FindObjectOfType < T > ( ) ;
25-
26- if ( instance != null )
27- return ;
28-
29- instance = Resources . Load < T > ( typeof ( T ) . Name ) ;
22+ T newInstance = Resources . Load < T > ( typeof ( T ) . Name ) ;
3023
31- if ( instance != null )
32- return ;
24+ if ( newInstance != null )
25+ return newInstance ;
3326
3427#if UNITY_EDITOR
3528 if ( Application . isPlaying )
36- return ;
29+ return null ;
3730
3831 string registryGUID = UnityEditor . AssetDatabase . FindAssets ( $ "t:{ typeof ( T ) . Name } ")
3932 . FirstOrDefault ( ) ;
4033
4134 if ( ! string . IsNullOrEmpty ( registryGUID ) )
4235 {
43- instance = UnityEditor . AssetDatabase . LoadAssetAtPath < T > (
36+ newInstance = ( T ) UnityEditor . AssetDatabase . LoadAssetAtPath < ScriptableObject > (
4437 UnityEditor . AssetDatabase . GUIDToAssetPath ( registryGUID ) ) ;
4538 }
39+
40+ if ( newInstance != null )
41+ return newInstance ;
4642
47- if ( instance != null )
48- return ;
49-
50-
51- instance = CreateInstance < T > ( ) ;
43+ newInstance = CreateInstance < T > ( ) ;
5244
5345 AssetDatabaseUtils . CreatePathIfDontExist ( "Assets/Resources" ) ;
54- UnityEditor . AssetDatabase . CreateAsset ( instance , $ "Assets/Resources/{ typeof ( T ) . Name } .asset") ;
46+ UnityEditor . AssetDatabase . CreateAsset ( newInstance , $ "Assets/Resources/{ typeof ( T ) . Name } .asset") ;
5547 UnityEditor . AssetDatabase . SaveAssets ( ) ;
5648 UnityEditor . AssetDatabase . Refresh ( ) ;
49+ return newInstance ;
5750#endif
51+ return null ;
5852 }
5953 }
6054}
0 commit comments