Kaip užkoduoti fiziniais simboliais pagrįstą valdiklį Unity3D

Kaip užkoduoti fiziniais simboliais pagrįstą valdiklį Unity3D
Tokie skaitytojai kaip jūs padeda palaikyti MUO. Kai perkate naudodami nuorodas mūsų svetainėje, galime uždirbti filialų komisinius. Skaityti daugiau.

Simbolių valdiklis gali padėti įgyvendinti paprastą judesių fiziką žaidime.





„Unity3D“ simbolių valdiklius galite pažvelgti iš kelių kampų. Jei naudojate biblioteką su galingomis klasėmis ir funkcijomis, fizikos pagrindu sukurto simbolių valdiklio kūrimas gali būti smagi vieta pradėti žaidimo kūrimą.





1 veiksmas: sukurkite sceną su grotuvu ir reljefo objektais

  Vienybės simbolių valdiklis 3D erdvė

Atidarę Unity ir sukūrę naują projektą, galite pradėti prie savo scenos pridėdami keletą objektų. Šiuos objektus galite kurti bet kokia jums patinkančia tvarka, tačiau būkite atsargūs ir įsitikinkite, kad naudojate teisingus nustatymus. Nors šis projektas yra pagrindinis, tai puikus būdas pradėkite nuo Unity .





kaip apsaugoti USB diską slaptažodžiu

3D plokštumos objektas reljefui

Pirmas objektas, kurį reikia įtraukti į savo sceną, yra lėktuvas. Dešiniuoju pelės mygtuku spustelėkite hierarchijos sritį, užveskite pelės žymeklį virš 3D objektas ir pasirinkite Lėktuvas iš sąrašo. Galite reguliuoti lėktuvo dydį, kad gautumėte didesnį bandymo plotą, bet jums nereikia nieko daugiau daryti.

Kubo objektų grotuvo modelis

Tada laikas prie scenos pridėti kubą, kuris veiktų kaip žaidėjo modelis. Dešiniuoju pelės mygtuku spustelėkite hierarchijos sritį, užveskite pelės žymeklį virš 3D objektas ir pasirinkite kubas iš išskleidžiamojo meniu. Padėkite naują kubą taip, kad jis būtų virš plokštumos, kurią taip pat pridėjote. Taip pat turite pridėti standųjį korpuso komponentą, kad kubas taptų fizikos objektu.



Pasirinkite kubą ir eikite į inspektorių. Spustelėkite Pridėti komponentą srities apačioje ieškokite standaus korpuso ir pasirinkite Tvirtas kūnas iš sąrašo, kai jis pasirodys. Pažymėkite Naudokite gravitaciją pažymėkite langelį ir palikite kitus nustatymus tokius, kokie jie yra.

Tu gali rasti nemokamas „Unity“ turtas internete kad pagyvintumėte savo projektą.





Trečiojo asmens fotoaparatas

Jūsų scenoje jau turėtų būti fotoaparatas, kurį galite naudoti kaip trečiojo asmens fotoaparatą. Padėkite fotoaparatą taip, kad jis būtų patogioje trečiojo asmens pozicijoje virš kubo. Eikite į hierarchijos sritį prieš vilkdami ir numesdami fotoaparatą ant kubo, kad sukurtumėte tėvų ir vaikų santykius. Kai tai bus padaryta, fotoaparatas automatiškai seks jūsų kubą.

Greitas testas

Nors jūsų scena dar neturi kodo, galite išbandyti iki šiol atliktą darbą. Spustelėkite žaisti mygtuką ekrano viršuje, kad įkeltumėte žaidimą. Turėtumėte pamatyti, kaip kubas nukrenta ir nusileidžia ant lėktuvo viršaus, o kamera turėtų sekti kubą jam krentant.





2 veiksmas: nustatykite C# failą

