Kako kodirati krmilnik znakov, ki temelji na fiziki, v Unity3D

Kako kodirati krmilnik znakov, ki temelji na fiziki, v Unity3D
Bralci, kot ste vi, pomagajo podpirati MUO. Ko opravite nakup prek povezav na našem spletnem mestu, lahko zaslužimo partnersko provizijo. Preberi več.

Krmilnik znakov vam lahko pomaga implementirati preprosto fiziko gibanja v vaši igri.





ponastavite geslo za id Apple z e -pošto

Krmilnikom znakov Unity3D lahko pristopite z več zornih kotov. Če uporabljate knjižnico z zmogljivimi razredi in funkcijami, je lahko ustvarjanje krmilnika znakov, ki temelji na fiziki, zabavno mesto za začetek razvoja vaše igre.





1. korak: Ustvarite sceno s predmeti igralca in terena

  krmilnik znakov enotnosti 3d prostor

Ko je Unity odprt in ste ustvarili nov projekt, lahko začnete z dodajanjem nekaj predmetov na vašo sceno. Te predmete lahko ustvarite v poljubnem vrstnem redu, vendar pazite, da uporabite pravilne nastavitve. Čeprav je ta projekt osnovni, je odličen način za začnite z Unity .





3D ravninski objekt za teren

Prvi predmet, ki ga dodate svoji sceni, je letalo. Z desno miškino tipko kliknite znotraj podokna hierarhije, premaknite miškin kazalec nad 3D predmet in izberite Letalo s seznama. Velikost letala lahko prilagodite, da zagotovite večje območje testiranja, vendar vam ni treba storiti ničesar drugega.

Model predvajalnika kockastega predmeta

Nato je čas, da prizorišču dodate kocko, ki bo delovala kot model igralca. Z desno miškino tipko kliknite znotraj podokna hierarhije, premaknite miškin kazalec nad 3D predmet in izberite Kocka iz spustnega menija. Postavite novo kocko tako, da sedi nad ravnino, ki ste jo prav tako dodali. Dodati morate tudi komponento togega telesa, da kocko spremenite v fizikalni objekt.



Izberite kocko in pojdite do inšpektorja. Kliknite na Dodaj komponento na dnu podokna poiščite rigidbody in izberite Rigidbody s seznama, ko se pojavi. Obkljukajte Uporabi gravitacijo potrdite polje in pustite ostale nastavitve, kot so.

Lahko najdeš brezplačna sredstva Unity na spletu za popestritev vašega projekta.





Kamera tretje osebe

Vaša scena mora že imeti kamero, ki jo lahko uporabite kot kamero tretje osebe. Postavite kamero tako, da bo v udobnem položaju tretje osebe nad vašo kocko. Pojdite v podokno hierarhije, preden povlečete in spustite kamero na kocko, da ustvarite odnos starš-otrok. Ko bo to opravljeno, bo kamera samodejno sledila vaši kocki.

Hitri test

Čeprav vaša scena še nima kode, lahko preizkusite delo, ki ste ga opravili do zdaj. Kliknite na Igraj gumb na vrhu zaslona, ​​da naložite igro. Morali bi videti, kako kocka pade in pristane na vrhu letala, kamera pa bi morala slediti kocki, ko pada.





2. korak: Nastavite datoteko C#

Zdaj je čas, da ustvarite datoteko C#, da lahko začnete programirati nekaj gibanja. Pojdite v razdelek Projekt, z desno miškino tipko kliknite, premaknite miškin kazalec na Ustvari in na seznamu izberite Mapa. Poimenujte mapo Scripts ali kaj podobnega.

Pomaknite se znotraj nove mape in ponovite postopek, vendar na seznamu izberite skript C#. Tej datoteki lahko daste poljubno ime, vendar bo to tudi ime glavne funkcije v njej. Poskrbite, da bo vaš novi C# videti tako.

 using System.Collections; 
using System.Collections.Generic;
using UnityEngine;

public class Character_Control: MonoBehaviour {
    void Start() {
    }

    void Update() {
    }
}

3. korak: Uporabite C# za ustvarjanje gibanja naprej in nazaj s hitrostjo

Pred dodajanjem funkcij v datoteki skripta deklarirajte nekaj javnih spremenljivk. Najprej je Rigidbody za shranjevanje modela igralca. Razglasite tudi float, da spremljate hitrost gibanja. Te spremenljivke gredo v glavni razred, zunaj vseh funkcij.

 public Rigidbody rigidbody; 
public float speed;

Nato je čas, da funkciji Start dodate eno vrstico kode. To uporablja deklaracijo GetComponent za dodelitev komponente rigidbody kocke spremenljivki rigidbody, ki ste jo ustvarili.

 void Start() { 
    rigidbody = GetComponent < Rigidbody > ();
}

Zdaj lahko dodate kodo, ki bo premaknila vaš model igralca. Ta koda je lepa in preprosta; potrebujete le dva stavka if, enega za premikanje naprej in enega za premikanje nazaj. Z Input.GetKey lahko ugotovite, kdaj je tipka pritisnjena. V tem primeru iščete pritiske tipk W in S.

Če pritisnete eno od teh tipk, dodate silo togemu telesu kocke z uporabo rigidbody.AddForce. Smer in hitrost dodane sile lahko izračunate tako, da pomnožite njen položaj osi Z (transform.naprej) s spremenljivko hitrosti. Ni razreda transform.backward, ki bi ga lahko uporabili za gibanje nazaj, vendar je to mogoče doseči z množenjem transform.forward z -1.

 if (Input.GetKey("w")) { 
    rigidbody.AddForce(transform.forward * speed);
}

