Un controler de caractere vă poate ajuta să implementați o fizică simplă a mișcării în jocul dvs.
Puteți aborda controlerele de caractere Unity3D din mai multe unghiuri. Dacă utilizați o bibliotecă cu clase și funcții puternice, crearea unui controler de caractere bazat pe fizică poate fi un loc distractiv pentru a începe dezvoltarea jocului.
Pasul 1: Creați o scenă cu jucător și obiecte de teren
Odată ce Unity este deschis și ați creat un nou proiect, puteți începe prin a adăuga câteva obiecte la scena dvs. Puteți crea aceste obiecte în orice ordine doriți, dar aveți grijă să vă asigurați că utilizați setările corecte. Deși acest proiect este de bază, este o modalitate excelentă de a face acest lucru începeți cu Unity.
Un obiect plan 3D pentru teren
Primul obiect care trebuie adăugat la scena ta este un avion. Faceți clic dreapta în interiorul panoului ierarhic, plasați cursorul peste
Obiect 3D, și selectați Avion din lista. Puteți ajusta dimensiunea avionului pentru a oferi o zonă de testare mai mare, dar nu trebuie să faceți nimic altceva.Un Cube Object Player Model
Apoi, este timpul să adăugați un cub la scenă pentru a acționa ca model de jucător. Faceți clic dreapta în interiorul panoului ierarhic, plasați cursorul peste Obiect 3D, și selectați cub din meniul derulant. Poziționați noul cub astfel încât să se așeze deasupra planului pe care l-ați adăugat și el. De asemenea, trebuie să adăugați o componentă cu corp rigid pentru a transforma cubul într-un obiect de fizică.
Selectați cubul și mergeți la Inspector. Click pe Adăugați o componentă în partea de jos a panoului, căutați rigidbody și selectați Corp rigid din listă când apare. Bifați Folosește Gravity bifați caseta și lăsați restul setărilor așa cum sunt.
Puteți găsi active Unity gratuite online pentru a vă înfrumuseța proiectul.
O cameră la persoana a treia
Scena dvs. ar trebui să aibă deja o cameră pe care o puteți utiliza ca cameră la persoana a treia. Poziționați camera astfel încât să se așeze într-o poziție confortabilă pentru persoana a treia deasupra cubului dvs. Accesați panoul ierarhic înainte de a glisa și plasa camera pe cub pentru a crea o relație părinte-copil. Camera vă va urmări automat cubul cu acest lucru făcut.
Un test rapid
Deși scena ta nu are încă niciun cod, poți testa munca pe care ai făcut-o până acum. Apasă pe Joaca butonul din partea de sus a ecranului pentru a vă încărca jocul. Ar trebui să vedeți cubul căzând și să aterizeze deasupra avionului, iar Camera ar trebui să urmărească cubul pe măsură ce cade.
Pasul 2: Configurați un fișier C#
Acum este timpul să creați un fișier C#, astfel încât să puteți începe să programați o mișcare. Accesați secțiunea Proiect, faceți clic dreapta, plasați cursorul peste Creare și selectați Folder din listă. Denumiți folderul Scripturi sau ceva similar.
Navigați în noul folder și repetați procesul, dar selectați C# Script din listă. Puteți da acestui fișier orice nume, dar acesta va fi și numele funcției principale din cadrul acestuia. Asigurați-vă că noul dvs. C# arată așa.
folosind Sistem. Colecții;
folosind Sistem. Colecții. Generic;
folosind UnityEngine;publicclasăCharacter_Control: Monocomportament {
golstart() {
}
golActualizați() {
}
}
Pasul 3: Folosiți C# pentru a crea mișcare înainte și înapoi cu viteză
Înainte de a adăuga la funcțiile din fișierul script, declarați câteva variabile publice. Mai întâi este un Rigidbody pentru a stoca modelul jucătorului. De asemenea, declarați un plutitor pentru a urmări viteza de mișcare. Aceste variabile intră în clasa principală, în afara oricăror funcții.
public corp rigid corp rigid;
publicpluti viteză;
Apoi, este timpul să adăugați o singură linie de cod la funcția Start. Aceasta utilizează o declarație GetComponent pentru a atribui componenta cu corp rigid al cubului variabilei cu corp rigid pe care ați creat-o.
golstart() {
rigidbody = GetComponent < Rigidbody > ();
}
Acum puteți adăuga un cod care vă va pune în mișcare modelul de player. Acest cod este frumos și simplu; ai nevoie doar de două declarații if, una pentru deplasarea înainte și una pentru deplasarea înapoi. Puteți utiliza Input. GetKey pentru a determina când o tastă este apăsată. În acest caz, căutați apăsări ale tastelor W și S.
Apăsarea oricăreia dintre aceste taste adaugă o forță la corpul rigid al cubului folosind corpul rigid. AddForce. Puteți calcula direcția și viteza forței adăugate înmulțind poziția pe axa Z (transform.forward) cu variabila viteză. Nu există nicio clasă transform.backward pe care să o utilizați pentru mișcarea înapoi, dar acest lucru este realizabil prin înmulțirea transform.forward cu -1.
dacă (Intrare. GetKey("w")) {
corp rigid. AddForce (transform.forward * viteza);
}
dacă (Intrare. GetKey("s")) {
corp rigid. AddForce((transform.forward * -1) * viteza);
}
Salvați fișierul C# și navigați înapoi la Unity. Găsiți scriptul în panoul Proiect și trageți-l și plasați-l pe modelul de caracter Cube din ierarhie pentru a atribui script-ul acelui obiect. Când selectați Cubul, ar trebui să vedeți scriptul ca o componentă în panoul Inspector. Faceți clic în interiorul casetei variabile cu corp rigid și selectați corp rigid al cubului dvs.
Acum puteți folosi butonul Play pentru a lansa jocul și a testa codul. Dar asteapta! Există o problemă; Cubul tău se va rostogoli mai degrabă decât să se miște drept înainte. Întoarceți-vă la inspectorul Cubului, găsiți componenta Rigidbody și bifați casetele pentru Înghețare rotație pe axa X și Z înainte de a lansa jocul din nou. Acum ar trebui să funcționeze.
Pasul 4: Folosiți C# pentru a crea viraj la stânga și la dreapta cu cuplu
Spre deosebire de deplasarea înapoi și înainte, întoarcerea modelului de player Cube necesită o forță numită cuplu. Aveți nevoie de o altă variabilă pentru aceasta: un float public pentru a atribui o valoare de cuplu.
publicpluti cuplu;
Codul pentru a vira la stânga și la dreapta în acest script este foarte asemănător cu cel folosit și pentru a merge înainte și înapoi. Există o dacă declarație pentru fiecare direcție care caută apăsări fie ale tastei D (viraj la dreapta), fie ale tastei A (viraj la stânga).
Primul pas în fiecare declarație if este de a determina direcția virajului folosind intrarea. GetAxis și atribuiți rezultatul unei variabile float. În continuare, utilizați corp rigid. AdaugăTorque pentru a aplica forță de rotație modelului de caractere Cube prin înmulțirea cuplului, a rotației și a axei Z a cubului.
dacă (Intrare. GetKey("d")) {
pluti turn = Intrare. GetAxis("Orizontală");
corp rigid. AddTorque (transform.up * cuplu * turn);
}
dacă (Intrare. GetKey("A")) {
pluti turn = Intrare. GetAxis("Orizontală");
corp rigid. AddTorque (transform.up * cuplu * turn);
}
Salvați codul și întoarceți-vă la Unity pentru a-l testa. Puteți ajusta viteza și timpul de accelerare a rotației modelului dvs. de jucător selectând Cubul și editând variabilele de masă, glisare și cuplu ale corpului rigid în scriptul dvs. Acest exemplu de proiect se stabilește pe 1 masă, 1 rezistență și 2 cuplu.
Pasul 5: Folosiți C# pentru a programa Jumping
Ca element final al acestui controler de caractere Unity, este timpul să vă creați saltul. Crearea unui salt este mai complexă decât celelalte controale de bază la care ați lucrat, având în vedere că un salt trebuie să aibă o înălțime limitată. Începeți prin a adăuga o variabilă booleană privată pentru a urmări dacă jucătorul sare sau nu.
privatbool isJumping = fals;
Această variabilă nu va face nimic fără o declarație care să o testeze. În acest caz, o declarație if de bază pentru a verifica dacă variabila este falsă va face truc. Adăugarea aceleiași condiții la cealaltă mișcare dacă declarațiile vor opri jucătorul să se miște în timpul sărituri.
dacă (!este sărind) {
}
Adăugarea aceleiași condiții la cealaltă mișcare dacă declarațiile vor opri jucătorul să se miște în timpul sărituri.
dacă (Intrare. GetKey("w") && !isSaritura) {
corp rigid. AddForce (transform.forward * viteza);
}
În cadrul instrucțiunii !isJumping if, aveți nevoie de o altă instrucțiune if, de data aceasta pentru a verifica dacă apăsați tastatura butonului de salt. Setarea variabilei isJumping la true este primul lucru de făcut în această declarație if, urmată de realizarea unei declarații rigidbody.angularVelocity pentru a elimina forțele aplicate în prezent cubului.
Acum puteți folosi corpul rigid. Declarație AddForce pentru a adăuga forță cubului pe axa lui Z, creând mișcarea ascendentă a unui salt. În cele din urmă, este timpul să folosiți o declarație de invocare pentru a apela o funcție diferită după 0,8 secunde.
dacă (!este sărind) {
dacă (Intrare. GetKeyDown("spaţiu")) {
isJumping = Adevărat;
corp rigid. AddForce (transform.up * viteza * 120);
rigidbody.angularVelocity = Vector3.zero;
Invoca(„Move_Setter”, 0.8 f);
}
}
Această funcție setează variabila isJumping înapoi la fals, astfel încât mișcarea/săritul să fie posibilă din nou, iar întârzierea de 0,8 secunde oprește declanșarea prea devreme.
golMove_Setter() {
isJumping = fals;
}
Pasul 6: Testați codul de control de caractere
Salvați fișierul și reveniți în Unity pentru a testa codul pe care l-ați scris. La fel ca majoritatea compilatoarelor, Unity furnizează informații despre erori și alte probleme legate de codul dvs. pentru a face mai ușor să vedeți ce ați putea avea nevoie să schimbați. Puteți vizualiza codul complet pentru acest proiect pe site-ul nostru GitHub pagină.
Crearea controlerelor de caractere Unity
Puteți alege dintr-o varietate de abordări diferite atunci când creați un controler de caracter în Unity. Utilizarea fizicii este o opțiune, dar puteți folosi și sistemul de control al caracterelor încorporat, dacă doriți.
Explorarea diferitelor opțiuni ca aceasta este o modalitate excelentă de a învăța despre instrumente precum Unity.