Освоение Unity: как создать глобальную переменную Bool для всех скриптов

При разработке игр на Unity обычно используется несколько скриптов, которым необходимо взаимодействовать друг с другом. Один из способов добиться этого — создать глобальную переменную bool, к которой может обращаться и изменять любой скрипт в вашем проекте. В этой статье мы рассмотрим несколько методов реализации глобальной переменной bool в Unity, используя разговорный язык и примеры кода, которые помогут вам в этом процессе.

Метод 1: шаблон Singleton
Шаблон Singleton — это широко используемый шаблон проектирования в Unity, который позволяет создавать единственный экземпляр класса. Чтобы логическое значение появлялось во всех скриптах, вы можете создать скрипт с именем «GameManager» или «GlobalVariables» и прикрепить его к пустому GameObject в вашей сцене. Вот пример:

public class GameManager : MonoBehaviour
{
    private static GameManager instance;
    public bool globalBool;
    private void Awake()
    {
        if (instance == null)
        {
            instance = this;
            DontDestroyOnLoad(gameObject);
        }
        else
        {
            Destroy(gameObject);
        }
    }
// Use this method to access and modify the global bool from other scripts
    public static GameManager GetInstance()
    {
        return instance;
    }
}

Теперь вы можете получить доступ к глобальному логическому значению из любого скрипта, используя GameManager.GetInstance().globalBool. Не забудьте вызвать GameManager.GetInstance()перед доступом к логическому значению.

Метод 2: ScriptableObject
ScriptableObjects — это ресурсы Unity, которые могут хранить данные и доступны из нескольких скриптов. Вот пример создания ScriptableObject для хранения глобального логического значения:

[CreateAssetMenu(fileName = "GlobalBoolVariable", menuName = "Custom/Global Bool Variable")]
public class GlobalBoolVariable : ScriptableObject
{
    public bool globalBool;
}

Вы можете создать экземпляр этого ScriptableObject, щелкнув правой кнопкой мыши в окне проекта и выбрав «Создать >Пользовательский >Глобальная переменная Bool». Затем вы можете ссылаться на него в любом скрипте, например:

public class MyScript : MonoBehaviour
{
    public GlobalBoolVariable globalBoolVariable;
    private void Update()
    {
        if (globalBoolVariable.globalBool)
        {
            // Do something
        }
    }
}

Метод 3: Система событий
Система событий Unity обеспечивает связь между сценариями с помощью событий и делегатов. Вот пример того, как создать глобальную переменную bool с помощью событий:

public static class GlobalEvents
{
    public static event Action<bool> OnGlobalBoolChanged;
    public static void SetGlobalBool(bool value)
    {
        OnGlobalBoolChanged?.Invoke(value);
    }
}

Чтобы подписаться на глобальные изменения bool, вы можете сделать следующее:

public class MyScript : MonoBehaviour
{
    private void OnEnable()
    {
        GlobalEvents.OnGlobalBoolChanged += HandleGlobalBoolChanged;
    }
    private void OnDisable()
    {
        GlobalEvents.OnGlobalBoolChanged -= HandleGlobalBoolChanged;
    }
    private void HandleGlobalBoolChanged(bool value)
    {
        // Do something with the global bool value
    }
}

В этой статье мы рассмотрели три различных метода создания глобальной переменной bool для всех скриптов Unity. Используя шаблон Singleton, ScriptableObjects или систему событий Unity, вы можете эффективно обмениваться и изменять логическое значение между скриптами в вашей игре. Поэкспериментируйте с этими методами и выберите тот, который лучше всего соответствует потребностям вашего проекта. Приятного кодирования!