public class DataManager : MonoBehaviour
{
private static DataManager _instance;
public static DataManager Instance
{
get
{
if (_instance == null)
{
Debug.Log(_instance == null);
_instance = FindObjectOfType<DataManager>();
DontDestroyOnLoad(_instance.gameObject);
}
return _instance;
}
}
private void Awake()
{
if (_instance != this)
{
Destroy(gameObject);
}
}
}
public class DataManager
{
private static DataManager _instance;
public DataManager Instance
{
get
{
if (_instance == null)
{
_instance = new DataManager();
DontDestroyOnLoad(_instance.gameObject);
}
return _instance;
}
}
private void Awake()
{
if (_instance != this)
{
Destroy(gameObject);
}
}
}
์, ์๋ ์ฝ๋์ ์ฐจ์ด๋ 1) MonoBehaviour ์ ์ ๋ฌด. 2) _instance ์์ฑ ์ ๋๋ค.
1) MonoBehaviour ์ ์ ๋ฌด
์ฐ์ , MonoBehaviour ํด๋์ค๋ Editor ์์ 1) GameObject ์ ์คํฌ๋ฆฝํธ๋ฅผ ์ฐ๊ฒฐํ ์ ์๋ ํ๋ ์์ํฌ๋ฅผ ์ ๊ณตํ๊ณ Start, Update ๋ฑ์ Unity 2) GameObject ์๋ช ์ฃผ๊ธฐ Event ํจ์๋ค๊ณผ 3) Coroutine ์ ์ ๊ณตํฉ๋๋ค.
์ฆ, MonoBehaviour ํด๋์ค๋ฅผ ์์๋ฐ์ ์ ์ฝ๋๋ ์ด๋ฌํ ๊ธฐ๋ฅ์ ์ด์ฉํ ์ ์์ต๋๋ค.
https://docs.unity3d.com/kr/2023.2/ScriptReference/MonoBehaviour.html
์ฐธ๊ณ ๋ก Unity์์ MonoBehaviour๋ฅผ ์์๋ฐ์ ์คํฌ๋ฆฝํธ๋ฅผ GameObject์ ๋ถ์์ ๋, ๊ฐ์ฒด ์์ฑ๊ณผ ์ด๊ธฐํ ๊ณผ์ ๋ฐ ์์๋ ์๋์ ๊ฐ์ต๋๋ค.
- ์์ฑ์ (Constructor)
- Awake()
- OnEnable()
- Start()
- ์์ฑ์:
- ์คํฌ๋ฆฝํธ์ ์ธ์คํด์ค๊ฐ ์์ฑ๋ ๋ ํธ์ถ๋ฉ๋๋ค.
- Unity์์๋ ์์ฑ์ ์ฌ์ฉ์ ๊ถ์ฅํ์ง ์์ต๋๋ค. ๋์ Awake() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
- Awake():
- ์คํฌ๋ฆฝํธ ์ธ์คํด์ค๊ฐ ๋ก๋๋ ๋ ํธ์ถ๋ฉ๋๋ค.
- ๊ฒ์ ์ค๋ธ์ ํธ๊ฐ ๋นํ์ฑํ ์ํ์ฌ๋ ํธ์ถ๋ฉ๋๋ค.
- ๋ค๋ฅธ ์คํฌ๋ฆฝํธ์ ๋ณ์๋ฅผ ์ด๊ธฐํํ๊ฑฐ๋ ๊ฒ์ ์ํ๋ฅผ ์ค์ ํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
- ๋ชจ๋ Awake() ํธ์ถ์ด ์๋ฃ๋ ํ Start() ๋ฉ์๋๊ฐ ํธ์ถ๋ฉ๋๋ค.
- OnEnable():
- ์คํฌ๋ฆฝํธ๊ฐ ํ์ฑํ๋ ๋๋ง๋ค ํธ์ถ๋ฉ๋๋ค.
- ๊ฒ์ ์ค๋ธ์ ํธ๊ฐ ํ์ฑํ๋ ๋๋ ํธ์ถ๋ฉ๋๋ค.
- ์ฝ๋ฃจํด์ ์์ํ๊ธฐ์ ์ ํฉํ ์์น์ ๋๋ค.
- Start():
- ์คํฌ๋ฆฝํธ๊ฐ ํ์ฑํ๋ ํ ์ฒซ ํ๋ ์ ์ ๋ฐ์ดํธ ์ง์ ์ ํธ์ถ๋ฉ๋๋ค.
- ๋ชจ๋ Awake() ํธ์ถ์ด ์๋ฃ๋ ํ์ ํธ์ถ๋ฉ๋๋ค.
- ๋ค๋ฅธ ์คํฌ๋ฆฝํธ์ ๋ชจ๋ ์ด๊ธฐํ๊ฐ ์๋ฃ๋ ํ ์คํํด์ผ ํ๋ ์ด๊ธฐํ์ ์ฌ์ฉ๋ฉ๋๋ค.
์ด ์์๋ฅผ ์ดํดํ๊ณ ์ ์ ํ ํ์ฉํ๋ฉด ์คํฌ๋ฆฝํธ ๊ฐ์ ์์กด์ฑ์ ๊ด๋ฆฌํ๊ณ ์ด๊ธฐํ ๋ก์ง์ ํจ๊ณผ์ ์ผ๋ก ๊ตฌํํ ์ ์์ต๋๋ค.
2) _instance ๋ฅผ ์์ฑํ ๋
์ฒซ๋ฒ์งธ ์ฝ๋(MonoBehaviour๋ฅผ ์์๋ฐ๋ ํด๋์ค)์ฒ๋ผ MonoBehaviour๋ฅผ ์์๋ฐ๋ ํด๋์ค์ ์ธ์คํด์ค๋ ๋ฐ๋์ Unity์ ๋ฐฉ์(์: AddComponent, Instantiate ๋ฑ)์ผ๋ก ์์ฑํด์ผ ํฉ๋๋ค. Singleton ํจํด์ ๊ตฌํํ ๋๋ ์ฃผ๋ก FindObjectOfType์ด๋ ์ฌ์ ๋ฏธ๋ฆฌ ๋ฐฐ์น๋ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ผ๋ฐ์ ์ ๋๋ค.
๋ ๋ฒ์งธ ์ฝ๋์ฒ๋ผ MonoBehaviour๋ฅผ ์์๋ฐ์ง ์๋ ์ผ๋ฐ C# ํด๋์ค์ ๊ฒฝ์ฐ์๋ new ํค์๋๋ก ์ธ์คํด์ค๋ฅผ ์์ฑํด๋ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ํ์ง๋ง ์ด ๊ฒฝ์ฐ Unity์ ์ปดํฌ๋ํธ ์์คํ ๊ณผ ์ฐ๋๋์ง ์์ผ๋ฏ๋ก, GameObject๋ ์ฌ๊ณผ ๊ด๋ จ๋ ์์ ์ ์ํํ ์ ์์ต๋๋ค.
์ฆ, ์ฒซ ๋ฒ์งธ ์ฝ๋์์ _instance = FindObjectOfType<DataManager>(); ๊ฐ ์๋ _instance = new DataManager();๋ก ์ธ์คํด์ค๋ฅผ ์์ฑํ๋ฉด ๋ค์๊ณผ ๊ฐ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
- Unity ๋ผ์ดํ์ฌ์ดํด ๋ฌด์: MonoBehaviour๋ฅผ ์์๋ฐ๋ ํด๋์ค๋ Unity์ ๋ผ์ดํ์ฌ์ดํด์ ๋ฐ๋ผ ๊ด๋ฆฌ๋์ด์ผ ํฉ๋๋ค. new ํค์๋๋ก ์ง์ ์ธ์คํด์ค๋ฅผ ์์ฑํ๋ฉด Unity ์์ง์ด ๊ด๋ฆฌํ์ง ์๋ ๊ฐ์ฒด๊ฐ ์์ฑ๋์ด Awake(), Start() ๋ฑ์ ๋ฉ์๋๊ฐ ์๋์ผ๋ก ํธ์ถ๋์ง ์์ต๋๋ค.
- ์ปดํฌ๋ํธ๋ก์์ ๊ธฐ๋ฅ ์์ค: new๋ก ์์ฑ๋ ๊ฐ์ฒด๋ ์ฌ์ GameObject์ ๋ถ์ฐฉ๋์ง ์์ต๋๋ค. ๋ฐ๋ผ์ Transform ๋ฑ GameObject์ ๊ด๋ จ๋ ์ปดํฌ๋ํธ์ ์ ๊ทผํ ์ ์๊ฒ ๋ฉ๋๋ค.
- DontDestroyOnLoad ๋ฌธ์ : DontDestroyOnLoad()๋ GameObject์ ๋ํด ์๋ํฉ๋๋ค. new๋ก ์์ฑ๋ ๊ฐ์ฒด๋ GameObject๊ฐ ์์ผ๋ฏ๋ก ์ด ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
- FindObjectOfType ๋ถ์ผ์น: FindObjectOfType<DataManager>()๋ ์ฌ์ ์กด์ฌํ๋ DataManager ์ปดํฌ๋ํธ๋ฅผ ์ฐพ์ง๋ง, new๋ก ์์ฑ๋ ๊ฐ์ฒด๋ ์ฌ์ ์กด์ฌํ์ง ์์ ์ฐพ์ ์ ์์ต๋๋ค.
- ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ์ด์: Unity์ ๊ฐ์ฒด ์๋ช ์ฃผ๊ธฐ ๊ด๋ฆฌ ์์คํ ์ ๋ฒ์ด๋๋ฏ๋ก, ๋ฉ๋ชจ๋ฆฌ ๋์๊ฐ ๋ฐ์ํ ๊ฐ๋ฅ์ฑ์ด ์์ต๋๋ค.
- Destroy ๋ฉ์๋ ์๋ ๋ถ๊ฐ: Destroy(gameObject)๋ Unity ์์ง์ด ๊ด๋ฆฌํ๋ GameObject์ ๋ํด์๋ง ์๋ํฉ๋๋ค. new๋ก ์์ฑ๋ ๊ฐ์ฒด์๋ ์ ์ฉํ ์ ์์ต๋๋ค.
'๐ฎ Unity Study > Unity' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Unity] Unity6 Preview ์ ๋ฐ์ดํธ ๋ด์ฉ ์ ๋ฆฌ (0) | 2024.05.20 |
---|---|
[Unity Document Study] 3์ฃผ์ฐจ :: Unity Package Manager (0) | 2024.05.20 |
[Unity Document Study] 2์ฃผ์ฐจ :: Asset Workflow (0) | 2024.05.11 |
[Unity Document Study] 1์ฃผ์ฐจ :: Unity Analysis - Unity Profiler (0) | 2024.05.02 |
[Unity Document Study] 1์ฃผ์ฐจ :: Unity Analysis - Memory in Unity (0) | 2024.05.01 |