În acest tutorial vă voi arăta cum să creați un simplu efect distrugător pentru jocul dvs. Unity. În loc să "ștergem" o cutie (sau orice alt obiect) atunci când este lovită sau distrusă, o putem distruge în bucăți mai mici.
Pentru acest tutorial, veți avea nevoie de cea mai nouă versiune a Unity și o experiență de bază cu ea. Pentru efectul mai avansat de mai târziu în tutorial, un instrument de modelare 3D va fi, de asemenea, necesar. Dacă nu aveți unul disponibil sau nu doriți să modelați obiectele singur, le-am inclus în descărcările sursă. (Fișierele Unity sunt de asemenea disponibile acolo.)
În versiunea de bază a acestui efect, un cub va fi distrus, lăsând mai multe fragmente în urma lui care vor cădea realist la pământ:
Mai târziu, vom schimba cubul pentru un model de baril mai complicat:
Puteți să-l încercați aici:
Faceți clic pentru a încerca demonstrația. (Demo-ul pentru cub este disponibil și aici.)Creați un nou proiect Unity și deschideți o scenă proaspătă. Creați un avion, care va acționa ca teren, și un cub, care va fi obiectul distructiv. De asemenea, așezați o lumină direcțională pentru a face lucrurile mai vizibile. Creați două materiale noi și le atribuiți podelei și cubului, astfel încât să le putem deosebi și să deplasăm camera astfel încât să se vadă totul:
Există multe modalități de a "distruge" cubul. Pentru moment, vom lua cea mai simplă abordare posibilă.
Creați un nou fișier JavaScript și denumiți-l destructionController.js
. În acest caz, vom pune toate funcționalitățile de a elimina cubul și de a crea fragmente. Adăugați următoarele linii:
funcția Update () if (Input.GetKey (Keycode.space)) Destroy (gameObject);
Acum, adăugați scriptul pe cub prin glisarea pe el. Porniți jocul și efectuați un test. Dacă apăsați spațiu, cubul trebuie șters.
După ce a fost eliminat, nu va mai apărea în ierarhie, după cum puteți vedea în screenshot.
Acum creați opt cuburi mai mici; acestea vor fi "fragmentele" cubului curent. Dați-le același material ca și cubul. (Nu vă faceți griji despre aspectul încă, vom face să arate minunat mai târziu.) Ar trebui să arate astfel:
Stivă toate cele 8 cuburi pentru a forma un cub mai mare, fără a se intersecta:
Dați fiecărui cub un corp rigid, puneți-le masa la 22
, Activati utilizați gravitatea, și dezactivați este cinematică. Acest lucru va face ca fragmentele să cadă și să folosească fizica. Dacă doriți, puteți modifica aceste valori mai târziu pentru a obține rezultate mai potrivite pentru jocul dvs..
Acum, grupați cuburile sub un nou gol gameObject
și spune-i remainsCube
. Atunci când cubul original este distrus, acesta va fi înlocuit cu acest obiect nou, realizat din cuburi mai mici.
Trageți remainsCube
obiect în dosarul proiectului pentru a face un prefabricat din acesta. După ce se află în siguranță în folderul prefabricat, șterge-l din scena principală și este gata de utilizare.
Adăugați liniile evidențiate la destructionController
script:
Var rămâne: GameObject; funcția Update () if (Input.GetKey (Keycode.space)) Instanțiate (rămâne, transform.position, transform.rotation); Distruge (gameObject);
Aceasta va crea o copie a rămășițelor la poziția exactă a cubului. După aceea, cubul va fi înlăturat, dând iluzia că cel nou este de fapt cel vechi, dar "rupt".
Pentru a obține acest lucru la lucru, trebuie să alocați manual rămășițele cubului. Faceți clic pe el, și în Inspector ar trebui să vedeți o filă care să conțină Controlul distrugerii script-ul. Ar trebui să existe un slot numit rămășițe, care ar trebui să fie în prezent gol. Trageți rămășițe
prefab în dosarul proiectului în acest slot. Controlul distrugerii scenariu în Inspector ar trebui să arate astfel:
Faceți un test de alergare! Dacă totul este configurat corect, atunci când apăsați spațiul, rămășițele trebuie să înlocuiască cubul. Dacă aveți noroc, atunci ar trebui să cadă la pământ.
Deci, acest cub de bază:
... ar trebui să se transforme în ceva similar cu acesta:
Din nefericire, nu este garantat ca fragmentele se vor schimba frumos. Din fericire, există modalități de a rezolva asta.
Creați un nou gol gameObject
și să-i dau un sferă de coliziune, dar nici un corp rigid. Trageți rămășițele în scenă, pentru a le putea edita. Adăugați obiectul de coliziune a sferei la resturile și plasați-l astfel încât să se intersecteze cu unele dintre cuburi:
Acum, fragmentele se vor ciocni imediat cu sfera, creând un efect tambur:
În funcție de jocul pe care îl construiți, nu ne putem permite prea multe "așchii" deodată într-o scenă. Soluția directă este să le ștergeți după câteva secunde. Pentru a face acest lucru, creați un nou fișier JavaScript și denumiți-l selfDestruct.js
. Introduceți codul următor:
funcția Start () randament WaitForSeconds (4.0); Distruge (gameObject);
Când obiectul este creat, acesta va aștepta patru secunde, apoi se va șterge. Adăugați acest cod la rămășițe
obiect. Dacă acum distrugeți cubul și creați fragmentele, rămășițele se vor distruge după patru secunde.
Si asta e! Acum aveți elementele de bază pentru a avea în mod eficient un obiect "sparge" în mai multe bucăți mai mici atunci când este distrus. Puteți utiliza acest efect ca-este, dar să-l luăm puțin mai departe și să vedem cum să îl folosim cu un obiect mai complex.
Acum că avem sistemul de bază în loc, îl putem face mai drăguț prin înlocuirea cuburilor cu obiecte reale.
Dacă sunteți un adept într-un instrument de modelare 3D, vă puteți crea propriile obiecte. Dacă nu, sau dacă nu aveți una disponibilă, puteți obține fișierul 3D pregătit de la sursa de descărcare.
Copiați fișierul în folderul de materiale și modelele 3D vor fi importate automat pentru utilizarea dvs. Înainte de a le utiliza, faceți clic pe fișierul din Asset Explorer și asigurați-vă că fișierele sursă sunt importate corect la un factor de scară de 1
(nu 0.1
sau 0,001
; care complică doar lucrurile).
Dacă vă uitați la obiecte, puteți vedea un câmp numit meshfilter în Inspector. Dacă faceți clic pe el, veți obține o listă cu toate ochiurile disponibile în proiect. Acum înlocuiți toate cuburile din cuburile rămase cu piese de butoi.
Cubul intact devine butoi
plasă; fragmentele cubului mai mici au nevoie de ochiuri barrel_fragment_01
la barrel_fragment_08
. După ce aceștia sunt desemnați, stabiliți pozițiile lor locale (0, 0, 0)
. (Punctele lor de pivotare au fost stabilite astfel încât să poată fi ușor zeroate în acest fel.)
În loc de o coliziune a cutiei, un collider de ochiuri ar fi mult mai convenabil. Îndepărtați toate colizoarele de pe cutiile de pe fragmente și înlocuiți-le cu colizoarele de ochiuri. Verificați fiecare coliziune a ochiului de plasă și asigurați-vă că fiecare are plasa corectă aplicată (adică, barrel_fragment_01
are nevoie de barrel_fragment_01
plasă și așa mai departe).
Odată ce acest lucru este făcut, setați toate colizoarele de ochiuri la convex
. (Un cilindru neconvexiu al ochiurilor nu poate intra în coliziune cu alți colțari neconvexe din ochiurile de plasă. Este un lucru de programare.) De asemenea, eliminați aglomeratorul de sferă pe care l-am adăugat la resturile, deoarece s-ar putea să nu fie necesar.
Totul este configurat corect, ar trebui să aveți un butoi care va apărea în opt bucăți mai mici.
Același sistem poate fi de asemenea folosit pentru a adăuga alte efecte la distrugere. Ai o explozie? Adaugă-l la resturile! Adaugă sunete, pentru o satisfacție sparge. Puneți un efect de particule acolo, creând un mic puf de fum.
În acest tutorial v-am arătat cel mai simplu mod de a face ca un obiect să se împrăștie în fragmente mai mici. Acum știi cum să distrugi un obiect, să îl elimini din joc; cum să schimbați obiectul cu fragmente mai mici chiar înainte de distrugerea lui; și cum să se auto-distrugă fragmentele după aceea.
Acest sistem poate fi modificat și adaptat pentru a se potrivi mai multor scopuri specifice. Ai putea avea o cușcă sau un cilindru și sparge-te când te împușcă. S-ar putea crea o explozie după ce un avion a fost lovit. Sau ai putea avea o barcă în două piese. se bucura!