Unity и Singleton

Tulenber 21 February, 2020 ⸱ Beginner ⸱ 2 min ⸱

Singleton и кола, двойной высокий.

Определённо паттерны одна из важнейших тем не только в геймдеве, но и в программировании в целом. Навряд ли проходя собеседование на программиста вам не зададут вопрос про паттерны, и есть стойкое ощущение что Singleton называется в 80% первым из всех =)
Про паттерны написаны миллионы статей, так что при нехватке теоретических знаний можете почитать вот эту книгу в целом и вот эту главу про singleton в частности.

Реализация

Реализаций singleton так же много, как и статей про него. Текущая реализация для наших проектов:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
using UnityEngine;

public class Singleton<T> : MonoBehaviour where T : Singleton<T>
{
    private static T instance;

    public static T Instance
    {
        get => instance;
    }

    public static bool IsInstantiated
    {
        get => instance != null;
    }

    protected virtual void Awake()
    {
        if (instance != null)
        {
            Debug.LogError("[Singleton] Trying to instantiate a second instance of singleton class.");
        }
        else
        {
            instance = (T) this;
        }
    }

    protected void OnDestroy()
    {
        if (instance == this)
        {
            instance = null;
        }
    }
}
Использование

1
2
3
4
5
6
7
public class GameManager : Singleton<GameManager>
{
    protected GameManager() { }
 
    // Then add whatever code to the class you need as you normally would.
    ...
}

Заключение

Singleton для проектов на Unity является одним из основополагающих паттернов( да и не только для Unity). На нём будут реализовываться базовые системные классы - менеджеры. Например, сценами и переходами между ними будет управлять SceneManager, а камерой CameraManager и другие, которые будут появляться в любых проектах. Так что это небольшой, но фундаментальный пост определённо потребует возвращения к нему. Пока! =)



Privacy policyCookie policyTerms of service
Tulenber 2020