Ești nou în Unity? Doriți să învățați cum să primiți intrări de la jucători și să mutați personajele pe ecran? Am creat acest ghid pentru a prezenta trei moduri diferite prin care puteți controla mișcarea jucătorului în Unity.
Indiferent dacă sunteți începător în codificare sau aveți ceva experiență sub centură, acest tutorial C# vă va pune pe picioare, iar personajele pe ale lor.
Să începem.
Mișcarea jucătorului în Unity: Colectarea intrărilor
În primul rând, trebuie să știți cum să captați intrările de la utilizator și să le transformați în mișcare în joc. Unity face acest lucru destul de ușor atâta timp cât știi unde să cauți.
Cu Unity deschis, faceți clic pe Editați | × în bara de instrumente de sus. Acum selectați Setările proiectului. Din lista din stânga, alegeți Manager de intrare. Selectați Topoare, populând lista de valori de intrare. Vei dori să te uiți la Orizontală și Vertical pentru mișcarea de bază.
Veți folosi aceste axe împreună cu Intrare. GetAxisRaw(); pentru mișcarea de bază în secțiunea următoare.
Mișcarea jucătorului în unitate folosind un corp rigid și un colisionator
Acum că știți numele axelor, le puteți folosi pentru a controla mișcarea jucătorului.
În proiectul tău Unity Ierarhie vizualizați, faceți clic dreapta și selectați Obiect 3D > Capsulă pentru a crea ceea ce vei oferi mișcare. Asigurați-vă că utilizați aceeași tactică pentru a crea un teren Avion pentru ca Capsula să stea pe picioare.
Asigurați-vă că resetați Transforma valoarea ambelor obiecte și mutați-vă capsula astfel încât să stea în avion. Redenumiți-vă capsula în ceva de genul „Player” pentru o identificare ușoară.
Legate de: Cele 5 limbaje de dezvoltare a jocului Unity: pe care ar trebui să înveți?
Faceți clic pe Jucător obiect şi, în Inspector vizualizare, derulați în jos la Adăugați o componentă. Adauga o Corp rigid, apoi adăugați o altă componentă ca a Capsule Collider de data asta. Veți avea nevoie de aceste componente pentru a adăuga fizică și, prin urmare, mișcare Jucător.
Apoi, faceți clic dreapta în dvs Scripturi folder și Crea un nou Script C#. Denumiți acest script ceva de genul „PlayerMovement”. Dacă intenționați să adăugați mai multe tipuri de mișcare pentru diferite personaje sau tipuri de controler, veți dori să creați multe scripturi diferite pentru fiecare tip de mișcare. Pentru moment, ne vom concentra pe elementele de bază și ne vom folosi un singur script.
Vezi si: Ce este programarea modulară în Unity și de ce este importantă?
Faceți dublu clic pe scriptul dvs. pentru a-l deschide. Veți primi un script Unity implicit:
folosind System. Colecții;
folosind System. Colecții. Generic;
folosind UnityEngine;
Public class PlayerMovement: MonoBehaviour
{
// Start este apelat înainte de prima actualizare a cadrului
void Start()
{}
// Actualizarea este apelată o dată pe cadru
void Update()
{
}
}
Puteți șterge folosind System. Colecții; și folosindSistem. Colecții. Generic; deoarece nu sunt necesare pentru acest script.
Cu asta din drum, concentrează-te pe
Public class PlayerMovement: MonoBehaviour {
pentru acum. În interiorul bretei de deschidere, creați a plutitor public variabila numita viteză sau ceva asemanator. Acest viteză variabila este un multiplicator care va controla cât de repede noastre Jucător se mișcă după mai multe programe. Deocamdată, setează viteză egal cu ceva de genul 10f.
De asemenea, trebuie să lăsați Unity că există un Rigidbody de manipulat în acest script. Acest lucru se face cu cuvântul cheie Corp rigid și un nume de variabilă - vom alege rb.
Public class PlayerMovement: MonoBehaviour
{
viteza de plutire publică = 10f; //Controlează multiplicatorul de viteză
Corp rigid rb; //Spune scriptului că există un corp rigid, putem folosi variabila rb pentru a-l face referire în scriptul ulterioară
Este tot ce trebuie să adăugați în această secțiune. Acum, trece la void Start(). La începerea jocului, trebuie să setați rb variabilă egală cu Corp rigid pe Jucător ca astfel:
void Start()
{
rb = GetComponent(); //rb este egal cu corpul rigid al playerului
}
Acum, aruncați o privire la void Update() funcţie. Aceasta este funcția pe care o veți folosi pentru a prelua constant intrări de la tastaturile, controlerele, etc. ale jucătorilor. Amintiți-vă când ați verificat Setările proiectului pentru Axe de intrare? Le vei folosi aici.
void Update()
{
float xMove = Intrare. GetAxisRaw ("Orizontal"); // Tasta d schimbă valoarea la 1, o cheie schimbă valoarea la -1
float zMove = Intrare. GetAxisRaw ("Verticală"); // Tasta w schimbă valoarea la 1, tasta s schimbă valoarea la -1
rb.velocity = nou Vector3(xMove, rb.velocity.y, zMove) * viteza; // Creează o viteză în direcția valorii egală cu apăsarea tastei (WASD). rb.velocity.y se ocupă de cădere + săritură setând viteza la y.
}
Nu vă faceți griji dacă vă simțiți copleșiți de saltul în cod; o vom explica pas cu pas. Mai întâi, creați un pluti variabilă cu un nume ca xMutare, și setați-l egal cu Intrare. GetAxisRaw ("Orizontal");
Intrare. GetAxisRaw(); este modul Unity de a înregistra intrările Player de la Topoare ai gasit in Setările proiectului. Puteți citi mai multe despre el în Documentația oficială a Unity. "Orizontală" provine din Axă orizontală nume în Unitate. Această axă controlează mișcarea la stânga și la dreapta cu tastele „a” și „d”.
După cum probabil puteți ghici până acum, float zMove = Intrare. GetAxisRaw ("Verticală");
face același lucru, dar pentru tastele „w” și „s”.
Legate de: Cele mai bune tutoriale Unity 3D pentru începători
În continuare, vei pune asta viteză variabilă pe care ați creat-o în joc și finalizați piesa finală a puzzle-ului pentru mișcarea jucătorului în Unity.
rb.velocity = nou Vector3(xMove, rb.velocity.y, zMove) * viteza; // Creează o viteză în direcția valorii egală cu apăsarea tastei (WASD). rb.velocity.y se ocupă de cădere + săritură setând viteza la y.
Întoarce-te în Unity's Inspector vedere pentru Jucător obiect. Aruncă o privire la Corp rigid-sub Info, veți vedea o valoare Viteză. Aceasta este valoarea pe care o vizați rb.viteza.
nou Vector3(xMove, rb.velocity.y, zMove) * viteza, creează un nou vector cu valorile x, y și z furnizate, apoi înmulțește valoarea vectorului cu viteză.
Asigurați-vă că trageți Mișcarea jucătorului script pe Jucător obiect în Unity, și atât! În total, aveți un script C# funcțional care preia intrări de la jucător și le transformă în mișcarea caracterului în Unity.
Iată codul final:
folosind UnityEngine;
Public class PlayerMovement: MonoBehaviour
{
viteza de plutire publică = 10f; //Controlează multiplicatorul de viteză
Corp rigid rb; //Spune scriptului că există un corp rigid, putem folosi variabila rb pentru a-l face referire în scriptul ulterioară// Start este apelat înainte de prima actualizare a cadrului
void Start()
{
rb = GetComponent(); //rb este egal cu corpul rigid al playerului
}// Actualizarea este apelată o dată pe cadru
void Update()
{
float xMove = Intrare. GetAxisRaw ("Orizontal"); // Tasta d schimbă valoarea la 1, o cheie schimbă valoarea la -1
float zMove = Intrare. GetAxisRaw ("Verticală"); // Tasta w schimbă valoarea la 1, tasta s schimbă valoarea la -1
rb.velocity = nou Vector3(xMove, rb.velocity.y, zMove) * viteza; // Creează o viteză în direcția valorii egală cu apăsarea tastei (WASD). rb.velocity.y se ocupă de cădere + săritură setând viteza la y.
}
}
Notă: Dacă găsești că personajul tău face mai mult decât orice altceva, asigurați-vă că blocați rotația jucătorului în Inspector.
Învață și fă mai mult în Unity
Acum că știți cum să programați mișcarea jucătorului în Unity cu componentele Rigidbody și Collider, ce veți învăța în continuare? Poate că extinderea controlerului de mișcare pentru a adăuga lucruri precum alunecarea, săritura dublă și multe altele s-ar dovedi distractiv și captivant.
Unity Learn este plin de subiecte interesante pentru a vă dezvolta abilitățile de dezvoltare a jocurilor. Credem că unul dintre cei mai importanți factori în extinderea cunoștințelor tale despre programare este să înveți ceva nou în fiecare zi. Rămâneți curioși și fericiți de hacking!
Vrei să începi să-ți dezvolți propriile jocuri? Unity Learn este cel mai bun și mai ușor mod de a învăța și de a stăpâni ceea ce trebuie să știi.
Citiți în continuare
- Programare
- Dezvoltarea jocului
- Unitate
- Programare
Marcus este jurnalist tehnic independent și editor junior pentru programare la MUO. Este un învățător pe tot parcursul vieții, un dezvoltator front-end pasionat și un scriitor de nuvele cu peste 3 ani de experiență în dezvoltarea prozei care îi ține pe cititori la curent.
Aboneaza-te la newsletter-ul nostru
Alăturați-vă buletinului nostru informativ pentru sfaturi tehnice, recenzii, cărți electronice gratuite și oferte exclusive!
Click aici pentru a te abona