Despre crearea unui platformer pentru unitate

De la ultimul articol din serie suficient timp a trecut (ca și cu articolele sale anterioare - chiar mai mult), așa că e timpul să vină înapoi și să vă spun cum să facă partea cea mai perfidă și ticăloase de orice joc de calculator - dușmani. Voi face o rezervare în avans: aici nu vom lua în considerare crearea inteligenței artificiale pentru oponenții personajului tău. Să ne uităm la ce tipuri de adversari sunt cele mai frecvente în platformeri și cum să le punem în aplicare cu Unitatea.







Despre crearea unui platformer pentru unitate

Cu grijă, sub tăiat încă o mulțime de gifok!

Disclaimer: Codul afișat în articol nu este un model de model, un exemplu de cod ideal și alte lucruri ficționale și inexistente în natură. Practicile folosite în articol pot fi una dintre multele soluții la o anumită problemă. Și poate că nu sunt.

Deci, hai să mergem. Am identificat patru tipuri de obiecte de bază care pot împiedica cumva eroul jocului dvs. să atingă scopul:

1) statice (ferăstraie rotative, blocuri "mortale" etc.)

Despre crearea unui platformer pentru unitate

2) Plimbarea pe platforme (ciuperci și broaște țestoase de la Super Mario Bros)

Despre crearea unui platformer pentru unitate

3) Flying (cuiburi de la Ghosts și Goblins de nivelul al doilea)

Despre crearea unui platformer pentru unitate

4) fotografiere (Bauzha din castelul lui de același Mario)

Despre crearea unui platformer pentru unitate

Totuși există șefi, dar ei pot combina toate tipurile de mai sus, așa că nu vom vorbi despre ei.

1) Obstacole statice.
Vom face un fierăstrău rotativ. Pentru a pune în aplicare un astfel de "inamic", aveți nevoie de câteva lucruri - sprite-ul fișierului și scenariul care îl va roti. Nu mai repede decât să fii făcut.

Trageți sprite pe scena:

Creați un script nou (acesta este, ca de obicei, foarte simplu)

Și adăugați codul care arată cam așa:


Viteza variabilei publice specifică viteza de rotație. Este important să rețineți că o valoare pozitivă rotește ferăstrăul în sens invers acelor de ceasornic și o valoare negativă se rotește în sensul acelor de ceasornic.

Acum, pentru a interacționa cu un ferăstrău, pentru a adăuga la ea unele Collider (descrise în detaliu în cele mai interesante părți ale precedentului) și de a schimba obiectul tag-ul la orice adecvat într-o situație dată.

Etichetele sunt un lucru bun. Putem atribui o etichetă jucătorului jucătorului, eticheta inamicului inamic și pereții și podeaua. După această procedură simplă, verificarea lucrurilor pe care le întâmpinăm, de exemplu, se va întâmpla mult mai ușor. Și puteți găsi un obiect (sau tot ce este pe scenă) cu o anumită etichetă. Acest lucru se face aproximativ în felul următor:

O gamă de obiecte cu o etichetă dată poate fi obținută folosind metoda FindGameObjectsWithTag - este mai ușor de nicăieri.







Să ne întoarcem la ferăstraie și să creăm o nouă etichetă pentru dușmanii din joc.

În scriptul personajului adăugăm următoarea verificare


După cum puteți vedea, totul este elementar: verificăm coliziunea, verificăm eticheta a ceea ce am întâlnit. Dacă totul este rău, reporniți nivelul. Sau luăm viața. Sau ceva de genul asta. Ai jucat jucători de poker, nu-i așa?

Iată cum arată în final:

Deci, pur și simplu, am creat primul dușman - care, desigur, nu este un dușman, ci un obstacol. Mergem mai departe.

2) Plimbare, târâtori și alți dușmani care se deplasează pe platforme.
Un cititor nepregătit ar putea crede că acest tip de inamic este mai dificil de implementat decât primul. Mă grăbesc să liniștesc - nu este așa. Ca și în cazul precedent, avem nevoie de niște sprite, un ciocnitor pe acesta, un scenariu și o platformă pe care toate acestea se vor mișca. În această listă mică, numai rigidbody2D va fi adăugat, astfel încât inamicul va fi acționat de fizică și vă puteți stabili viteza.

Din nefericire, nu pot să desenez și talentul meu creativ era suficient doar pentru un astfel de ticălos:

Despre crearea unui platformer pentru unitate

Pentru ao muta, utilizați următorul script

