Створення 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
Створення гри-головоломки в Unity
Створення гри на основі Pac-Man в Unity
Створення покрокових ігор в Unity
Створення симулятора дорожнього руху в Unity
Створення базуки в Unity
Створення простої 2D-системи Bullet в Unity