Глобальный объект в Unity3d

Доброго времени суток!

В интернете много вопросов про то как в Unity3d создать глобальный объект или класс, что бы он был доступен отовсюду. И много ответов на этот вопрос, но все они содержат только часть правды.

Данная заметка об одном из способов создания глобального объекта в utity3d. Я не претендую на панацею и на то что это единственный верный вариант, просто мне так удобнее.

Для начала создадим скрипт, на языке C# из unity3d, и назовём его, к примеру, GlobalGameClass.cs . Далее прикладываю код самого файла:


using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class GlobalGameClass : MonoBehaviour {
    public static GlobalGameClass GGC;

    public GameObject soundManager;
    public int score = 100;

    void Awake(){
        if (GGC != null){
            GameObject.Destroy(GGC);
        } else {
            GGC = this;
        }

        DontDestroyOnLoad(this);
    }
}

Сохраняем изменения в файл. Это самый минимальный примитивный класс, которым можно воспользоваться откуда угодно, для проверки. Далее самое интересное, мало где пишут куда этот скрипт воткнуть или на что применить. Я поступил просто: создал пустой игровой объект, в unity3d — create empty. И назвал его GGC , «кинул» на него только что созданный скрипт.

Данный объект я разместил в сцене, которая открывается сразу после запуска игры. Этот объект не будет уничтожаться при переходе от сцены к сцене, потому что DontDestroyOnLoad(this), пока игру не выключат совсем.

Сейчас расскажу как проверить работоспособность данного класса. Создаём очередной C# скрипт и пишем в него вот такое:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class testempty : MonoBehaviour {
    void Update () {
        Debug.Log(GlobalGameClass.GGC.score);
        GlobalGameClass.GGC.score++;
    }
}

Сохраняем файл. Кидаем этот скрипт на какой-нибудь объект в другой сцене, запускаем игру и смотрим в консоль.

Вот такой минимальный стартап получился, дальше всё в ваших руках!

Почему он не singletron (возможно кому-то удобнее будет использовать singletron, не спорю — дело Ваше), где проверки на уничтожение, и другие подобные вопросы тут я рассматривать не буду.

Спасибо, что прочитали! Надеюсь было полезно.