Ako kódovať ovládač znakov založený na fyzike v Unity3D

Ako kódovať ovládač znakov založený na fyzike v Unity3D
Čitatelia ako vy pomáhajú podporovať MUO. Keď uskutočníte nákup pomocou odkazov na našej stránke, môžeme získať pridruženú províziu. Čítaj viac.

Ovládač postavy vám môže pomôcť implementovať jednoduchú fyziku pohybu vo vašej hre.





K ovládačom postáv Unity3D môžete pristupovať z niekoľkých uhlov pohľadu. Ak používate knižnicu s výkonnými triedami a funkciami, vytvorenie ovládača postavy založeného na fyzike môže byť zábavným miestom na začatie vývoja hry.





Krok 1: Vytvorte scénu s objektmi hráča a terénu

  jednotný ovládač znakov 3D priestor

Po otvorení Unity a vytvorení nového projektu môžete začať pridaním niekoľkých objektov do vašej scény. Tieto objekty môžete vytvárať v ľubovoľnom poradí, ale buďte opatrní, aby ste sa uistili, že používate správne nastavenia. Aj keď je tento projekt základný, je to skvelý spôsob začnite s Unity .





3D rovinný objekt pre terén

Prvý objekt, ktorý pridáte do svojej scény, je rovina. Kliknite pravým tlačidlom myši na tablu hierarchie a umiestnite kurzor myši 3D objekt a vyberte Lietadlo zo zoznamu. Veľkosť roviny môžete upraviť, aby ste získali väčšiu testovaciu oblasť, ale nemusíte s tým robiť nič iné.

Model prehrávača objektov kocky

Ďalej je čas pridať na scénu kocku, ktorá bude pôsobiť ako model hráča. Kliknite pravým tlačidlom myši na tablu hierarchie a umiestnite kurzor myši 3D objekt a vyberte Kocka z rozbaľovacej ponuky. Umiestnite novú kocku tak, aby sedela nad rovinou, ktorú ste tiež pridali. Musíte tiež pridať komponent tuhého telesa, aby ste z kocky urobili fyzikálny objekt.



Vyberte kocku a prejdite na inšpektora. Kliknite na Pridať komponent v spodnej časti tably vyhľadajte tuhé teleso a vyberte Pevné telo zo zoznamu, keď sa objaví. Zaškrtnite Použite gravitáciu začiarknite políčko a nechajte ostatné nastavenia tak, ako sú.

Môžeš nájsť voľný majetok Unity online na vylepšenie vášho projektu.





Fotoaparát tretej osoby

Vaša scéna by už mala mať kameru, ktorú môžete použiť ako fotoaparát tretej osoby. Umiestnite kameru tak, aby sedela v pohodlnej polohe tretej osoby nad vašou kockou. Pred presunutím kamery na kocku prejdite na tablu hierarchie, aby ste vytvorili vzťah rodič-dieťa. Kamera bude automaticky sledovať vašu kocku.

váš počítač narazil na problém a musí sa reštartovať

Rýchly test

Zatiaľ čo vaša scéna ešte nemá žiadny kód, môžete otestovať prácu, ktorú ste doteraz vykonali. Kliknite na hrať tlačidlo v hornej časti obrazovky na načítanie vašej hry. Mali by ste vidieť, ako kocka padá a pristáva na vrchu lietadla, a kamera by mala sledovať kocku, keď padá.





Krok 2: Nastavte súbor C#

Teraz je čas vytvoriť súbor C#, aby ste mohli začať programovať nejaký pohyb. Prejdite do časti Projekt, kliknite pravým tlačidlom myši, umiestnite kurzor myši na položku Vytvoriť a v zozname vyberte položku Priečinok. Pomenujte priečinok Scripts alebo niečo podobné.

Prejdite do nového priečinka a zopakujte proces, ale zo zoznamu vyberte C# Script. Tomuto súboru môžete dať ľubovoľný názov, ale bude to aj názov hlavnej funkcie v ňom. Uistite sa, že váš nový C# vyzerá takto.

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

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

    void Update() {
    }
}

Krok 3: Použite C# na vytvorenie pohybu dopredu a dozadu s rýchlosťou

Pred pridaním funkcií do súboru skriptu deklarujte niektoré verejné premenné. Najprv je tu pevné telo na uloženie modelu prehrávača. Vyhláste tiež plavák na sledovanie rýchlosti pohybu. Tieto premenné patria do hlavnej triedy, mimo akýchkoľvek funkcií.

 public Rigidbody rigidbody; 
public float speed;

Ďalej je čas pridať jeden riadok kódu do funkcie Štart. Toto používa deklaráciu GetComponent na priradenie komponentu tuhého telesa kocky k premennej tuhého telesa, ktorú ste vytvorili.

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

Teraz môžete pridať nejaký kód, ktorý rozhýbe váš model hráča. Tento kód je pekný a jednoduchý; potrebujete len dva príkazy if, jeden na pohyb vpred a jeden na pohyb dozadu. Pomocou Input.GetKey môžete určiť, kedy sa stlačí kláves. V tomto prípade hľadáte stlačenie klávesov W a S.

