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
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.
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 objektasir 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 objektasir 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į korpusą, 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.
naudojant Sistema. Kolekcijos;
naudojant Sistema. Kolekcijos. Bendrasis;
naudojant UnityEngine;viešasklasėCharacter_Control: MonoElgesys {
tuštumaPradėti() {
}
tuštumaAtnaujinti() {
}
}
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ų.
viešas Rigidbody standus korpusas;
viešasplūdė greitis;
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.
tuštumaPradėti() {
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. Galite naudoti įvestį. GetKey, kad nustatytų, kada klavišas paspaudžiamas. Šiuo atveju ieškote W ir S klavišų paspaudimų.
Paspaudus bet kurį iš šių klavišų, naudojant standųjį korpusą kubo standusis korpusas prideda jėgos. 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.
jeigu (Įvestis. GetKey("w")) {
tvirtas kūnas. AddForce (transform.forward * speed);
}
jeigu (Įvestis. GetKey("s")) {
tvirtas kūnas. AddForce((transform.forward * -1) * greitis);
}
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ę.
viešasplūdė sukimo momentas;
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ę).
Pirmasis kiekvieno if teiginio žingsnis yra posūkio krypties nustatymas naudojant įvestį. GetAxis metodą ir priskirkite rezultatą plaukiojančiam kintamajam. Po to naudokite standųjį korpusą. AddTorque, kad sukimosi jėga būtų pritaikyta kubo simbolio modeliui, padauginus kubo sukimo momentą, posūkį ir Z ašį.
jeigu (Įvestis. GetKey("d")) {
plūdė posūkis = įvestis. GetAxis("Horizontalus");
tvirtas kūnas. AddTorque (transform.up * sukimo momentas * posūkis);
}
jeigu (Įvestis. GetKey("a")) {
plūdė posūkis = įvestis. GetAxis("Horizontalus");
tvirtas kūnas. AddTorque (transform.up * sukimo momentas * posūkis);
}
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.
privatusbool isšokinėja = klaidinga;
Š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.
jeigu (!yra šokinėja) {
}
Tos pačios sąlygos pridėjimas prie kito judesio, jei teiginiai neleis žaidėjui judėti šuolių metu.
jeigu (Įvestis. GetKey("w") && !yra šokinėja) {
tvirtas kūnas. 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į korpusą. AddForce deklaracija, skirta pridėti jėgą kubui jo Z ašyje, sukuriant šuolio judesį aukštyn. Galiausiai atėjo laikas naudoti iškvietimo deklaraciją, kad po 0,8 sekundės būtų iškviesta kita funkcija.
jeigu (!yra šokinėja) {
jeigu (Įvestis. GetKeyDown("erdvė")) {
isšokinėja = tiesa;
tvirtas kūnas. AddForce (transform.up * greitis * 120);
rigidbody.angularVelocity = Vector3.zero;
Invoke ("Move_Setteris", 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.
tuštumaMove_Setteris() {
isšokinėja = klaidinga;
}
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“.