Programowanie gry z jednością: przewodnik dla początkujących

Programowanie gry z jednością: przewodnik dla początkujących
Ten przewodnik jest dostępny do pobrania jako bezpłatny plik PDF. Pobierz ten plik teraz . Zapraszam do kopiowania i udostępniania tego znajomym i rodzinie.

Zaskakującą cechą gospodarki internetowej jest rozwój niezależnych gier wideo. Niegdyś wyłączna domena tysiącosobowych, wartych wiele milionów dolarów studiów triple-A, opracowano szereg zestawów narzędzi, które przenoszą nowoczesne zasoby do tworzenia gier w ręce pojedynczych osób lub małych, doraźnych kolekcji programistów i projektantów. Omówiliśmy wcześniej najlepsze gry niezależne , więc sprawdź je, aby znaleźć inspirację, co można osiągnąć za pomocą narzędzi takich jak Unity.





Te niezależne zespoły zajmujące się tworzeniem gier wykazały się zwinnością i tolerancją na ryzyko, które w wielu przypadkach pozwalają im wprowadzać innowacje w rozgrywce szybciej niż ich odpowiedniki o dużym budżecie. W ostatnich latach pojawiło się wiele szokująco udanych tytułów niezależnych, w tym Minecraft , Otchłań , oraz Super Mięsny Chłopak , a nawet jeśli nie masz umiejętności, aby tworzyć takie gry, możesz stworzyć grę za pomocą Buildbox .





W szybko zmieniającym się krajobrazie tworzenia gier niezależnych, Jedność stał się czymś w rodzaju standardu de facto: jego niski koszt, łatwość obsługi i szeroki zestaw funkcji sprawiają, że jest idealny do szybkiego tworzenia gier. Unity jest tak elastyczny, że możesz nawet stwórz własne niestandardowe kontrolery gier z odrobiną DIY know how!





Nawet duże studia, takie jak CCP (Developers of Ewa online ) używaj go do szybkiego prototypowania koncepcji gier. Unity dostarcza 'silnik gry w pudełku' - silnik fizyki i renderowania z zaczepami dla kilku języków skryptowych, który można dostosować do praktycznie każdego gatunku gier wideo.

Chociaż Unity zapewnia wizualny edytor do manipulowania środowiskiem gry, Unity nie jest narzędziem do tworzenia gier „zero programowania”. Wymaga programowania w celu uzyskania wyników, ale daje też znacznie bardziej elastyczne i potężne narzędzie niż jakikolwiek program do tworzenia gier.



Jedność nie wykona za ciebie pracy, ale znacznie obniża barierę wejścia. Zaczynając całkowicie od zera z C++ i OpenGL, może minąć kilka dni, zanim faktycznie coś zostanie wyrenderowane na ekranie. Używając Unity, zajmuje to około dziesięciu sekund. Unity w szybki, intuicyjny sposób oddaje podstawowe elementy tworzenia gier w ręce początkujących programistów.

Dzisiaj przeprowadzę Cię przez wszystko, co musisz wiedzieć, aby stworzyć grę w Unity, która podzielona jest na dziesięć głównych rozdziałów:





§1–Wersje jedności

§2–Instalowanie Unity





§3 – Krótkie wprowadzenie do paradygmatu zorientowanego obiektowo

§4–Podstawy jedności

§5–Przykład: Podstawowe elementy gry

§6 – Skrypty w Jedności

§7-Przykład: Skryptowanie Pong

§8–Poznaj dokumentację / Dowiedz się więcej

§9–Tworzenie gry / kompilacja do samodzielnej aplikacji

§10-Uwagi końcowe

1. Wersje Unity

Unity występuje w dwóch podstawowych wersjach: wersji pro i darmowej. Istnieją liczba różnic , ale ogólnie rzecz biorąc, wersja pro obsługuje szereg ulepszeń wizualnych (takich jak miękkie cienie w czasie rzeczywistym i przetwarzanie końcowe) oraz dużą liczbę stosunkowo drobnych funkcji, które są niezwykle przydatne w bardziej złożonych grach.

To powiedziawszy, w przypadku większości stosunkowo prostych gier, które możesz chcieć zbudować, darmowa wersja Unity jest w zupełności wystarczająca. Poniżej omówimy bardziej szczegółowo kluczowe różnice dla zainteresowanych.

1.1 Ceny

Darmowa wersja Unity jest oczywiście darmowa. Istnieje jednak kilka ograniczeń: darmowa wersja Unity nie może być licencjonowana żadnej firmie, której roczny dochód przekracza 100 000 $ . Chociaż takie organizacje wykraczają poza zakres tego przewodnika, jeśli podejrzewasz, że możesz zostać taką organizacją, prawdopodobnie rozsądnie jest skorzystać z wersji Pro.

Wersja Pro Unity to 75 zł miesiąc lub 1500$ na stałą licencję i nie ma ograniczeń co do tego, co możesz zrobić z tworzonymi za jej pomocą grami. Dostępny jest również 30-dniowy bezpłatny okres próbny, którego użyjemy w tym przewodniku, aby zapewnić jak najpełniejszy przegląd dostępnych funkcji. Roczna licencja studencka jest również dostępna przez Badanie dla 129 zł .

1.2 Funkcje

W bezpłatnej wersji Unity brakuje wielu funkcji. Najważniejsze różnice są jednak następujące: w darmowej wersji Unity brakuje wielu opcji renderowania, które pozwalają na lepiej wyglądające, szybciej działające gry (obsługa LOD, post-processing przestrzeni ekranu, zaawansowane shadery, soft czasu rzeczywistego cienie i odroczone renderowanie). Brakuje mu też pełnego system animacji mechanizmu i niektóre narzędzia sztucznej inteligencji.