Setați viteza și direcția mișcării inamicului (-1 - stânga, 1 - dreapta), care pot fi schimbate atunci când coliziunea cu pereții, de exemplu. În continuare pur și simplu - setați viteza orizontală, egală cu produsul valorii vitezei și direcției.

Faptul amuzant - dacă puneți un FixAngle dummy fixedbody2D, atunci dușmanul se va târî, iar dacă veți elimina, atunci


"Dar el arată spre dreapta și se mută spre stânga" - cititorul atent va observa. Să rezolvăm această problemă și vom deschide sprite în funcție de direcția de mișcare:


Și vom învăța cum să ne descurcăm într-o coliziune cu un zid. Pentru a face acest lucru, vom face cateva pereti cu eticheta de perete la nivel si vom scrie procesul de coliziune. Iata aceasta:


Acum că totul este în loc, rezultatul final va arăta astfel.

Rămâne doar să adăugăm o etichetă înfruntată inamicului, astfel încât să devină periculoasă pentru personajul nostru.

Să însumăm subtotal. Am analizat modul în care sunt create două tipuri de "dușmani" în platformele 2D: statice și în mișcare în nivel. După cum puteți vedea, acest lucru este foarte simplu și implementarea de bază durează foarte puțin timp.

În următoarea parte, vă voi spune cum să creați celelalte două tipuri de dușmani - zbor și împușcare.
Stay tuned - va fi interesant!

Mai multe link-uri utile

În nici un caz nu ar trebui să fie posibilă rotirea sau mutarea coliziunilor fără solide. Acest lucru determină re-crearea lor și renumărarea completă a tuturor fizicii în cadrul. De asemenea, nu puteți muta substanțele solide prin transformările lor. Nu puteți observa acest lucru pe un singur ferăstrău, dar deja câteva sute vor pune orice dispozitiv mobil pe genunchi. Adăugați un material cinematic solid la ferăstrău, opriți gravitația și corectați scriptul:

Singura variantă permisă de rotație a unui obiect cu un colizor


Fără un profiler, cauza viitoarelor frâne nu va fi evidentă deloc. Verificați 240 de ferăstraie. Stânga - implementarea dvs. În mijlocul ferăstrăului cu un solid, dar rotația prin transformare. În dreapta este realizarea mea.

Diferite diferențe de performanță

În acest caz particular, există o alternativă mai rapidă - a face statică a văzut un obiect cu acceleratorul, dar fara sprite, adauga la copiii unui alt obiect, dar cu Sprite și rotiți numele lui. Dar puteți uita că corpul nu se poate mișca, să adauge niște ferăstraie rotative în mișcare și să fugă în aceeași eroare ...

(Îmi cer scuze pentru faptul că fac vangovat, pot trimite fragmente de fișiere sursă numai seara)

După cum înțeleg, ambele planete și obiectele pe care le aveți - corpuri solide și nu doar coliziuni. Un corp solid nu poate fi un copil al unui corp solid și, în același timp, se comportă normal - părintele va "domina" într-un mod imprevizibil, astfel încât nu ați mostenit moștenirea.
MovePosition și MoveRotation efectua teleportarea în esență fizică pentru un singur cadru, care se aplică numai în cazuri foarte simple sau foarte sintetice, cum ar fi un ferăstrău sau o mișcare de rotație în jurul nivelului de jucător. Ie Dacă corpurile voastre solide sunt cinematice și urmați regulile simplificate de simulare. Viteza, forța, fricțiunea sunt concepte mai complexe și pot fi rupte în timpul teleportației. Dacă intenționați să utilizați cu MovePosition MoveRotation și doriți să aveți puterea și viteza - va trebui să scrie pentru a le folosind propriul addForce, addVelocity itp deoarece disponibile se pot comporta imprevizibil strâmb.
Dacă aveți nevoie doar să înceapă să cadă frumos de pe planetă, deoarece acestea trec prin - adăugați forță în direcția centrului său în OnTriggerStay2D - aceasta va fi cea mai bună soluție. Dacă aveți nevoie pentru a merge pe orbită și țineți pe ea, în timp ce încă folosind motorul de fizica ... totul va fi mult mai dificil de a avea pentru a obține cărți școlare pe fizică și acest lucru este un subiect pentru un alt articol.
Cred că în săptămâna am să scriu un articol despre lupta mea cu fizica în Unitate ... în fizica jocului nostru se folosește foarte bine și motorul nu era în mod clar pregătit pentru astfel de construcții.







Articole similare

Trimiteți-le prietenilor: