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.