Dabar atėjo laikas sukurti C# failą, kad galėtumėte pradėti programuoti tam tikrą judesį. Eikite į skiltį Projektas, dešiniuoju pelės mygtuku spustelėkite, užveskite pelės žymeklį ant Kurti ir sąraše pasirinkite Aplankas. Pavadinkite aplanką Skriptai ar kažkas panašaus.

Naršykite naujame aplanke ir pakartokite procesą, tačiau sąraše pasirinkite C# scenarijų. Šiam failui galite suteikti bet kokį pavadinimą, tačiau tai bus ir pagrindinės jo funkcijos pavadinimas. Įsitikinkite, kad jūsų naujasis C# atrodo taip.

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

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

    void Update() {
    }
}

3 veiksmas: naudokite C#, kad sukurtumėte judėjimą pirmyn ir atgal su greičiu

Prieš įtraukdami į scenarijaus failo funkcijas, deklaruokite kai kuriuos viešuosius kintamuosius. Pirmiausia yra standus korpusas, skirtas grotuvo modeliui laikyti. Taip pat paskelbkite plūdę, kad galėtumėte stebėti judėjimo greitį. Šie kintamieji patenka į pagrindinę klasę, už bet kokių funkcijų ribų.

 public Rigidbody rigidbody; 
public float speed;

Tada laikas prie funkcijos Pradėti pridėti vieną kodo eilutę. Tai naudoja GetComponent deklaraciją, kad kubo standžiojo kūno komponentas būtų priskirtas jūsų sukurtam standžiojo kūno kintamajam.

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

Dabar galite pridėti kodą, kuris leis jūsų grotuvo modeliui judėti. Šis kodas yra gražus ir paprastas; Jums tereikia dviejų „if“ teiginių, vieno judėjimui į priekį ir kito judėjimui atgal. Naudodami Input.GetKey galite nustatyti, kada klavišas paspaudžiamas. Šiuo atveju ieškote W ir S klavišų paspaudimų.

Paspaudus bet kurį iš šių klavišų, kubo standusis korpusas prideda jėgą naudojant standųjį kūną.AddForce. Galite apskaičiuoti pridėtinės jėgos kryptį ir greitį, padauginę jos Z ašies padėtį (transform.forward) iš greičio kintamojo. Nėra transform.backward klasės, kurią galėtumėte naudoti judėjimui atgal, bet tai galima pasiekti transform.forward padauginus iš -1.

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

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

Išsaugokite C# failą ir grįžkite į Unity. Raskite scenarijų projekto srityje ir nuvilkite jį ant simbolių modelio kubo hierarchijoje, kad priskirtumėte scenarijų tam objektui. Kai pasirenkate kubą, scenarijų turėtumėte matyti kaip komponentą inspektoriaus srityje. Spustelėkite standžiojo korpuso kintamojo langelį ir pasirinkite savo kubo standųjį korpusą.

Dabar galite naudoti mygtuką Play, kad paleistumėte žaidimą ir išbandytumėte savo kodą. Bet palauk! Yra problema; jūsų kubas riedės, o ne judės tiesiai į priekį. Grįžkite į kubo inspektorių, suraskite Rigidbody komponentą ir pažymėkite langelius „Freeze Rotation“ X ir Z ašyse prieš paleisdami žaidimą dar kartą. Dabar tai turėtų veikti.

4 veiksmas: naudokite C#, kad sukurtumėte posūkį į kairę ir į dešinę su sukimo momentu

Skirtingai nei judant atgal ir pirmyn, norint pasukti „Cube“ grotuvo modelį, reikia jėgos, vadinamos sukimo momentu. Tam reikia kito kintamojo: viešo plūdurio, kad priskirtumėte sukimo momento vertę.

 public float torque;

Kodas, skirtas sukti į kairę ir į dešinę šiame scenarijuje, yra labai panašus į kodą, naudojamą judėti pirmyn ir atgal. Yra an jeigu teiginys kiekvienai krypčiai, kurioje ieškoma, ar reikia paspausti klavišą D (pasukti į dešinę) arba klavišą A (pasukti į kairę).