Ogólnie rzecz biorąc, w przypadku złożonych projektów na dużą skalę lub projektów, w których ważna jest wydajność graficzna, warto skorzystać z wersji pro. Korzystam z wersji pro, ponieważ opracowuję gry wirtualnej rzeczywistości na Oculus Rift, a obsługa postprocessingu w przestrzeni ekranu jest niezbędna do prawidłowej interakcji z zestawem słuchawkowym.

2. Instalowanie Unity

Unity jest prosty w instalacji. Możesz pobrać plik wykonywalny z unity3d.com/get-unity/download .

Po pobraniu uruchom go, a następnie postępuj zgodnie z instrukcjami instalatora. Po zakończeniu instalacji pojawi się okno zatytułowane „aktywuj licencję Unity”. Zaznacz pole oznaczone „aktywuj bezpłatną 30-dniową wersję próbną Unity Pro”, a następnie „OK”.

Gratulacje! Masz teraz 30-dniową wersję próbną Unity Pro. Po wygaśnięciu okresu próbnego, jeśli nie chcesz kupować wersji pro, możesz przełączyć się na wersję bezpłatną i zachować istniejące treści.

co to akcesorium może nie być obsługiwane?

3. Krótkie wprowadzenie do paradygmatu zorientowanego obiektowo

Zanim zaczniesz korzystać z Unity, ważne jest, abyśmy trochę omówili podstawy. Jedność wspiera obie C # oraz JavaScript dla programowanie gier ; w tym samouczku będziemy pracować z językiem C#.

Po pierwsze, jeśli nigdy wcześniej nie programowałeś, odłóż ten samouczek i poświęć kilka dni na pracę z Microsoft C# Język Primer dopóki nie poczujesz się komfortowo, używając języka do prostych zadań.

Jeśli chcesz czegoś innego niż C# (ale niekoniecznie języka, którego możesz używać w Unity), zapoznaj się z naszym przewodnikiem po sześciu najłatwiejszych językach programowania dla początkujących .

Jeśli programowałeś wcześniej w imperatywnym lub obiektowym języku, takim jak C lub Java, przejrzyj elementarz i zapoznaj się z tym, jak C# różni się od innych języków, których używałeś w przeszłości. Tak czy inaczej, nie kontynuuj samouczka, dopóki nie poczujesz się komfortowo, rozwiązując proste problemy za pomocą C# (na przykład, jeśli miałbym cię poprosić o napisanie programu, który wypisuje pierwsze sto liczb pierwszych, powinieneś być w stanie napisać ten program bez konsultacji z Google).

Najważniejszą koncepcją, którą należy tutaj zrozumieć, jest paradygmat obiektowy (w skrócie OTWARTY ). W językach obiektowych programy są podzielone na jednostki funkcjonalne zwane Obiekty . Każdy obiekt ma swoje własne prywatne zmienne i funkcje. Funkcje specyficzne dla obiektu są nazywane metody .

Ideą jest tutaj modułowość: poprzez wyizolowanie każdego obiektu i zmuszenie innych obiektów do interakcji z nim za pomocą jego metod, możesz zmniejszyć liczbę możliwych niezamierzonych interakcji – a co za tym idzie, błędów. Możesz także tworzyć obiekty, które możesz później ponownie wykorzystać bez modyfikacji. W Unity będziesz budować te obiekty i dołączać je do podmioty gry (którego zachowanie będą rządzić).

Obiekty są tworzone z zajęcia : klasa to po prostu plik, który określa definicję twojego obiektu. Więc jeśli chcesz mook obiekt, który obsługuje sztuczną inteligencję dla wroga w twojej grze, napisałbyś klasę „Mook”, a następnie dołącz ten plik do każdego wrogiego bytu. Po uruchomieniu gry każdy wróg zostanie wyposażony w kopię obiektu „Mook”.

Dołączenie nowego skryptu do obiektu wygląda tak:

Najpierw, wybierz obiekt i idź do Inspektor . Kliknij na Dodaj komponent przycisk.

Iść do nowy skrypt , wprowadź żądaną nazwę i kliknij tworzyć i dodawać .

Teraz masz nowy skrypt, który możesz edytować, klikając go dwukrotnie!

Plik klasy wygląda mniej więcej tak:

using UnityEngine;
public class Mook : MonoBehaviour {
private float health;
void Start () {
health = 100;
}
void Update(){
if (health > 0) {
/* Search for player
if you encounter the player on the road, kill him
if you get shot, remove a random amount of health */
}
}
}

Rozbijmy to:

  • Korzystanie z UnityEngine: Ta linia mówi C#, że chcemy używać bibliotek Unity, które pozwalają nam połączyć się z silnikiem gry Unity.
  • Klasa publiczna Mook : MonoBehaviour: Ta linia deklaruje klasę i jej nazwę -- mook .
  • Kondycja prywatnego pływaka: To deklaruje prywatną zmienną klasy (którą można zmienić tylko z wnętrza klasy). Zmienna ma wartość w Początek .
  • Unieważnij Start(): To deklaruje metodę o nazwie Początek . Start to specjalna metoda, która uruchamia się tylko raz, podczas pierwszego uruchomienia gry.
  • Unieważnij aktualizację(): Update to kolejna specjalna metoda, która działa na każdej klatce. Tutaj trafi większość twojej logiki gry.
  • //jeśli spotkasz gracza na drodze, zabij go: Ten wiersz jest komentarzem (każdy wiersz rozpoczynający się podwójnym ukośnikiem jest ignorowany przez C#). Komentarze służą do przypominania sobie, co robią poszczególne fragmenty kodu. W tym przypadku ten komentarz jest używany do zastąpienia bardziej skomplikowanego bloku kodu, który faktycznie robi to, co opisuje komentarz.