if (Input.GetKey("s")) {
    rigidbody.AddForce((transform.forward * -1) * speed);
}

Shranite datoteko C# in se pomaknite nazaj v Unity. Poiščite skript v podoknu Projekt ter ga povlecite in spustite na model znakov Cube znotraj hierarhije, da dodelite skript temu objektu. Ko izberete kocko, bi morali videti skript kot komponento v podoknu inšpektorja. Kliknite znotraj polja s spremenljivko togega telesa in izberite togo telo vaše kocke.

Zdaj lahko uporabite gumb Predvajaj, da zaženete igro in preizkusite svojo kodo. Ampak počakaj! Obstaja težava; vaša kocka se bo kotalila namesto naravnost naprej. Vrnite se do inšpektorja kocke, poiščite komponento Rigidbody in označite polja Zamrzni vrtenje na osi X in Z, preden znova zaženete igro. Zdaj bi moralo delovati.

4. korak: Uporabite C# za ustvarjanje zavijanja v levo in desno z navorom

Za razliko od premikanja nazaj in naprej obračanje vašega modela predvajalnika Cube zahteva silo, imenovano navor. Za to potrebujete drugo spremenljivko: javni float za dodelitev vrednosti navora.

 public float torque;

Koda za obračanje levo in desno v tem scenariju je zelo podobna tisti, ki se uporablja tudi za premikanje naprej in nazaj. Obstaja če stavek za vsako smer, ki išče pritiske na tipko D (desni zavoj) ali tipko A (levi zavoj).

Prvi korak v vsakem stavku if je določitev smeri obrata z uporabo metode Input.GetAxis in dodelitev rezultata spremenljivki float. Po tem uporabite rigidbody.AddTorque za uporabo rotacijske sile na modelu znakov kocke tako, da pomnožite navor, obrat in os Z kocke.

 if (Input.GetKey("d")) { 
    float turn = Input.GetAxis("Horizontal");
    rigidbody.AddTorque(transform.up * torque * turn);
}

if (Input.GetKey("a")) {
    float turn = Input.GetAxis("Horizontal");
    rigidbody.AddTorque(transform.up * torque * turn);
}

Shranite kodo in se vrnite v Unity, da jo preizkusite. Hitrost in čas pospeševanja rotacije modela igralca lahko prilagodite tako, da izberete kocko in uredite spremenljivke mase, upora in navora togega telesa v svojem skriptu. Ta primer projekta se osredotoča na 1 maso, 1 upor in 2 navora.

5. korak: uporabite C# za programiranje skokov

Kot zadnji element tega krmilnika znakov Unity je čas, da ustvarite svoj skok. Ustvarjanje skoka je bolj zapleteno kot druge osnovne kontrole, na katerih ste delali, glede na to, da mora imeti skok omejeno višino. Začnite z dodajanjem zasebne logične spremenljivke za spremljanje, ali igralec skače ali ne.

 private bool isJumping = false;

Ta spremenljivka ne bo naredila ničesar brez izjave, ki bi jo preizkusila. V tem primeru bo zadostoval osnovni stavek if za preverjanje, ali je spremenljivka napačna. Dodajanje istega pogoja drugemu gibanju if stavkov bo preprečilo premikanje igralca med skoki.

 if (!isJumping) { 
}

Dodajanje istega pogoja drugemu gibanju if stavkov bo preprečilo premikanje igralca med skoki.

 if (Input.GetKey("w") && !isJumping) { 
    rigidbody.AddForce(transform.forward * speed);
}

Znotraj stavka !isJumping if potrebujete še en stavek if, tokrat za preverjanje pritiska tipke gumba za skok. Nastavitev spremenljivke isJumping na true je prva stvar, ki jo morate narediti v tem stavku if, čemur sledi deklaracija rigidbody.angularVelocity za odstranitev sil, ki trenutno delujejo na kocko.

Zdaj lahko uporabite deklaracijo rigidbody.AddForce, da dodate silo kocki na njeni osi Z, kar ustvari skok navzgor. Končno je čas, da uporabite deklaracijo invoke za klic druge funkcije po 0,8 sekunde.

 if (!isJumping) { 
    if (Input.GetKeyDown("space")) {
        isJumping = true;
        rigidbody.AddForce(transform.up * speed * 120);
        rigidbody.angularVelocity = Vector3.zero;
        Invoke("Move_Setter", 0.8 f);
    }
}

Ta funkcija nastavi spremenljivko isJumping nazaj na false, tako da je gibanje/skakanje znova možno, 0,8-sekundna zakasnitev pa prepreči prehitro sprožitev.

 void Move_Setter() { 
    isJumping = false;
}

6. korak: preizkusite svojo kodo krmilnika znakov

Shranite datoteko in se vrnite v Unity, da preizkusite kodo, ki ste jo napisali. Kot večina prevajalnikov tudi Unity zagotavlja informacije o napakah in drugih težavah z vašo kodo, da boste lažje videli, kaj boste morda morali spremeniti. Celotno kodo za ta projekt si lahko ogledate na našem GitHub strani.

Ustvarjanje krmilnikov znakov Unity

Pri ustvarjanju krmilnika znakov v Unityju lahko izbirate med številnimi različnimi pristopi. Uporaba fizike je ena od možnosti, vendar lahko uporabite tudi vgrajeni sistem krmilnika znakov, če želite.

Raziskovanje različnih možnosti, kot je ta, je odličen način za spoznavanje orodij, kot je Unity.