Создание ScriptableObjects в Unity

ScriptableObject в Unity — это особый тип класса, который позволяет создавать многократно используемые объекты, управляемые данными. Он обычно используется для хранения и управления игровыми данными, конфигурациями и настройками, но также может использоваться для различных целей, таких как управление настройками игры, создание систем, управляемых данными, определение способностей персонажей, хранение диалога или информация о квестах и ​​т. д. Он обеспечивает гибкий и эффективный способ организации и управления данными в проектах Unity.

Основное преимущество ScriptableObjects заключается в том, что они позволяют создавать контейнеры данных, которые можно легко совместно использовать и повторно использовать в нескольких экземплярах скриптов. Их можно рассматривать как "blueprints" для создания экземпляров определенного типа данных. Можно создать несколько экземпляров ScriptableObject и независимо изменять их данные.

Создайте ScriptableObject

ScriptableObject можно создать в редакторе Unity и сохранить как ресурсы в проекте. В отличие от скриптов MonoBehaviour, ScriptableObject не прикрепляется к GameObject в сцене, но на него можно ссылаться и использовать другие скрипты.

Чтобы создать ScriptableObject, выполните следующие действия:

  • В редакторе Unity щелкните правой кнопкой мыши в окне проекта и перейдите к "Create -> C# ScriptableObject".
  • Дайте ему осмысленное имя и откройте скрипт в предпочитаемом редакторе кода.

Определение класса ScriptableObject:

  • В сценарии наследуйте класс ScriptableObject.
  • Определите общедоступные поля или свойства для представления данных, которые будут храниться в ScriptableObject.
using UnityEngine;

[CreateAssetMenu(fileName = "NewData", menuName = "MyGame/ScriptableObject")]
public class MyScriptableObject : ScriptableObject
{
    public string dataName;
    public int dataValue;
}

В приведенном выше примере мы определяем класс ScriptableObject с двумя общедоступными полями: 'dataName (string)' и 'dataValue (int)'.

Настройка ScriptableObject в инспекторе:

  • Используйте атрибуты, такие как '[SerializeField]', чтобы предоставить инспектору Unity определенные поля для изменения, сохраняя при этом эти поля недоступными из сценария, который будет использовать этот ScriptableObject.
using UnityEngine;

[CreateAssetMenu(fileName = "NewData", menuName = "MyGame/ScriptableObject")]
public class MyScriptableObject : ScriptableObject
{
    [SerializeField]
    private string dataName;

    [SerializeField]
    private int dataValue;
}

Создание экземпляров ScriptableObjects:

  • В редакторе Unity щелкните правой кнопкой мыши в окне проекта и выберите "Create", чтобы создать экземпляр ScriptableObject.
  • Настройте данные созданного экземпляра в Инспекторе.

Доступ к данным ScriptableObject из других скриптов:

  • В скрипте MonoBehaviour или любом другом скрипте создайте общедоступное или сериализованное поле типа ScriptableObject и назначьте его в представлении Inspector.
using UnityEngine;

public class MyBehaviour : MonoBehaviour
{
    public MyScriptableObject myData;
}
  • Доступ к данным экземпляра ScriptableObject можно получить через назначенное поле.
using UnityEngine;

public class MyBehaviour : MonoBehaviour
{
    public MyScriptableObject myData;

    private void Start()
    {
        Debug.Log("Data Name: " + myData.dataName);
        Debug.Log("Data Value: " + myData.dataValue);
    }
}

Заключение

ScriptableObjects — универсальный инструмент для управления и организации данных в игровых проектах. Создавая повторно используемые и настраиваемые контейнеры данных, ScriptableObjects предлагает гибкий и эффективный способ хранения конфигураций, настроек и другой информации, не относящейся к экземпляру. Благодаря возможности создавать несколько экземпляров ScriptableObject и независимо изменять их данные становится легко создавать системы, управляемые данными, управлять настройками игры, определять способности персонажей, хранить информацию о диалогах или квестах и ​​многое другое. Использование ScriptableObjects повышает возможность повторного использования, удобства сопровождения и масштабируемости проектов Unity, что в конечном итоге оптимизирует процесс разработки и расширяет возможности создания более надежных и динамичных игр.

Рекомендуемые статьи
Создание игры-головоломки в Unity
Создание игры в стиле Pac-Man в Unity
Создание симулятора дорожного движения в Unity
Создание сцены окончания игры в Unity
Создание классов и объектов в коде Unity
Создание инвентаря и системы создания предметов в Unity
Введение в GUILayout в Unity