kaip dvigubai transliuoti „twitch“

Pirmas žingsnis kiekviename if teiginyje yra nustatyti posūkio kryptį naudojant Input.GetAxis metodą ir priskirti rezultatą plaukiojančiam kintamajam. Po to naudokite rigidbody.AddTorque, kad pritaikytumėte sukimosi jėgą kubo simbolio modeliui, padaugindami kubo sukimo momentą, posūkį ir Z ašį.

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

Išsaugokite kodą ir grįžkite į „Unity“, kad jį išbandytumėte. Galite reguliuoti grotuvo modelio sukimosi greitį ir įsibėgėjimo laiką, pasirinkdami kubą ir scenarijuje redaguodami standaus korpuso masės, tempimo ir sukimo momento kintamuosius. Šiame pavyzdiniame projekte nustatyta 1 masė, 1 pasipriešinimas ir 2 sukimo momentai.

5 veiksmas: naudokite C#, kad užprogramuotumėte šokinėjimą

Kaip paskutinis šio Unity simbolių valdiklio elementas, laikas sukurti savo šuolį. Šuolio kūrimas yra sudėtingesnis nei kiti pagrindiniai valdikliai, su kuriais dirbote, nes šuolis turi būti riboto aukščio. Pradėkite pridėdami privatų loginį kintamąjį, kad galėtumėte stebėti, ar žaidėjas šokinėja, ar ne.

 private bool isJumping = false;

Šis kintamasis nieko nepadarys be teiginio, kad jį patikrintų. Šiuo atveju pasiteisins pagrindinis if teiginys, skirtas patikrinti, ar kintamasis yra klaidingas. Tos pačios sąlygos pridėjimas prie kito judesio, jei teiginiai neleis žaidėjui judėti šuolių metu.

 if (!isJumping) { 
}

Tos pačios sąlygos pridėjimas prie kito judesio, jei teiginiai neleis žaidėjui judėti šuolių metu.

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

Teiginyje !isJumping if jums reikia kito if teiginio, šį kartą norint patikrinti, ar nebuvo paspaustas šuolio mygtukas. Pirmas dalykas, kurį reikia padaryti šiame if teiginyje, kintamąjį isJumping nustatyti į teisingą, o po to atlikti rigidbody.angularVelocity deklaraciją, kad būtų pašalintos kubui šiuo metu taikomos jėgos.

Dabar galite naudoti standųjį kūną.AddForce deklaraciją, kad pridėtumėte jėgą kubui jo Z ašyje ir sukurtumėte šuolio judesį aukštyn. Galiausiai atėjo laikas naudoti iškvietimo deklaraciją, kad po 0,8 sekundės būtų iškviesta kita funkcija.

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

Ši funkcija grąžina kintamąjį isJumping į false, kad judėjimas / šokinėjimas vėl būtų galimas, o 0,8 sekundės delsa neleidžia jam įsijungti per anksti.

kokį telefoną turi?
 void Move_Setter() { 
    isJumping = false;
}

6 veiksmas: patikrinkite savo simbolių valdiklio kodą

Išsaugokite failą ir grįžkite į Unity, kad patikrintumėte parašytą kodą. Kaip ir dauguma kompiliatorių, Unity teikia informaciją apie klaidas ir kitas su jūsų kodu susijusias problemas, kad būtų lengviau suprasti, ką gali reikėti pakeisti. Visą šio projekto kodą galite peržiūrėti mūsų svetainėje GitHub puslapį.

Vienybės simbolių valdiklių kūrimas

Kurdami simbolių valdiklį Unity galite pasirinkti iš įvairių metodų. Fizikos naudojimas yra viena iš galimybių, tačiau, jei norite, galite naudoti ir įmontuotą simbolių valdiklio sistemą.

Įvairių tokių parinkčių tyrinėjimas yra puikus būdas sužinoti apie tokius įrankius kaip „Unity“.