Stlačením ktoréhokoľvek z týchto klávesov pridáte silu do tuhého telesa kocky pomocou rigidbody.AddForce. Smer a rýchlosť pridanej sily môžete vypočítať vynásobením jej polohy osi Z (transform.forward) premennou rýchlosti. Neexistuje žiadna trieda transform.backward, ktorú by ste mohli použiť na spätný pohyb, ale to je možné dosiahnuť vynásobením transform.forward číslom -1.

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

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

Uložte súbor C# a prejdite späť do Unity. Nájdite skript na paneli Projekt a presuňte ho na kocku s modelom znakov v rámci hierarchie, aby ste priradili skript danému objektu. Keď vyberiete kocku, mali by ste vidieť skript ako komponent v paneli Inšpektor. Kliknite do poľa premennej tuhého telesa a vyberte tuhé teleso svojej kocky.

Teraz môžete použiť tlačidlo Play na spustenie hry a otestovanie kódu. Ale počkaj! Vyskytol sa problém; vaša kocka sa bude skôr kotúľať, než sa pohybovať priamo vpred. Vráťte sa k inšpektorovi kocky, nájdite komponent Rigidbody a pred opätovným spustením hry zaškrtnite políčka Freeze Rotation na osi X a Z. Teraz by to malo fungovať.

Krok 4: Použite C# na vytvorenie ľavého a pravého otáčania s krútiacim momentom

Na rozdiel od pohybu dozadu a dopredu, otáčanie modelu hráča kocky vyžaduje silu nazývanú krútiaci moment. Na to potrebujete ďalšiu premennú: verejný float na priradenie hodnoty krútiaceho momentu.

 public float torque;

Kód na odbočenie doľava a doprava v tomto skripte je veľmi podobný kódu, ktorý sa používa na pohyb dopredu a dozadu. Existuje ak príkaz pre každý smer, ktorý hľadá stlačenie klávesu D (otočenie doprava) alebo klávesu A (otočenie vľavo).

Prvým krokom v každom príkaze if je určenie smeru odbočenia pomocou metódy Input.GetAxis a priradenie výsledku do premennej float. Potom použite rigidbody.AddTorque na aplikovanie rotačnej sily na model kocka vynásobením krútiaceho momentu, otočenia a osi Z kocky.

 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);
}

Uložte si kód a vráťte sa do Unity, aby ste ho otestovali. Môžete upraviť rýchlosť a čas nábehu rotácie modelu vášho prehrávača výberom kocky a úpravou premenných hmotnosti, ťahania a krútiaceho momentu tuhého telesa v skripte. Tento príklad projektu sa ustáli na 1 hmote, 1 ťahu a 2 krútiacom momente.

Krok 5: Použite C# na programovanie skákania

Ako posledný prvok tohto ovládača postavy Unity je čas vytvoriť si skok. Vytvorenie skoku je zložitejšie ako ostatné základné ovládacie prvky, na ktorých ste pracovali, keďže skok musí mať obmedzenú výšku. Začnite pridaním súkromnej booleovskej premennej na sledovanie, či hráč skáče alebo nie.

 private bool isJumping = false;

Táto premenná neurobí nič bez príkazu na jej testovanie. V tomto prípade postačí základný príkaz if na kontrolu, či je premenná nepravdivá. Pridaním rovnakej podmienky do druhého pohybu príkazov if zastavíte hráča v pohybe počas skokov.

 if (!isJumping) { 
}

Pridaním rovnakej podmienky do druhého pohybu príkazov if zastavíte hráča v pohybe počas skokov.

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

V rámci príkazu !isJumping if potrebujete ďalší príkaz if, tentoraz na kontrolu stlačenia tlačidla skoku. Nastavenie premennej isJumping na hodnotu true je prvá vec, ktorú treba urobiť v tomto príkaze if, po ktorom nasleduje deklarácia rigidbody.angularVelocity na odstránenie síl aktuálne aplikovaných na kocku.

Teraz môžete použiť deklaráciu rigidbody.AddForce na pridanie sily do kocky na jej osi Z, čím sa vytvorí pohyb nahor ako skok. Nakoniec je čas použiť deklaráciu vyvolania na zavolanie inej funkcie 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);
    }
}

Táto funkcia nastaví premennú isJumping späť na hodnotu false, takže pohyb/skákanie je opäť možné a oneskorenie 0,8 sekundy zastaví jej spustenie príliš skoro.

 void Move_Setter() { 
    isJumping = false;
}

Krok 6: Otestujte si kód ovládača postavy

Uložte súbor a vráťte sa do Unity, aby ste otestovali kód, ktorý ste napísali. Ako väčšina kompilátorov, aj Unity poskytuje informácie o chybách a iných problémoch s vaším kódom, aby ste ľahšie videli, čo by ste mohli potrebovať zmeniť. Celý kód tohto projektu si môžete pozrieť na našej stránke GitHub stránku.

streamujte z telefónu do televízie pomocou USB

Vytváranie ovládačov znakov Unity

Pri vytváraní ovládača postavy v Unity si môžete vybrať z množstva rôznych prístupov. Jednou z možností je použitie fyziky, ale ak chcete, môžete použiť aj vstavaný systém ovládania postavy.

Skúmanie rôznych možností, ako je toto, je skvelý spôsob, ako sa dozvedieť o nástrojoch, ako je Unity.