При разработке игр на 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, вы можете эффективно обмениваться и изменять логическое значение между скриптами в вашей игре. Поэкспериментируйте с этими методами и выберите тот, который лучше всего соответствует потребностям вашего проекта. Приятного кодирования!