Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit77c325f

Browse files
committed
Revised the singletons implementation
Added PersistentMonoSingleton which is persistent across scenesMade MonoSingleton non-persistentAdded ISingleton interface for unifying the methods and callsAdd assembly definitionAdded namespace (UnityCommunity.UnitySingleton)
1 parent84faf4b commit77c325f

File tree

53 files changed

+4738
-497
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

53 files changed

+4738
-497
lines changed

‎.vsconfig‎

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"version": "1.0",
3+
"components": [
4+
"Microsoft.VisualStudio.Workload.ManagedGame"
5+
]
6+
}

‎Assets/Scripts/GameManager.cs‎

Lines changed: 0 additions & 22 deletions
This file was deleted.

‎Assets/Scripts/MonoSingleton.cs‎

Lines changed: 0 additions & 109 deletions
This file was deleted.
Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more aboutcustomizing how changed files appear on GitHub.
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
usingSystem.Collections;
2+
usingSystem.Collections.Generic;
3+
4+
usingUnityEngine;
5+
6+
namespaceUnityCommunity.UnitySingleton
7+
{
8+
9+
/// <summary>
10+
/// The singleton interface.
11+
/// </summary>
12+
publicinterfaceISingleton
13+
{
14+
15+
publicvoidInitializeSingleton();
16+
17+
publicvoidClearSingleton();
18+
19+
}
20+
21+
}

Assets/Scripts/SceneSingleton/SceneSingleton.cs.meta renamed to Assets/Scripts/Runtime/ISingleton.cs.meta

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more aboutcustomizing how changed files appear on GitHub.
Lines changed: 155 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,155 @@
1+
usingSystem.Collections;
2+
usingSystem.Collections.Generic;
3+
4+
usingUnityCommunity.UnitySingleton;
5+
6+
usingUnityEngine;
7+
8+
namespaceUnityCommunity.UnitySingleton
9+
{
10+
11+
/// <summary>
12+
/// The basic MonoBehaviour singleton implementation, this singleton is destroyed after scene changes, use <see cref="PersistentMonoSingleton{T}"/> if you want a persistent and global singleton instance.
13+
/// </summary>
14+
/// <typeparam name="T"></typeparam>
15+
publicabstractclassMonoSingleton<T>:MonoBehaviour,ISingletonwhereT:MonoSingleton<T>
16+
{
17+
18+
#region Fields
19+
20+
/// <summary>
21+
/// The instance.
22+
/// </summary>
23+
privatestaticTinstance;
24+
25+
/// <summary>
26+
/// The initialization status of the singleton's instance.
27+
/// </summary>
28+
privateSingletonInitializationStatusinitializationStatus=SingletonInitializationStatus.None;
29+
30+
#endregion
31+
32+
#region Properties
33+
34+
/// <summary>
35+
/// Gets the instance.
36+
/// </summary>
37+
/// <value>The instance.</value>
38+
publicstaticTInstance
39+
{
40+
get
41+
{
42+
if(instance==null)
43+
{
44+
instance=FindObjectOfType<T>();
45+
if(instance==null)
46+
{
47+
GameObjectobj=newGameObject();
48+
obj.name=typeof(T).Name;
49+
instance=obj.AddComponent<T>();
50+
instance.OnMonoSingletonCreated();
51+
}
52+
}
53+
returninstance;
54+
}
55+
}
56+
57+
/// <summary>
58+
/// Gets whether the singleton's instance is initialized.
59+
/// </summary>
60+
publicvirtualboolIsInitialized=>this.initializationStatus==SingletonInitializationStatus.Initialized;
61+
62+
#endregion
63+
64+
#region Unity Messages
65+
66+
/// <summary>
67+
/// Use this for initialization.
68+
/// </summary>
69+
protectedvirtualvoidAwake()
70+
{
71+
if(instance==null)
72+
{
73+
instance=thisasT;
74+
75+
// Initialize existing instance
76+
InitializeSingleton();
77+
}
78+
else
79+
{
80+
81+
// Destory duplicates
82+
if(Application.isPlaying)
83+
{
84+
Destroy(gameObject);
85+
}
86+
else
87+
{
88+
DestroyImmediate(gameObject);
89+
}
90+
}
91+
}
92+
93+
#endregion
94+
95+
#region Protected Methods
96+
97+
/// <summary>
98+
/// This gets called once the singleton's instance is created.
99+
/// </summary>
100+
protectedvirtualvoidOnMonoSingletonCreated()
101+
{
102+
103+
}
104+
105+
protectedvirtualvoidOnInitializing()
106+
{
107+
108+
}
109+
110+
protectedvirtualvoidOnInitialized()
111+
{
112+
113+
}
114+
115+
#endregion
116+
117+
#region Public Methods
118+
119+
publicvirtualvoidInitializeSingleton()
120+
{
121+
if(this.initializationStatus!=SingletonInitializationStatus.None)
122+
{
123+
return;
124+
}
125+
126+
this.initializationStatus=SingletonInitializationStatus.Initializing;
127+
OnInitializing();
128+
this.initializationStatus=SingletonInitializationStatus.Initialized;
129+
OnInitialized();
130+
}
131+
132+
publicvirtualvoidClearSingleton(){}
133+
134+
publicstaticvoidCreateInstance()
135+
{
136+
DestroyInstance();
137+
instance=Instance;
138+
}
139+
140+
publicstaticvoidDestroyInstance()
141+
{
142+
if(instance==null)
143+
{
144+
return;
145+
}
146+
147+
instance.ClearSingleton();
148+
instance=default(T);
149+
}
150+
151+
#endregion
152+
153+
}
154+
155+
}
File renamed without changes.
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
usingSystem.Collections;
2+
usingSystem.Collections.Generic;
3+
4+
usingUnityCommunity.UnitySingleton;
5+
6+
usingUnityEngine;
7+
8+
namespaceUnityCommunity.UnitySingleton
9+
{
10+
11+
/// <summary>
12+
/// This singleton is persistent across scenes by calling <see cref="UnityEngine.Object.DontDestroyOnLoad(Object)"/>.
13+
/// </summary>
14+
/// <typeparam name="T"></typeparam>
15+
publicabstractclassPersistentMonoSingleton<T>:MonoSingleton<T>whereT:MonoSingleton<T>
16+
{
17+
18+
#region Protected Methods
19+
20+
protectedoverridevoidOnInitializing()
21+
{
22+
base.OnInitializing();
23+
if(Application.isPlaying)
24+
{
25+
DontDestroyOnLoad(gameObject);
26+
}
27+
}
28+
29+
#endregion
30+
31+
}
32+
33+
}

‎Assets/Scripts/Runtime/PersistentMonoSingleton.cs.meta‎

Lines changed: 12 additions & 0 deletions
Some generated files are not rendered by default. Learn more aboutcustomizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp