Załóżmy, że tworzysz grę fabularną i potrzebujesz łatwiejszego sposobu przypisywania statystyk, właściwości i wielu innych elementów. Chociaż możesz użyć Unity Prefab, aby to zrobić, a następnie zmienić wartości każdej pojedynczej kopii prefabrykatu, jest to niewygodny sposób na wykonanie zadania. Na początek ta metoda zużywa więcej pamięci, co może być konieczne do zachowania, jeśli planujesz zrobić dużą grę. Ponadto, jeśli musisz wprowadzić jakiekolwiek zmiany w obiektach w grze, po prostu nie jest to tak skuteczne, gdy wokół znajduje się kilka kopii prefabrykatów. Staje się to szczególnie problemem, jeśli masz większy zespół do pracy, więc będziesz chciał ułatwić zmiany innym członkom zespołu. Nawet jeśli nie jesteś w zespole, ta metoda będzie dla Ciebie trudniejsza podczas pracy.
aby ułatwić sprawę w takiej sytuacji, masz do dyspozycji obiekty do Skryptów. Czym są obiekty Skryptowalne? Mówiąc najprościej, są to kontenery danych. Programista Unity tworzy podstawowy szablon dla tych kontenerów, definiując, jakie informacje powinien zawierać każdy obiekt. Następnie Obiekty Skryptowe są tworzone z tego szablonu, które są następnie używane przez obiekty gry Unity. W powyższym przykładzie można użyć pojedynczego obiektu skryptowego do zdefiniowania różnych właściwości elementu. Wtedy ten obiekt skryptowy jest odwoływany przez wszystkie kopie tego elementu. Wcześniej, jeśli chcesz zmienić statystyki artykułu, musisz zmienić wartości każdej pojedynczej kopii artykułu. Teraz w przypadku obiektów skryptowych wystarczy zmienić tylko jeden obiekt (obiekt skryptowy), a wszystkie obiekty pobierające dane z tego obiektu skryptowego zmieniają się w tym samym czasie.
zawsze warto zobaczyć te rzeczy w akcji, stworzyć nowy projekt. Ten projekt pokazuje obiekty do skryptów i jak mogą Ci pomóc. Projekt składa się z trzech obiektów gry przeznaczonych do reprezentowania trzech postaci. Każdy znak dziedziczy pewne wartości ze Skryptowalnego obiektu. Wartości te to maksymalne zdrowie, atak, obrona, szybkość oraz nazwa i kolor postaci. Prosty interfejs użytkownika wyświetla te wartości, dzięki czemu można łatwo zobaczyć wyniki stosowania obiektów skryptowych. Teraz, gdy masz cel końcowy, nadszedł czas, aby rozpocząć tworzenie.
konfiguracja projektu
zakładając, że będziesz wdrażać te pomysły w nowym projekcie, otwórz aplikację Unity Hub i utwórz nowy projekt, jak pokazano na rysunku 1.
Rysunek 1: Tworzenie nowego projektu
w następnym oknie nadaj projektowi dowolną nazwę i wybierz ścieżkę do pliku. Chociaż można wykonać ten projekt w dowolnym szablonie, w tym przykładzie wykorzystano szablon projektu 3D, jak pokazano na rysunku 2. Zaleca się korzystanie z tego szablonu, jeśli chcesz podążać za nim.
Rysunek 2: Ustawianie nazwy, typu i lokalizacji projektu
po utworzeniu projektu będziesz chciał się zorganizować. W oknie zasoby musisz utworzyć trzy foldery, klikając prawym przyciskiem myszy okno i przechodząc do folderu Utwórz ->, jak pokazano na rysunku 3, nadaj folderom nazwy materiały, Obiekty Skryptowalne i skrypty.
Rysunek 3: Tworzenie nowego folderu
podczas gdy jesteś tutaj, dobrym pomysłem jest zrobienie trzech materiałów. Materiały te są używane do zmiany kolorów różnych obiektów w zależności od materiału, który określa obiekt Skryptowalny. Aby utworzyć te materiały, przejdź do folderu materiały i kliknij ponownie prawym przyciskiem myszy, tym razem wybierając Utwórz – > Materiał. Podczas nazywania materiału zaleca się nadanie mu nazwy, która koreluje z jego kolorem. Na przykład ten pierwszy materiał można nazwać Czerwonym. Aby ustawić ten kolor, należy wybrać nowo utworzony materiał i przejść do okna Inspektora. W polu Albedo znajduje się próbnik kolorów pokazany na rysunku 4, który można kliknąć, aby otworzyć próbnik kolorów.
Rysunek 4: otwarcie próbnika kolorów
kolor jest zmieniany przez przesunięcie małego kółka w próbniku kolorów lub przez bezpośrednie wprowadzenie wartości RGB w dolnej połowie okna próbnika kolorów. W powyższym przykładzie wartości RGB wynoszą 255, 0, 0. Następnie należy utworzyć jeszcze dwa materiały i przypisać ich kolory. W tym przykładzie używa się koloru zielonego i niebieskiego, ale mogą to być dowolne kolory.
teraz przychodzi czas, aby stworzyć rzeczywistą scenę, w której odbywa się ta gra. Składa się z dwóch głównych części – interfejsu użytkownika, który wyświetla statystyki podane do różnych obiektów skryptowych i trzech kapsułek reprezentujących znaki. „Znaki” są najłatwiejszą częścią, więc możesz zacząć od tego. Wystarczy przejść do okna hierarchii, kliknąć przycisk Utwórz i wybrać obiekt 3D – > pokazany na rysunku 5. Zrób to trzy razy lub skopiuj pierwszy obiekt, a jeśli chcesz, możesz również nadać im nazwy. Ten przykład nadaje kapsułkom nazwy Char1, Char2, Char3.
Rysunek 5: tworząc obiekt kapsuły
musisz zmienić ich położenie, aby nie nakładały się na siebie. Aby zmienić pozycję obiektu, zaznacz jedną z nich w hierarchii i przejdź do komponentu Przekształć w Inspektorze. Następnie zmień pola pozycjonowania x, y i z, aby przenieść obiekty tam, gdzie chcesz.
Rysunek 6: Edycja pozycji obiektu
Tabela 1 pokazuje dokładne pozycje wszystkich trzech kapsułek w tym przykładzie.
Tabela 1: Wszystkie obiekty i ich pozycje na świecie
obiekt |
X pozycja |
pozycja Y |
pozycja Z |
Char1 |
|||
Char2 |
|||
Char3 |
oczywiście, możesz dostosować dowolną z tych liczb, jeśli chcesz. Następnie znajduje się interfejs użytkownika, który wyświetla wartości podane obiektom skryptowym. Aby rozpocząć, musisz kliknąć przycisk Utwórz hierarchię, ale tym razem wybierz interfejs – > Canvas. Następnie po wybraniu nowego obiektu Canvas ponownie kliknij przycisk Utwórz i tym razem wybierz opcję Utwórz puste dziecko. Na koniec jeszcze raz klikamy przycisk Utwórz i tym razem wybieramy tekst UI – >. Przeciągnij nowo utworzony obiekt tekstowy na pusty obiekt gry i zduplikuj tekst cztery razy za pomocą Ctrl + D, aby w GameObject znalazło się łącznie pięć obiektów tekstowych. Po zakończeniu Twoja hierarchia powinna wyglądać jak ta na rysunku 7.
Rysunek 7: bieżąca hierarchia
każdy obiekt tekstowy koreluje z nazwą i statystykami podawanymi za pomocą obiektu do skryptów, przy czym statystykami tymi są maksymalne zdrowie, atak, obrona i szybkość. Warto zmienić nazwy obiektów tekstowych na wartość, którą reprezentuje. Tak więc, pierwszy obiekt tekstowy może być nazywany name_text, a drugi może być nazywany attack_text, i tak dalej. Ponadto musisz zmienić domyślny tekst, aby zapewnić wizualny wygląd interfejsu użytkownika. Odbywa się to poprzez przejście do komponentu tekstowego w Inspektorze i zmianę wartości tekstu. I na koniec, dostosuj ich pozycje tak, aby nie były ułożone jeden na drugim. Aby było to łatwe, w tabeli 2 przedstawiono różne nazwy obiektów i ich odpowiednie wartości.
Tabela 2: wszystkie obiekty tekstowe oraz ich domyślne wartości tekstowe i pozycjonujące
Zmień nazwę GameObject (pod Canvas) na coś bardziej opisowego, na przykład Char1Description, a następnie Powiel obiekt nadrzędny. Zmień nazwę dwóch duplikatów na Char2Description i Char3Description i ustaw trzy obiekty tak, aby znajdowały się nad obiektami kapsuły. Przykład ten umieszcza opis znaku na pozycji X -300, opis znaku znaku na pozycji 0, A Opis znaku znaku znaku na pozycji 250. Wszystkie wartości pozycji Y i Z pozostają na 0.
to była trochę długa droga, ale konfiguracja projektu jest zakończona! Teraz nadszedł czas, aby kodować i zobaczyć, jak tworzone są obiekty Skryptowe, jeśli chodzi o programowanie. W oknie zasoby przejdź do folderu skrypty i utwórz dwa nowe skrypty, klikając prawym przyciskiem myszy i przechodząc do Create – > C # Script. Skrypty te powinny być nazywane CharStats i LoadStats. Po ich utworzeniu zaczniesz od skryptu CharStats, więc kliknij dwukrotnie ten skrypt, aby otworzyć Visual Studio i rozpocząć proces kodowania.
skrypt CharStats
aby utworzyć obiekt Skryptowalny, musisz najpierw dodać go do menu Create
używanego do tworzenia materiałów i skryptów. Aby to zrobić, użyjesz atrybutu CreateAssetMenu
i określisz domyślną nazwę pliku i lokalizację w menu. Ponadto musisz zmienić klasę CharStats
, z której dziedziczy. Domyślnie każda klasa C # w projekcie Unity dziedziczy z MonoBehaviour
, ale ten skrypt musi dziedziczyć z ScriptableObject
.
podczas ustawiania menuName
należy zauważyć, że używany jest znak ukośnika, wskazujący użycie podmenu. Jeśli chcesz, możesz usunąć Ukośnik i po prostu mieć opcję jednostek gracza bez potrzeby przechodzenia dalej przez menu Utwórz. W tym przypadku podmenu zostało dodane głównie po to, aby pokazać, że możesz organizować swoje obiekty Skryptowe według tego, co chcesz. W tym przypadku menu to Create – > tworzenie postaci – > jednostki gracza. Jeśli chcesz, w innym obiekcie skryptowym możesz utworzyć obiekt z tej samej ścieżki, ale z inną opcją tworzenia, na przykład Item.
jako obiekt Skryptowalny nie ma potrzeby stosowania domyślnych metod Start
i Update, więc możesz je usunąć. Głównym celem tego obiektu jest przechowywanie danych, które są przekazywane innemu obiektowi, ale tworzone są również dwie niestandardowe metody, aby zademonstrować, w jaki sposób obiekty Skryptowe mogą robić więcej niż tylko przechowywać dane. Mówiąc o danych, kod do definiowania danych przechowywanych przez ten obiekt wygląda następująco:
1
2
3
4
5
6
|
public string charName;
public int attack;
public int defense;
public int speed;
public int maxHealth;
Public Material newColor;
|
jak wspomniano wcześniej, każdy obiekt skryptowy zawiera nazwę i niektóre wartości dla czterech różnych statystyk. Przechowuje również informacje o nowym kolorze znaku po zastosowaniu obiektu skryptowego. Wartości dla każdego z nich są zdefiniowane w edytorze Unity i oczywiście będą różne dla każdego utworzonego obiektu.
te dwie metody są proste. Jeden po prostu drukuje komunikat do konsoli debugowania informujący, że znak został załadowany. Ta wiadomość jest drukowana w metodzie Start
skryptu LoadStats
.
1
2
3
4
|
Public void PrintMessage()
{
debugowanie.Log (został załadowany znak „” + charName+”.”);
}
|
RandomizeStats
, druga metoda, robi dokładnie tak, jak sama nazwa wskazuje. Zmienia wartości obiektu skryptowego na losową liczbę od 1 do 20. Później zaprogramujesz projekt, aby automatycznie zaktualizować interfejs użytkownika o nowe wartości. Ale to nie jest nawet najciekawsza część! Dane w obiektach do skryptów są trwałe, co oznacza, że pozostaną takie same przez całą sesję do momentu zamknięcia gry. Jest to szczególnie przydatne, jeśli tworzysz grę, która składa się z wielu scen, ponieważ zwykle stare obiekty są usuwane, a nowe są przeładowywane w miarę otwierania nowej sceny. Jednak Dane obiektów, które można Skryptować, są nietknięte podczas przechodzenia między scenami. Ponadto dane pozostają takie same podczas pracy w edytorze Unity, dopóki sam edytor nie zostanie zamknięty. Oznacza to, że zmiany wprowadzone w danych w obiektach skryptowych podczas uruchamiania gry z edytora są obecne po ponownym uruchomieniu gry z edytora, pod warunkiem, że nie zostaną wprowadzone żadne zmiany w samych danych.
to wszystko co jest w skrypcie CharStats. Może się to wydawać dość proste, ale projekt nie jest kompletny. Zaprogramowałeś możliwość tworzenia obiektów do skryptów za pomocą własnych metod i danych, ale twoje postacie z kapsuły nic nie wiedzą o tych obiektach. Jeśli o nich chodzi, Obiekty Skryptowe nie istnieją. Aby to naprawić, musisz otworzyć skrypt LoadStats i zakodować go, aby obiekty mogły używać danych obiektu do skryptowania, aby zaktualizować interfejs użytkownika i zmienić jego kolor. Kod powinien wyglądać podobnie do rysunku 8.
Rysunek 8: kompletny skrypt CharStats
skrypt LoadStats
nie martw się o zmianę miejsca dziedziczenia klasy tego skryptu. Domyślna MonoBehaviour
jest dokładnie tym, czego potrzebujesz. Zamiast tego Dołącz nową instrukcję using na górze.
1
|
używając UnityEngine.Interfejs użytkownika;
|
włączenie tego umożliwia pobranie tekstu z interfejsu użytkownika i zaktualizowanie go, aby wyświetlić wartości Znalezione w obiektach do Skryptów. Teraz, na samą klasę, zaczynając od zmiennych.
1
2
3
4
5
6
7
8
|
// scriptable object
public CharStats charStat;
public Text nameText;
public Text attackText;
public Text defenseText;
public Text speedText;
public Text maxHealthText;
public MeshRenderer currentColor;
|
jak wspomniano w komentarzu, zmienna charStat
jest obiektem Skryptowalnym, który jest używany. Widać tu, że uzyskanie tych Skryptowalnych obiektów nie różni się niczym od zadeklarowania jakiejkolwiek innej zmiennej. Później w skrypcie, będziesz otrzymywać zmienne i metody wewnątrz obiektu i używać ich w tym skrypcie. W rzeczywistości metoda PrintMessage
znaleziona w CharStats
jest obecnie używana w metodzie LoadStats
Start
.
1
2
3
4
5
|
void Start()
{
DisplayStats ();
charStat.PrintMessage();
}
|
podobnie jak w przypadku innych skryptów zewnętrznych, wszystko, co musisz zrobić, to wywołać charStat
, a następnie PrintMessage
, aby uzyskać metodę znalezioną w tym skryptowym obiekcie. Może to okazać się szczególnie przydatne, jeśli masz obiekty, które mają podobne lub identyczne zachowania. W takim przypadku programista może również, tak jak w tym przykładzie, wydrukować wiadomości do konsoli debugowania. Jeśli coś poszło nie tak i podejrzewałeś, że obiekt do skryptów jest winny, możesz użyć komunikatów konsoli debugowania, aby znaleźć problem.
w tej chwili pojawia się błąd mówiący, że DisplayStats
nie istnieje. Aby to naprawić, przejdź poniżej metody Update
i dodaj ten kod.
tutaj pojawiają się wartości zapisane w obiekcie skryptowym. Wszystkie te zmienne tekstowe zadeklarowane wcześniej? Otrzymają one dane do wyświetlenia, więc te znaki zapytania ustawione w edytorze wyświetlają teraz pewną wartość. Ponadto, chociaż nie jest to tak naprawdę statystyka, kolor znaku jest tutaj zmieniany przez wywołanie currentColor.material
i ustawienie go na materiał ustawiony w obiekcie Skryptowalnym.
druga metoda charStats
, RandomizeStats
, nie widziała jeszcze użycia, więc powinieneś znaleźć dla niej miejsce. W metodzie Update
program sprawdza, czy spacja została wciśnięta. Jeżeli ma, wtedy wywoła RandomizeStats
i nada obiektowi Skryptowemu nowe wartości. Następnie DisplayStat
zostanie ponownie wywołana i zostaną wyświetlone nowe wartości.
1
2
3
4
5
6
7
8
|
void Update()
{
if (Input.GetKeyDown (KeyCode.Przestrzeń))
{
charStat.RandomizeStats ();
DisplayStats();
}
}
|
na tym kończy się skrypt LoadStats
, kończąc tym samym część kodowania tego projektu. Kod powinien wyglądać podobnie do rysunku 9. Wszystko, co pozostało do zrobienia, to utworzyć kilka obiektów do Skryptów, zastosować je do obiektu capsule za pomocą LoadStats
i wypróbować tę nową funkcjonalność. Oczywiście pamiętaj, aby zapisać swoją pracę przed powrotem do edytora Unity.
Rysunek 9: Ukończ skrypt LoadStats
Ukończ projekt
aby użyć obiektów Skryptowalnych, musisz je najpierw utworzyć. W oknie zasoby, w folderze Obiekty skryptowane, kliknij prawym przyciskiem myszy i przejdź do opcji Utwórz – > tworzenie postaci – > jednostki odtwarzacza, jak pokazano na rysunku 10.
Rysunek 10: Tworząc nową jednostkę odtwarzacza, obiekt do skryptowania
możesz nazwać obiekt, jak chcesz. Przykład bazuje na tych obiektach poza tradycyjnymi klasami gier RPG, więc będzie miał wojownika, łowcę i maga. Wybierz nowy obiekt, a następnie przejdź do okna inspektora i podaj wartości różnym Polom. Aby wypełnić nowe pole koloru, po prostu przejdź do folderu Materiały, a następnie kliknij i przeciągnij żądany materiał do pola, jak pokazano na rysunku 11.
Rysunek 11: Ustawienie nowego materiału koloru obiektu
Utwórz jeszcze dwa obiekty do skryptów i zrób to samo, co poprzednio, nadając im różne wartości dla różnych pól. Po zakończeniu przejdź do okna hierarchii i wybierz jeden z obiektów znaku. Następnie nadaj im skrypt LoadStats jako komponent, przechodząc do folderu Skrypty w oknie zasoby, znajdując LoadStats i przeciągając go do okna Inspektora, jak pokazano na rysunku 12.
Rysunek 12: dołączanie skryptu LoadStats do obiektu
następnie musisz wypełnić pola LoadStats. Aby rozpocząć, Znajdź obiekt do skryptowania, którego chcesz użyć na swoim pierwszym „znaku” i zastosuj go do pola statystyki znaku, jak pokazano na rysunku 13. Pamiętaj, że obiekty Skryptowalne znajdują się w oknie zasoby w obszarze Obiekty Skryptowalne.
rysunek 13: ustawienie, gdzie obiekt Skryptowalny Char1 ma pobierać dane
teraz wypełnij pola tekstowe. W hierarchii rozwiń obszar roboczy, a następnie rozwiń obiekt opisu postaci, który jest skorelowany z obiektem, który aktualnie edytujesz. Na przykład, edycja Char1 oznacza, że będziesz chciał rozwinąć opis CHAR1. Następnie weź obiekty tekstowe znajdujące się pod obiektem nadrzędnym i zastosuj je do odpowiednich pól, Jak pokazano na rysunku 14.
Rysunek 14: Ustawianie wszystkich pól tekstowych
Po wypełnieniu pól tekstowych wystarczy uzyskać Renderer siatki obiektu, aby uzyskać dostęp do materiału, umożliwiając w ten sposób zmianę koloru. Wszystko, co musisz zrobić, to kliknąć i przeciągnąć komponent Renderer siatki w oknie inspektora i przeciągnąć go do bieżącego pola koloru, jak pokazano na rysunku 15.
rysunek 15: Ustawienie pola bieżącego koloru
powtórz kilka poprzednich kroków dla pozostałych dwóch obiektów znakowych, a zakończysz projekt. Gdy będziesz gotowy, kliknij przycisk Odtwórz na górze edytora i obserwuj, jak trzy prawie identyczne obiekty mają bardzo różne wartości. Jeśli z jakiegoś powodu coś nie wygląda dobrze, pierwszym miejscem do sprawdzenia będą obiekty do skryptów i upewnij się, że wyświetlane wartości i kolory są tymi, które chcesz. Pamiętaj, aby dwukrotnie sprawdzić nowe pole koloru.
wszystkie te liczby i ich kolory pochodzą z obiektów, które same pochodzą z jednego szablonu. Możesz również tworzyć jeszcze więcej Skryptowalnych obiektów i podłączać je do pola Char Stat w komponencie Load Stats obiektu i mieć zupełnie inny znak. Podczas uruchamiania gry (Rysunek 16) w konsoli debugowania w lewym dolnym rogu powinien pojawić się komunikat informujący o załadowaniu postaci. Istnieją dwie inne wiadomości, ale możesz zobaczyć tylko jedną wiadomość bez otwierania pełnej konsoli debugowania, znalezioną w oknie – > ogólne – > konsola. Możesz także nacisnąć spację, aby uzyskać zupełnie nowe statystyki dla swoich postaci. Jeśli zatrzymasz grę i uruchomisz ją ponownie, zauważysz losowo wygenerowane wartości persist, pokazujące trwałość obiektów do Skryptów. Powrócą do swoich oryginalnych wartości, ręcznie wprowadzając wartości do obiektów samodzielnie lub zamykając i ponownie otwierając edytor.
Rysunek 16: Obiekty Skryptowalne w akcji
wniosek
oczywiście można utworzyć wiele typów obiektów Skryptowalnych dla wielu typów obiektów. Ten przykład zademonstrował ich użycie poprzez klasy postaci, ale jest też wspomniany przykład przedmiotów. Może być nawet używany do znacznie mniejszych obiektów, takich jak power-upy przypominające te Znalezione w grach zręcznościowych. Korzystając z obiektów do Skryptów, tworzysz czysty, łatwy system, w którym możesz zmieniać i ładować dane za pomocą kilku naciśnięć klawiszy i zobaczyć wyniki niemal natychmiast. Korzystanie z obiektów Skryptowalnych oznacza również mniej skryptów do utworzenia, ponieważ można użyć jednego szablonu dla wielu obiektów. Niezależnie od tego, czy twój projekt jest duży, czy mały, czy twój zespół ma wielu członków, czy tylko ciebie, Obiekty Skryptowe mogą ułatwić każdemu rozwój.