Wraz z Początek oraz Aktualizacja , możesz tworzyć własne metody o prawie dowolnej nazwie. Jednak metody, które utworzysz, nie będą działać, chyba że zostaną wywołane. Zadeklarujmy metodę dla hipotetycznej klasy o nazwie dodajDwaLiczby która dodaje dwie liczby razem:

public float addTwoNumbers(float a, float b) {
return a+b;
}

Deklaruje publiczną (dostępną dla innych obiektów) metodę, która zwraca liczbę zmiennoprzecinkową, zwaną dodajDwaLiczby , który przyjmuje jako dane wejściowe dwie liczby zmiennoprzecinkowe (nazywane do oraz b ). Następnie zwraca sumę dwóch wartości jako dane wyjściowe.

Wywołanie tej metody z poziomu tej samej klasy (powiedzmy, od wewnątrz Aktualizacja ) wygląda tak:

float result = addTwoNumbers(1, 2);

Wywołanie metody z innej klasy jest podobne:

addTwoNumbers instance;
float result = instance.addTwoNumbers(1, 2);

Ponownie, to po prostu tworzy instancję naszej klasy, uzyskuje dostęp do odpowiedniej metody i podaje jej liczby, które chcemy dodać, a następnie zapisuje wynik w wynik . Prosty.

Jeśli twój skrypt jest dołączony do obiektu, który ma specjalne właściwości (takie jak emiter cząstek), do których nie można uzyskać dostępu przy normalnym zestawie parametrów GameObject, możesz traktować go jako inny rodzaj encji gry, używając opcji Pobierz komponent metoda.

Składnia tego wygląda tak:

GetComponent().Play();

Jeśli którykolwiek z tych elementów jest ci nieznany, wróć i przejdź przez elementarz języka C#. Zaoszczędzi ci to wiele frustracji, gdy będziemy postępować dalej.

4. Podstawy jedności

