Twórz obiekty skryptowe w Unity

ScriptableObject w Unity to specjalny typ klasy, który umożliwia tworzenie obiektów wielokrotnego użytku opartych na danych. Jest powszechnie używany do przechowywania danych, konfiguracji i ustawień gier oraz zarządzania nimi, ale może być również używany do różnych celów, takich jak zarządzanie ustawieniami gry, tworzenie systemów opartych na danych, definiowanie zdolności postaci, przechowywanie dialogu lub informacje o misjach itp. Zapewnia elastyczny i skuteczny sposób organizowania danych i zarządzania nimi w projektach Unity.

Główną zaletą ScriptableObjects jest to, że umożliwiają tworzenie kontenerów danych, które można łatwo udostępniać i ponownie wykorzystywać w wielu instancjach skryptów. Można je traktować jako "blueprints" do tworzenia instancji określonego typu danych. Możliwe jest utworzenie wielu instancji obiektu ScriptableObject i niezależne modyfikowanie ich danych.

Utwórz obiekt skryptowy

Obiekt ScriptableObject można utworzyć w edytorze Unity i zapisać jako zasoby w projekcie. W przeciwieństwie do skryptów MonoBehaviour, ScriptableObject nie jest dołączony do GameObject w scenie, ale może się do niego odwoływać i być używany przez inne skrypty.

Aby utworzyć obiekt ScriptableObject, wykonaj poniższe czynności:

  • W edytorze Unity kliknij prawym przyciskiem myszy okno Projektu i przejdź do "Create -> C# ScriptableObject".
  • Nadaj mu znaczącą nazwę i otwórz skrypt w preferowanym edytorze kodu.

Definiowanie klasy ScriptableObject:

  • W skrypcie dziedzicz z klasy ScriptableObject.
  • Zdefiniuj pola publiczne lub właściwości reprezentujące dane do przechowywania w obiekcie ScriptableObject.
using UnityEngine;

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

W powyższym przykładzie definiujemy klasę ScriptableObject z dwoma polami publicznymi: 'dataName (string)' i 'dataValue (int)'.

Dostosowywanie obiektu ScriptableObject w Inspektorze:

  • Użyj atrybutów takich jak '[SerializeField]', aby udostępnić określone pola inspektorowi Unity w celu modyfikacji, jednocześnie utrzymując te pola niedostępne dla skryptu, który będzie używał tego obiektu ScriptableObject.
using UnityEngine;

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

    [SerializeField]
    private int dataValue;
}

Tworzenie instancji obiektów ScriptableObjects:

  • W edytorze Unity kliknij prawym przyciskiem myszy okno Projektu i wybierz "Create", aby utworzyć instancję obiektu ScriptableObject.
  • Dostosuj dane utworzonej instancji w Inspektorze.

Dostęp do danych ScriptableObject z innych skryptów:

  • W skrypcie MonoBehaviour lub dowolnym innym skrypcie utwórz publiczne lub serializowane pole typu ScriptableObject i przypisz je w widoku Inspektora.
using UnityEngine;

public class MyBehaviour : MonoBehaviour
{
    public MyScriptableObject myData;
}
  • Dostęp do danych instancji ScriptableObject można uzyskać poprzez przypisane pole.
using UnityEngine;

public class MyBehaviour : MonoBehaviour
{
    public MyScriptableObject myData;

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

Wniosek

ScriptableObjects to wszechstronne narzędzie do zarządzania i organizowania danych w projektach gier. Tworząc kontenery danych wielokrotnego użytku i dostosowywalne, obiekty ScriptableObjects oferują elastyczny i wydajny sposób przechowywania konfiguracji, ustawień i innych informacji niezwiązanych z konkretną instancją. Dzięki możliwości tworzenia wielu instancji obiektu ScriptableObject i niezależnego modyfikowania ich danych, tworzenie systemów opartych na danych, zarządzanie ustawieniami gry, definiowanie zdolności postaci, przechowywanie informacji o dialogach lub misjach i wiele więcej staje się łatwe. Korzystanie z ScriptableObjects zwiększa możliwość ponownego użycia, łatwość konserwacji i skalowalność projektów Unity, ostatecznie usprawniając proces tworzenia i umożliwiając tworzenie solidniejszych i dynamicznych gier.

Sugerowane artykuły
Tworzenie prostego systemu pocisków 2D w Unity
Tworzenie przedmiotów kolekcjonerskich i ulepszeń w Unity
Tworzenie GrabPack w Unity zainspirowany Poppy Playtime
Tworzenie obiektów interaktywnych w Unity
Implementowanie interakcji kinetycznych w Unity
Otwieranie szuflad i szafek za pomocą określonych kluczy w Unity
Implementacja sterowania goglami VR w Unity