W tej sekcji zajmiemy się podstawową mechaniką silnika Unity. Przepływ pracy w Unity wygląda mniej więcej tak:

  1. Utwórz podmiot, który będzie pełnił rolę w grze (puste Obiekty Gry może być używany do abstrakcyjnych zadań logicznych).
  2. Napisz lub znajdź plik klasy i dodaj go do jednostki jako skrypt (używając Dodaj komponent przycisk w inspektor pogląd.
  3. Biegać > test > odpluskwić > powtarzać dopóki nie zadziała i przejdź do kolejnego elementu gry.

Unity zawiera kilka podstawowych zakładek widoku, które można rozmieścić na różne sposoby, zgodnie z gustem użytkownika. Wielka piątka to:

  1. Gra: wyświetla uruchomioną instancję gry, z którą możesz wchodzić w interakcje i testować.
  2. Scena: zapewnia statyczną, edytowalną wersję swiat gry .
  3. Inspektor: pozwala na modyfikację poszczególnych bytów w świecie gry poprzez zaznaczenie ich w redaktor patka.
  4. Projekt: umożliwia przeglądanie plików projektu i przeciąganie modeli, materiałów i innych zasobów do redaktor aby umieścić je w świecie gry.
  5. Hierarchia: ta zakładka pokazuje wszystkie obiekty na świecie, co pozwala na znalezienie odległych obiektów w scenie oraz elementów nadrzędnych względem siebie poprzez klikanie i przeciąganie.

Zobacz poniższy diagram, aby zobaczyć lokalizacje wszystkich tych rzeczy:

4.1 Jednostki Jedności

4.1.1 Oczka

Siatki są drogą Geometria 3D jest reprezentowana w Jedności. Możesz użyć wbudowanego modułu Unity prymitywny obiekty (kostki, kule, cylindry itp.) lub importuj własne modele 3D z pakietu modelowania, takiego jak Mikser lub Majowie . Unity obsługuje różne formaty 3D, w tym .fbx , oraz .3ds .

Podstawowymi narzędziami do manipulowania siatkami są przyciski skalowania, obracania i translacji w lewym górnym rogu interfejsu. Przyciski te dodają ikony sterujące do modeli w widoku edytora, których można następnie używać do manipulowania nimi w przestrzeni. Aby zmienić teksturę lub właściwości fizyczne obiektu, wybierz je i użyj inspektor widok do analizy materiał oraz sztywny korpus elementy.

4.1.2 Elementy GUI

Tradycyjne ikonki GUI i tekst mogą być wyświetlane za pomocą Tekst GUI i Tekstura GUI GameObjects w edytorze. Jednak bardziej niezawodnym i realistycznym sposobem obsługi elementów interfejsu użytkownika jest użycie tekst 3D oraz Kwadrat GameObjects (z przezroczystymi teksturami i niepodświetlonym przezroczystym shaderem) do umieszczania elementów HUD w świecie gry jako bytów.

w hierarchia Widok, te elementy rozgrywki można przeciągnąć na główną kamerę, aby stały się dziećmi, upewniając się, że poruszają się i obracają wraz z kamerą.

Elementy GUI (tekst i tekstury) można dostosować do rozmiaru i skali za pomocą odpowiednich pól w zakładce inspektora.

4.1.3 Materiały

Materiały to kombinacje tekstur i shaderów , które można przeciągać bezpośrednio na obiekty gry z zakładki projektu. Duża liczba shaderów jest dostarczana z Unity Pro i możesz dostosować dołączoną do nich teksturę za pomocą zakładki inspektora dla obiektu, do którego zostały zastosowane.

Aby zaimportować teksturę, przekonwertuj ją na .jpg , .png , lub .bmp i przeciągnij go do aktywa folder w katalogu projektu Unity (który pojawia się w Moje dokumenty domyślnie). Po kilku sekundach w edytorze pojawi się pasek ładowania. Po zakończeniu będziesz mógł znaleźć obraz jako teksturę pod projekt patka.

4.1.5 Światła

Światła są Obiekty Gry które rzucają blask na świat. Jeśli w twojej scenie nie ma świateł, wszystkie wielokąty są rysowane na tym samym poziomie jasności, nadając światu płaski, rozmyty wygląd.

Światła można ustawiać, obracać i mają kilka wewnętrznych cech, które można dostosować. ten intensywność suwak kontroluje jasność światła, a zasięg kontroluje szybkość zanikania.

Wytyczne w widok sceny pokaże maksymalny zasięg oświetlenia. Baw się obydwoma ustawieniami, aby osiągnąć pożądany efekt. Możesz także dostosować kolor światła, wzór ( cookie wyświetlane na powierzchni, na którą skierowane jest światło, oraz jaki rodzaj flary pojawia się na ekranie, gdy patrzy się bezpośrednio na światło. Plik cookie może być używany do sfałszowania bardziej realistycznych wzorów światła, tworzenia dramatycznych fałszywych cieni i symulowania projektorów.

Trzy główne rodzaje światła to miejsce , punkt , oraz kierunkowy .

Światła punktowe mieć lokalizację w przestrzeni 3D i rzutować światło tylko w jednym kierunku w stożku o zmiennym kącie. Są dobre do latarek, szperaczy i ogólnie dają bardziej precyzyjną kontrolę nad oświetleniem. Światła punktowe mogą rzucać cienie.

Światła punktowe mieć lokalizację w przestrzeni 3D i równomiernie rzucać światło we wszystkich kierunkach. Światła punktowe nie rzucają cieni.

Światła kierunkowe wreszcie są używane do symulowania światła słonecznego: rzucają światło w kierunku, jakby z nieskończenie dalekiej odległości. Światła kierunkowe wpływają na każdy obiekt w scenie i mogą tworzyć cienie.

4.1.6 Systemy cząstek

DO System cząstek jest Obiekt gry który generuje i kontroluje jednocześnie setki lub tysiące cząstek. Cząstki to małe, zoptymalizowane obiekty 2D wyświetlane w przestrzeni 3D. Systemy cząsteczkowe wykorzystują uproszczone renderowanie i fizykę, ale mogą wyświetlać tysiące obiektów w czasie rzeczywistym bez zacinania się, dzięki czemu idealnie nadają się do dymu, ognia, deszczu, iskier, efektów magicznych i nie tylko.

Istnieje wiele parametrów, które możesz dostosować, aby osiągnąć te efekty, i możesz uzyskać do nich dostęp, odradzając system cząstek pod edytor komponentów > wybór systemu cząstek > otwieranie zakładki inspektora . Możesz zmienić rozmiar, prędkość, kierunek, obrót, kolor i teksturę każdej cząsteczki, a także ustawić większość tych parametrów, aby zmieniały się w czasie.

Pod kolizja atrybut, jeśli go włączysz i ustawisz przestrzeń symulacji na świat otrzymasz cząsteczki, które zderzają się z obiektami na świecie, co można wykorzystać do wielu realistycznych efektów cząsteczkowych, w tym deszczu, poruszającej się wody i iskier.

5. Przykład: Podstawowe elementy gry

W tym samouczku stworzymy prostą grę z Pong -- coś, co już kilka razy omawialiśmy w DIY:

  • Arduino Classic Pong
  • Arduino OLED Pong

W tej sekcji omówimy rozmieszczenie podstawowych elementów — samouczek dotyczący skryptów pojawi się później.

Najpierw podzielmy grę Pong na jej podstawowe elementy. Najpierw potrzebujemy dwóch wioseł i piłki. Piłka wylatuje poza ekran, więc będziemy potrzebować mechanizmu, który ją zresetuje. Chcemy również, aby tekst wyświetlał aktualny wynik, a żeby pokazać wam wszystkie podstawowe elementy Unity, będziemy chcieli uzyskać fantazyjny efekt cząsteczkowy po uderzeniu piłki. Cała gra będzie musiała być dramatycznie oświetlona.

To rozpada się na obiekt kulkowy (kula), a spawner , dwa podpory wiosłowe z emitery cząstek załączony Jednostka tekstu 3D , i światło punktowe . W tym samouczku użyjemy domyślnego materiału fizycznego podskakiwać , z kombajn odbijający Ustawić zwielokrotniać . Oto jak wygląda konfiguracja na dziesięciu zrzutach ekranu:

Najpierw utwórz kostka prop na wiosło.

Skaluj go odpowiednio, zduplikuj to , i włóż kula między łopatkami do piłki.

Następnie utwórz Obiekt 3DText oraz skala oraz pozycja to poprawnie, zmieniając rozmiar czcionki atrybut, aby uzyskać mniej pikselowy obraz.

Następnie utwórz dwa systemy cząstek , wybierz żądane cechy i przymocuj je do wioseł.

Następnie będziesz chciał ustaw i obróć kamerę tak, aby poprawnie wykadrował scenę. Gdy kamera jest wybrana, możesz zobaczyć mały podgląd widoku kamery w prawym dolnym rogu.

Zanim skończymy, musimy stworzyć dwie dodatkowe kostki, które będą zderzakami, aby piłka nie wybiła się z obszaru gry. Możemy uczynić je niewidocznymi, odznaczając renderer siatki w zakładka inspektora .

Jeśli wciśniesz Play, możesz teraz zobaczyć podstawowe elementy naszej gry. Jeszcze nic nie zrobią, ale do tego dojdziemy!

Teraz, gdy mamy już taką konfigurację, porozmawiamy o tym, co wiąże się ze skryptowaniem tych elementów w celu stworzenia gry.

6. Skrypty w jedności

Gdy już masz skrypt dołączony do obiektu, możesz go poprawić, klikając go dwukrotnie w inspektor . To się otwiera MonoDevelop , domyślne środowisko programistyczne dla Unity. W istocie Monodevelop to edytor tekstu z funkcjami specjalnie zoptymalizowanymi pod kątem programowania.

Słowa kluczowe i komentarze są wyróżnione w niebieski oraz Zielony , a wartości liczbowe i łańcuchy pojawiają się w Internet . Jeśli użyłeś Zaćmienie lub inne IDE, MonoDevelop jest bardzo podobny. Możesz budować Twoje skrypty z poziomu edytora, aby sprawdzić błędy składni, na przykład:

Ogólnie rzecz biorąc, aby skrypt mógł współdziałać z Unity, musisz odwołać się do elementów, które posiada obiekt przechowujący skrypt (lista tych elementów znajduje się pod inspektor po wybraniu odpowiedniego obiektu). Następnie możesz wywołać metody lub ustawić zmienne dla każdego z tych elementów, aby wprowadzić żądane zmiany.

Jeśli chcesz, aby skrypt na obiekcie wpływał na właściwości innego obiektu, możesz utworzyć pustą Obiekt gry w skrypcie i użyj inspektor aby przypisać go do innego obiektu w scenie.

Lista elementów, które może mieć obiekt, jest następująca (pobrana z widoku inspektora jednej z naszych paletek w powyższym przykładzie):

  1. Przekształcać
  2. Kostka (filtr siatkowy)
  3. Zderzacz pudełek
  4. Renderowanie siatki

Na każdy z tych aspektów obiektu można wpływać z poziomu skryptu. Następnie przyjrzymy się dokładnie, jak.

6.1 Przekształć

Funkcje transformacji dla GameObject w Unity kontrolują fizyczne parametry tego obiektu: its skala , jego pozycja , i jej orientacja . Możesz uzyskać do nich dostęp z poziomu skryptu takiego:

transform.position = newPositionVector3;
transform.rotation = newRotationQuaternion;
transform.localScale = newScaleVector3;

W powyższych przykładach nazwane zmienne są typów określonych w nazwach. Jest tu kilka kluczowych szczegółów: pozycja i skala są, jak można się spodziewać, przechowywane jako Vector3s . Możesz uzyskać dostęp do x , ORAZ , oraz Z składniki każdego z nich (na przykład transformacja.pozycja.y podaje odległość obiektu nad płaszczyzną zerową).

Jednak, aby uniknąć blokada gimbala , rotacje są obsługiwane jako Kwateryny (wektory czteroskładnikowe). Ponieważ ręczne manipulowanie kwaternionami jest nieintuicyjne, można manipulować rotacjami za pomocą kątów Eulera za pomocą Quaternion.Euler metoda jak tak:

transform.rotation = Quaternion.Euler(pitch, yaw, roll);

Jeśli chcesz płynnie przenosić obiekty z jednego miejsca do drugiego, znajdziesz Slerp pomocna metoda dla kwaternionów i vector3s. Slerp przyjmuje trzy argumenty - stan aktualny, stan końcowy i szybkość zmian, i płynnie interpoluje między nimi z zadaną szybkością. Składnia wygląda tak:

transform.position = Vector3.Slerp(startPositionVector3, newDestinationVector3, 1);

6.2 Renderer

Funkcje renderowania w Unity pozwalają kontrolować sposób, w jaki powierzchnie rekwizytów są renderowane na ekranie. Możesz ponownie przypisać teksturę, zmienić kolor oraz zmienić shader i widoczność obiektu. Składnia wygląda tak:

renderer.enabled = false;
renderer.material.color = new Color(0, 255, 0);
renderer.material.mainTexture = myTexture;
renderer.material.shader = newShader;

Większość z nich ma dość przejrzyste funkcje. Pierwszy przykład sprawia, że ​​przedmiot jest niewidoczny: przydatna sztuczka w wielu sytuacjach. Drugi przykład przypisuje nowy Kolor RGB (czyli zielony) do danego obiektu. Trzecia przypisuje główną teksturę diffuse do nowej zmiennej Texture. Ostatni przykład zmienia shader materiału obiektu na nowo zdefiniowaną zmienną shadera.

6.3 Fizyka

Unity jest wyposażony w zintegrowany silnik fizyki – coś, z czego korzystają wszystkie gry w piaskownicy fizyki. Pozwala to na przypisanie fizycznych właściwości obiektów i umożliwienie obsługi szczegółów ich symulacji. Ogólnie rzecz biorąc, zamiast próbować implementować własną fizykę za pomocą podręcznika i systemu transformacji, prostsze i bardziej niezawodne jest wykorzystanie silnika fizyki Unity w największym możliwym stopniu.

Wszystkie rekwizyty fizyki wymagają zderzacze . Jednak sama symulacja jest obsługiwana przez a sztywny korpus , który można dodać w inspektor pogląd. Rigidbody mogą być kinematyczny lub niekinematyczny .

Rekwizyty fizyki kinematycznej kolidują (i powodują) kolizje z rekwizytami fizyki niekinematycznej wokół nich, ale same kolizje nie mają na nie wpływu. Statyczne rekwizyty kinematyczne to przysłowiowe nieruchome obiekty, a ruchome obiekty kinematyczne to przysłowiowa niepowstrzymana siła (dla przypomnienia, kiedy się zderzają, po prostu przechodzą przez siebie).

Poza tym możesz dostosować opór kątowy obiektu (ile energii potrzeba do jego obrotu), zmienić jego masę, dyktować, czy ma na niego wpływ grawitacja, i przykładać do niego siły.

Przykłady:

rigidbody.angularDrag = 0.1f;
rigidbody.mass = 100;
rigidbody.isKinematic = false;
rigidbody.useGravity = true;
rigidbody.AddForce(transform.forward * 100);

To wszystko jest dość oczywiste. Jedyną rzeczą, na którą należy zwrócić uwagę, jest użycie transform.forward . Wszystkie Vector3 mają trzy składniki ( .Naprzód , .w górę , oraz .Prawidłowy ) skojarzone z nimi, do których można uzyskać dostęp i obracać się z nimi ( Naprzód jest kierunkiem niebieskiej strzałki w edytorze). ten transform.forward słowo kluczowe jest po prostu wektorem do przodu dla bieżącego obiektu o wielkości 1. Można go pomnożyć przez pływak, aby wytworzyć większą siłę na obiekcie. Możesz również odwołać się transform.up oraz transform.prawo i zanegować je, aby uzyskać ich odwrotności.

6.4 Kolizja

Często podczas tworzenia gry chciałbyś, aby kolizja spowodowała jakąś zmianę stanu w kodzie, poza samą symulacją fizyki. Do tego będziesz potrzebować metoda wykrywania kolizji .

Wykrycie kolizji w Unity wymaga pewnego nakładu pracy przygotowawczej. Po pierwsze, co najmniej jeden z obiektów w kolizji wymaga a niekinematyczny korpus sztywny dołączony do tego. Oba obiekty muszą mieć prawidłowe zderzacze, ustawione jako niewyzwalacze. Łączna prędkość obu obiektów musi być na tyle niska, aby faktycznie zderzały się, zamiast po prostu przeskakiwać przez siebie.

Jeśli masz wszystko załatwione, możesz sprawdzić kolizję, umieszczając specjalną metodę wykrywania kolizji w skrypcie dołączonym do obiektu, z którym chcesz sprawdzić kolizję. Metoda będzie wyglądać tak:

void OnCollisionEnter(Collision other) {
//do things here
}

Ta metoda zostanie uruchomiona automatycznie podczas pierwszej klatki, w której inny obiekt dotknie Twojego obiektu. Jednostka kolizji inny jest odniesieniem do trafionego obiektu. Możesz na przykład odwołać się do jego obiekt gry , sztywny korpus , oraz przekształcać cechy, aby manipulować nim na różne sposoby. Podczas OnCollisionEnter jest prawdopodobnie najpopularniejszą funkcją, której będziesz używać, możesz również użyć OnCollisionExit oraz OnCollisionStay (z identyczną składnią i użyciem), które aktywują się odpowiednio podczas pierwszej klatki, w której przestajesz kolidować z obiektem i podczas każdej klatki, w której zderzasz się z obiektem.

Czasami przydaje się również robienie tego, co się nazywa raycasting . W raycastingu nieskończenie cienka linia (a promień ) jest rzucany przez świat z jakiegoś źródła, wzdłuż jakiegoś wektora, a kiedy w coś trafi, zwracana jest pozycja i inne szczegóły pierwszej kolizji. Kod dla raycastu wygląda tak:

RaycastHit hit;
if (Physics.Raycast(transform.position, -Vector3.up, out hit)) {
float distanceToGround = hit.distance;
}

To rzuca promień z pozycji bieżącego obiektu wzdłuż -Vector3.up (prosto w dół) i łączy zmienną uderzyć do pierwszego obiektu, z którym się zderza. Gdy twój promień w coś trafi, możesz uzyskać dostęp hit.odległość aby określić, jak daleko to jest, lub hit.GameObject manipulować trafionym obiektem.

Takie promienie mogą być używane przez strzelców do określenia, na co wycelowana jest broń, lub do wybierania obiektów, gdy kamera na nie patrzy, lub do pewnych stylów mechaniki ruchu.

6.5 Korekta czasu

Jeden ważny czynnik, o którym należy pamiętać, gdy manipulujesz obiektami w ten sposób, ma związek z częstotliwość wyświetlania klatek . Bez względu na to, jak starannie optymalizujesz, liczba klatek na sekundę zawsze będzie się różnić, a nie chcesz, aby prędkość gry odpowiednio się zmieniała. Jeśli ktoś inny uruchomi twoją grę na szybszym komputerze niż ty ją stworzyłeś, nie chcesz, aby gra działała z podwójną prędkością.

Sposób, w jaki można to poprawić, polega na pomnożeniu używanych wartości przez czas potrzebny na wyrenderowanie ostatniej klatki. Odbywa się to za pomocą Czas.deltaCzas . To skutecznie zmienia prędkość każdej zmiennej, z której zwiększasz każdą klatkę zmiana na klatkę do zmiana na sekundę i prawdopodobnie należy wprowadzić tę zmianę do dowolnej wartości, którą zwiększasz lub zmniejszasz w każdej klatce.

6.6 Źródła audio i słuchacze

Teraz, gdy omówiliśmy już, jak tworzyć, renderować i sterować obiektami, porozmawiajmy o innym sensie, który gry komputerowe mogą służyć: a mianowicie dźwięk . Unity obsługuje dwa rodzaje dźwięków: 2D oraz 3D Dźwięki. Dźwięki 3D zmieniają swoją głośność w zależności od odległości i zniekształcają się, gdy poruszają się względem kamery; Dźwięki 2D nie.

Dźwięki 2D są odpowiednie do podkładów głosowych i muzyki w tle, a dźwięki 3D do dźwięków generowanych przez wydarzenia na świecie. Aby zmienić, czy dźwięk jest 3D, wybierz go w projekt widok, przełącz na inspektor wyświetlić i wybrać odpowiednią opcję z menu rozwijanego, a następnie nacisnąć importować ponownie przycisk.

Aby rzeczywiście odtworzyć dźwięk, musisz dołączyć źródło dźwięku do rekwizytu (rekwizytu, z którego ma pochodzić dźwięk, w przypadku dźwięku 3D). Następnie musisz otworzyć klip audio i wybierz plik dźwiękowy.

dlaczego mój komputer działa tak wolno podczas uruchamiania

Możesz użyć myAudioSource.Pauza () oraz myAudioSource.Odtwórz () do kontrolowania tych plików dźwiękowych. Możesz dostosować zachowanie zanikania, głośność i przesunięcie dopplerowskie dźwięków pod inspektor zakładka źródła dźwięku.

6.7 Wejście

Gra, która nie wymaga żadnego wkładu od użytkownika, nie jest grą. Istnieje wiele różnych rodzajów danych wejściowych, które można wczytać, a prawie wszystkie z nich są dostępne za pośrednictwem Wejście oraz Kod Klucza przedmioty. Poniżej przedstawiono kilka przykładowych instrukcji wejściowych (które mają wartości oceniane w każdej ramce).

Vector3 mousePos = Input.mousePosition;
bool isLeftClicking = Input.GetMouseButton(0);
bool isPressingSpace = Input.GetKey(KeyCode.Space);

Funkcje tych linii są w większości oczywiste. Korzystając z tych trzech rodzajów danych wejściowych, możesz zrekonstruować schematy sterowania większości nowoczesnych gier komputerowych 3D.

6.8 Debugowanie skryptu

Powiedzmy, że skrypt nie działa. Jak mówi dobry lekarz, mogą ci się przytrafić trzaski i zawieszanie się. Jeśli wystąpią bezpośrednie błędy składniowe w twoim C#, gra na ogół odmówi uruchomienia po naciśnięciu przycisku odtwarzania, a niektóre całkiem przydatne komunikaty o błędach są wyświetlane, jeśli budować skrypty z poziomu edytora. Zobacz poniżej:

Błędy te zazwyczaj nie są najtrudniejsze do naprawienia. Bardziej problematyczne mogą być subtelne błędy semantyczne, w których z powodzeniem zapisałeś plik pełen poprawnego C# – po prostu nie taki, który robi to, co myślałeś. Jeśli masz jeden z tych błędów i masz problemy ze śledzeniem go, możesz spróbować poprawić sytuację na kilka sposobów.

Pierwszym z nich jest wstrzymanie wykonywania gry i sprawdzenie konsoli. Możesz zatrzymać grę, klikając pauza w górnej środkowej części edytora, a następnie wybierając konsola od dołu okno menu (lub naciśnięcie klawisz kontrolny > Zmiana > C ). Nawet jeśli nie ma błędów, ostrzeżenia nadal mogą pomóc w podpowiedziach, co może być nie tak.

Jeśli to nie zadziała, możesz również spróbować uzyskać pewne pojęcie o stanie swojego skryptu, drukując stan zmiennych wewnętrznych, aby sprawdzić, czy program robi to, co myślisz, że robi. Możesz użyć Debug.Log(Ciąg) aby wydrukować zawartość ciągu do konsoli, gdy wykonanie programu trafi w tę linię. Ogólnie rzecz biorąc, jeśli pracujesz wstecz od tego, co Twoim zdaniem powinno się dziać, poprzez rzeczy, które powinny to spowodować, w końcu dojdziesz do punktu, w którym wydruki debugowania nie zrobią tego, czego oczekujesz. To jest twój błąd.

7. Przykład: Skryptowanie Pong

Aby zbudować Ponga, podzielmy grę na jej podstawowe elementy: potrzebujemy piłki, która rykoszetuje między wiosłami z rosnącą prędkością, potrzebujemy tablicy wyników, która wie, kiedy piłki minęły wiosła i potrzebujemy mechanizmu do wznowienie piłki, gdy to się stanie. Dobrym pierwszym krokiem byłoby dodanie niekinematycznego korpusu sztywnego do kuli, dwóch sztywnych korpusów kinematycznych do łopatek, wyłączenie grawitacji dla nich wszystkich i przypisanie odpowiedniego materiału fizycznego ze standardowych zasobów ( podskakiwać z kombajn odbijający Ustawić zwielokrotniać ).

Poniżej możesz zobaczyć scenariusz balu wraz z objaśniającymi komentarzami. Piłka musi osiągnąć kilka podstawowych celów: powinna odbijać się w skomplikowany wzór, zawsze utrzymując ruch w obu osiach i powinna przyspieszać w trudnym, ale nie niemożliwym tempie w kierunku poziomym.

BallHandler.cs

Następnie musimy oskryptować nasze wiosło, które możesz zobaczyć poniżej. Wiosło musi poruszać się w górę iw dół w odpowiedzi na naciśnięcia klawiszy (ale nie poza określonymi granicami). Musi również wyzwolić system cząstek, gdy się z czymś zderzy.

PaddleHandler.cs

Następnie potrzebujemy sztucznej inteligencji wroga: czegoś, co spowoduje, że łopatka wroga będzie podążać w kierunku piłki ze stałą prędkością. W tym celu użyjemy Vector3.Slerp dla maksymalnej prostoty. Chcielibyśmy również to samo zachowanie cząstek, które widzimy na naszym własnym wiosło.

EnemyAI.cs

Na koniec potrzebujemy skryptu, który uaktualni tablicę wyników i zresetuje piłkę, gdy wyjdzie poza boisko.

ScoreboardUpdater.cs

Z dołączonymi skryptami i wypełnionymi referencjami, kiedy uruchamiamy naszą grę w Pong, doświadczamy rozgrywki!

Możesz pobierz moje demo Pong , jeśli chcesz zobaczyć wszystko, co przedstawiłem w akcji. Działa na systemach Windows, Mac i Linux.

8. Poznawanie dokumentacji / Więcej informacji

Unity to złożony silnik z wieloma innymi funkcjami, niż można by omówić w przewodniku tego stylu, a to zanim włączysz szeroki wachlarz (darmowych i komercyjnych) rozszerzeń Unity dostępnych w Internecie. Ten przewodnik zapewni ci dobre miejsce do rozpoczęcia tworzenia gry, ale samokształcenie jest ważną umiejętnością w każdym przedsięwzięciu, i to podwójnie.

Kluczowym zasobem jest tutaj Odniesienie do skryptu Unity . ScriptReference to przeszukiwalna baza danych, dostępna zarówno dla C#, jak i JavaScript, która zawiera listę wszystkich poleceń i funkcji Unity wraz z opisami ich funkcji i krótkimi przykładami składni.

Jeśli masz problemy z edytorem i interfejsem Unity lub po prostu lubisz samouczki wideo jako kwestia preferencji, istnieje długa lista wysokiej jakości Samouczki wideo Unity do dyspozycji. Bardziej rozbudowany (ale mniej szeroki) samouczki tekstowe dla Unity są również dostępne w CatLikeCoding.

Na koniec, jeśli masz pytania wykraczające poza zakres dokumentacji lub samouczków, możesz zadać konkretne pytania pod adresem odpowiedzi.Unity3d.com . Pamiętaj, że odpowiedzi udzielają wolontariusze, więc szanuj ich czas i najpierw przeszukaj bazę danych, aby upewnić się, że na Twoje pytanie nie udzielono jeszcze odpowiedzi.

9. Budowanie gry / kompilacja do samodzielnej aplikacji

Kiedy zbudujesz coś, z czego jesteś dumny (lub skończysz klonować nasz nieco podejrzany przykład Ponga do ćwiczeń), nadszedł czas, aby przenieść swoją grę z edytora i przekształcić ją w coś, co możesz opublikować w Internecie i wymusić Twoi przyjaciele i rodzina do gry. Aby to zrobić, musisz zbudować samodzielną aplikację. Dobrą wiadomością jest to, że w Unity jest to bardzo, bardzo łatwe. Istnieje jednak kilka potencjalnych problemów, na które warto uważać.

Na początek wiedz, że możesz zbudować tylko projekt bez błędów. W tym celu upewnij się, że masz otwartą konsolę podczas kompilacji: istnieją pewne błędy, które gra zignoruje w edytorze, ale mimo to przerwie próbę kompilacji. To tylko zrzuca komunikaty o błędach do konsoli, bez widocznych wyników na ekranie, co może być frustrujące, jeśli zapomnisz sprawdzić. Gdy jednak kompilacja gry będzie wolna od błędów, możesz wybrać Ustawienia kompilacji pod Plik menu lub naciśnij klawisz kontrolny > Zmiana

> b . Spowoduje to wyświetlenie prostego okna dialogowego, które pozwoli ci zbudować grę na kilka platform.

Proces stamtąd nie wymaga wyjaśnień: wybierz opcje i naciśnij budować ; gra poprosi Cię o katalog do zainstalowania i umieści tam zarówno plik wykonywalny, jak i katalog danych. Te dwa pliki można spakować razem i rozpowszechniać (upewnij się, że nie pobierasz opłat za grę zbudowaną w wersji demonstracyjnej Unity, ponieważ narusza to warunki korzystania z usługi).

10. Uwagi końcowe

Jak w przypadku każdego narzędzia do tworzenia gier, kluczem do sukcesu w Unity jest iteracyjny rozwój. Musisz budować w możliwych do opanowania przyrostach – za wszelką cenę bądź ambitny, ale bądź ambitny w małych porcjach i układaj je tak, aby nawet jeśli nie spełnisz swoich ostatecznych ambicji, przynajmniej skończysz z spójnym produkt.

Najpierw zdobądź najważniejsze elementy: pomyśl o swoim minimalny opłacalny produkt , najprostsza, najbardziej podstawowa rzecz, jaką możesz stworzyć i nadal czuć, że osiągnąłeś coś wartościowego. Dostań się do tego minimalnego opłacalnego projektu, zanim przejdziesz do większych ambicji.

Ten samouczek to dobry początek, ale najlepszym sposobem na nauczenie się Unity jest zbudowanie gry. Zacznij budować grę, wypełniaj luki w swojej wiedzy, gdy się pojawią, a stopniowy przepływ wiedzy zaskakująco szybko zniszczy rzeczy, których nie znasz.

Jeśli przeczytałeś to wszystko i jesteś nieco przytłoczony kodowaniem wymaganym w Unity, koniecznie sprawdź, jak to zrobić ucz się tworzenia gier z Unity Learn a także przeczytaj nasz przewodnik, jak tworzyć gry wideo bez żadnego programowania.

Unity to potężne narzędzie, a przy odrobinie eksploracji możesz budować za jego pomocą imponujące projekty szybciej, niż można by się spodziewać. Daj nam znać, co zbudowałeś w komentarzach poniżej - chcielibyśmy zobaczyć!

Udział Udział Ćwierkać E-mail 3 sposoby na sprawdzenie, czy wiadomość e-mail jest prawdziwa czy fałszywa

Jeśli otrzymałeś wiadomość e-mail, która wygląda nieco podejrzanie, zawsze najlepiej sprawdzić jej autentyczność. Oto trzy sposoby sprawdzenia, czy wiadomość e-mail jest prawdziwa.

Czytaj dalej
Powiązane tematy
  • Programowanie
  • Programowanie
  • Długa forma
  • Przewodnik po długich kształtach
O autorze André Infante(131 opublikowanych artykułów)

Andre, pisarz i dziennikarz mieszkający na południowym zachodzie, gwarantuje sprawność do 50 stopni Celsjusza i jest wodoodporny do głębokości dwunastu stóp.

Więcej od Andre Infante .a

Zapisz się do naszego newslettera

Dołącz do naszego newslettera, aby otrzymywać porady techniczne, recenzje, bezpłatne e-booki i ekskluzywne oferty!

Kliknij tutaj, aby zasubskrybować