Unity è un motore di gioco ben noto, ben documentato e molto riconosciuto. È una soluzione multipiattaforma e consente anche di creare giochi o applicazioni rivolti a diverse piattaforme (iOS, Android, Web e PC, tra gli altri). Originariamente, Unity era focalizzata sullo sviluppo 3D, ma le versioni recenti forniscono strumenti per lo sviluppo 2D.
Unity è un'ottima scelta per gli aspiranti sviluppatori di giochi, poiché funziona per la maggior parte delle piattaforme mobili, desktop e console e, ancora meglio, è gratuito da utilizzare per sviluppatori e studi a reddito inferiore.
Uno dei componenti chiave di Unity sono i giunti fisici. Queste articolazioni hanno proprietà fisiche (come suggerisce il nome) e consentono di creare diverse connessioni tra gli oggetti all'interno della scena.
Usando le articolazioni, puoi descrivere una connessione tra due oggetti, il che significa che puoi simulare la fisica di quasi tutti gli oggetti multiparte che puoi immaginare, tra cui porte, piattaforme scorrevoli, catene o persino palle da demolizione!
Questo tutorial si concentrerà sulla spiegazione di come funzionano le articolazioni della fisica 2D e su come usarle per ottenere grandi effetti (senza sacrificare le prestazioni del gioco).
Prerequisiti
Innanzitutto, assicurati di avere l'ultima versione di Unity, che puoi scaricare qui. In questo tutorial stiamo usando la versione 5.4.1f1. Assicurati di utilizzare l'ultima versione di Unity; altrimenti potresti avere problemi seguendo il tutorial e usando i giunti fisici.
Prima di iniziare, vorrei anche ringraziare Ryukin Studio per averci fatto utilizzare il loro pacchetto Platform Platform Art 2D - Demo per questo tutorial.
Quindi, scarica il Unity2DJointsStarter file. Decomprimere e aprire il progetto in Unity. La scena Demo dovrebbe aprirsi automaticamente, ma in caso contrario, puoi aprirla da quella del progetto Scena cartella.
La scena dovrebbe apparire come segue:
Come puoi vedere, abbiamo un personaggio e diverse piattaforme statiche posizionate attorno alla scena. L'idea alla base di questo tutorial è quella di creare un piccolo gioco di piattaforma 2D usando le giunzioni 2D per creare ostacoli da superare per il giocatore. Durante questo tutorial, potrai provare tutti i tipi di giunto 2D di Unity e vedere come funzionano, ad eccezione del Articolazione della ruota 2D.
Se premi play, vedrai che tutte le funzionalità di base del gameplay per il gioco sono già state implementate. Puoi usare le frecce della tastiera per spostare il carattere e il tasto della barra spaziatrice per saltare.
La giunzione a distanza consente a uno sprite controllato dalla fisica 2D di ruotare attorno a un punto specifico, mantenendo una certa distanza da quel punto. Userai la distanza 2D per creare il primo ostacolo, una lama oscillante. Crea un nuovo GameObject nel Posizione (4,75, -1,25, 0) e chiamalo Lama.
Quindi, espandere il GameAssets cartella e apri il piattaforme cartella. Lì troverai diversi prefabbricati usati per creare le piattaforme di livello. Trascina il Platform6 prefabbricato dalla cartella e rilasciarlo sopra il Lama GameObject. Questo lo renderà figlio di quell'oggetto.
Ora è necessario modificare alcune proprietà di questo nuovo oggetto di gioco. Innanzitutto, cambia il Platform6 nome a piattaforma e quindi la sua posizione a (-0.07042211, 3.60032, 0). Ora imposta il Ordine nel livello a 3 nel Sprite Renderer componente.
Dentro il Box Collider 2D, disabilitare il Usato da Effector parametro e rimuovere l'allegato Platform Effector 2D componente. Infine, aggiungi un Rigidbody 2D, impostato È cinematico a vero, e girare Rotazione del congelamento avanti Z.
La piattaforma che manterrà la lama è pronta. È ora di aggiungere la lama stessa. Dentro il Risorse gratuite \ Sprite cartella, selezionare il AxeBlade sprite e trascinalo sopra Lama GameObject, creazione di un nuovo figlio.
Come probabilmente avrai notato, lo sprite è troppo grande e non è nel posto giusto. Cambiare il Posizione a (-0,11, 3,56, 0) e il Scala a (0,5, 0,5, 1). Inoltre, imposta il Ordine nel livello a 2.
Prima di poter far funzionare la lama, è necessario aggiungere diversi componenti. Inizia aggiungendo a Poligono Collider 2D e a Rigidbody 2D. Assicurarsi che il Massa è impostato per 10.
Ora sei pronto per aggiungere il Distanza Joint 2D. Aggiungi il Distanza Joint 2D componente. Come puoi notare, questo nuovo componente ha diversi parametri che puoi regolare per produrre il miglior risultato per il tuo gioco.
Non temere, imparerai presto cosa fanno tutti questi parametri e come puoi regolarli. Noterai anche che una volta che hai il componente collegato al AxeBlade, una linea verde si estende dal AxeBlade al centro dello schermo. Questo è il punto di origine, il Ancoraggio connesso proprietà.
Esegui la scena, tenendo d'occhio la lama. Subito, noterai che la lama vola attraverso lo schermo finché non si ferma vicino al punto di origine, quindi inizia a rotolare avanti e indietro sul giunto. Dovrai risolvere questo problema.
Rivolgi la tua attenzione al Distanza Joint 2D componente nel Ispettore. Il primo parametro è Abilita collisione. Questo determina se i due oggetti collegati dal giunto possono o meno collidere tra loro. In questo caso, non vuoi che ciò accada, quindi lasciatelo deselezionato.
Il secondo parametro è Corpo rigido connesso. Mentre un'estremità della giunzione di distanza rimane sempre collegata all'oggetto che contiene il componente, è possibile utilizzare questo campo per passare un riferimento a un oggetto per l'altra estremità della connessione del giunto. Se lasci vuoto questo campo, Unity connetterà semplicemente l'altra estremità del giunto a un punto fisso nella scena.
Vuoi connetterti AxeBlade a piattaforma in questo caso, quindi trascina piattaforma al Corpo rigido connesso campo.
Con la connessione impostata e AxeBlade ancora selezionato, ora dovresti vedere i due oggetti collegati dal giunto nel Scena vista. È possibile controllare la connessione cambiando il Y valore del AxeBlade. nondimenticareimpostare il AxeBlade Posizione torna a (-0,11, 3,56, 0) una volta che hai finito di giocarci.
Il prossimo parametro del componente è Auto Configure Anchor collegato. È necessario selezionare questa casella se si desidera che Unity imposti automaticamente il punto di ancoraggio per l'altro oggetto a cui questo raccordo si connette. Qual è l'ancora, potresti chiedere? Bene, ne parleremo tra un momento, ma per ora, devi imparare che il punto di ancoraggio può essere impostato manualmente o automaticamente (da Unity).
In questo caso, si desidera lasciare deselezionato questo campo, poiché si procederà all'impostazione manuale dell'ancora.
Il seguente parametro è Ancora. Questo indica dove il punto finale del giunto si attacca al GameObject come specificato nello spazio delle coordinate locali dell'oggetto. Nel Scena vista, con AxeBlade selezionato, è possibile vedere il punto di ancoraggio come un cerchio blu non centrato centrato su AxeBlade. Lascia il valore predefinito non modificato (0, 0).
Si noti che il cerchio blu non riempito che rappresenta il primo punto di ancoraggio del giunto può apparire pieno se al momento si dispone del Trasformare strumento selezionato nel Scena vista. Allo stesso modo, vedrai un quadrato bianco se hai il Scala strumento selezionato. In entrambi i casi, spostando l'ancora lontano da (0, 0) mostrerà che è effettivamente un cerchio vuoto.
Il Ancoraggio connesso parametro specifica il punto di ancoraggio dell'altra estremità del giunto. Se la Corpo rigido connesso il campo è vuoto, questo valore è nel sistema di coordinate della scena. Tuttavia, quando Corpo rigido connesso è impostato, come è ora, il Ancoraggio connesso le coordinate si riferiscono allo spazio di coordinate locali del corpo rigido collegato. Questo punto di ancoraggio appare nell'immagine sopra come un solido cerchio blu centrato sul piattaforma oggetto del gioco. Ancora una volta, puoi lasciare questo valore a (0, 0).
Come con il Ancora parametro, puoi consentire a Unity di impostare automaticamente la distanza del giunto abilitando il Auto Configura Distanza campo. Quando questa opzione è attiva, Unity rileva automaticamente la distanza tra i due oggetti e la imposta come distanza che il giunto mantiene tra loro. Nel nostro caso specifico, vogliamo questa funzione.
Il Distanza parametro, come suggerisce il nome, indica la distanza da mantenere tra entrambi gli oggetti. Indietro nel Scena vista, puoi vedere una piccola linea verde che interseca la linea che collega i due oggetti. Questo può essere facilmente visto se sposti l'oggetto AxeBlade dal piattaforma, come nell'immagine qui sotto.
Questa linea indica la distanza imposta dal giunto. Quando si esegue la scena, il giunto si sposterà AxeBlade In modo che la Ancora hai definito è nel punto in cui la piccola linea è. È possibile aumentare o diminuire questo valore ruotando Auto Configure Joint off. Ricorda di impostare il AxeBlade posizione di nuovo a (-0,11, 3,56, 0) una volta che hai giocato con i suoi valori. Anche la configurazione automatica della distanza deve essere controllata.
Il prossimo parametro è Distanza massima solo. Se abilitato, il giunto applicherà solo una distanza massima, il che significa che gli oggetti possono avvicinarsi l'un l'altro, ma mai più lontano del valore specificato nel Distanza campo. In questo esempio, si desidera che la distanza sia corretta, quindi lasciare questo parametro deselezionato.
Infine, l'ultimo parametro è Break Force. Qui puoi specificare il livello di forza che vuoi usare per rompere il giunto. In sostanza, se viene raggiunto il livello di forza, il giunto verrà eliminato e la connessione tra i due oggetti scomparirà. Quando il valore è impostato su Infinito, significa che il giunto è indistruttibile. Per questo scenario, vuoi che sia indistruttibile, quindi lascia il campo così com'è.
Dal momento che vuoi far oscillare la lama come un pendolo, cambiala Rotazione a (0, 0, 310).
Adesso, premi Giocare, e vedrai il AxeBlade appeso al piattaforma.
Ok, quindi la lama oscilla, ma quando colpisce il giocatore, non succede nulla. Vuoi uccidere il giocatore e farlo riavviare all'ultimo checkpoint. Per fare questo, andare al GameAssets cartella e apri il Script cartella. Prendi il Lama script e aggiungilo al AxeBlade. Se si preme Giocare di nuovo, il giocatore dovrebbe morire quando la lama colpisce.
La configurazione finale è la seguente:
Per finire, prendi il Lama GameObject dal Gerarchia e rilasciarlo nel ostacoli cartella. Questo creerà un prefabbricato della lama oscillante.
Il Giunto a cerniera 2D componente consente a un oggetto GameObject controllato dalla fisica del corpo rigido di essere collegato a un punto nello spazio attorno al quale può ruotare. La rotazione può avvenire in risposta a una collisione o essere avviata da una coppia del motore fornita dal giunto stesso. Puoi e dovresti stabilire dei limiti per evitare che la cerniera compia una rotazione completa.
Per apprendere le basi del giunto a cerniera, creerai un meccanismo a doppia botola dove il giocatore deve scendere per continuare il livello. Facciamolo!
Aggiungi un nuovo GameObject vuoto, chiamalo Cerniera, e posizionarlo nel Posizione (18,92, 0, 0). Quindi, apri il Assets \ Free Assets \ Sprites e trascina due MetalPlatform sprite nel Cerniera GameObject. Dai un nome al primo HingePlat1 e il secondo HingePlat2.
Mettili uno di fianco all'altro; il HingePlat1 dovrebbe essere collocato a Posizione (0, 0, 0) e il HingePlat2 a (2,5, 0, 0). Cambiare il Ordine nel livello di entrambi 2.
Per aggiungere il Giunto a cerniera 2D componente, è necessario aggiungere due componenti aggiuntivi agli sprite. Seleziona il HingePlat1 e aggiungere un Box Collider 2D e a Rigidbody 2D. Sotto il Rigidbody 2D parametro, controllare il È cinematico proprietà. Ora, ripetere gli stessi passaggi per il HingePlat2 (senza controllare la proprietà Is Kinematic).
Si può anche notare che il Taglia del Box Collider 2D è più grande del HingePlat1 sprite, portando così a un rilevamento di collisione scorretto tra il giocatore e la piattaforma. Per risolvere il problema, modificare la proprietà Taglia (dentro Box Collider 2D) di entrambi HingePlat1 e HingePlat2 a (2,45, 0,5).
Questo HingePlat2 sarà la botola iniziale. Pertanto, è necessario assegnare un nuovo componente chiamato Giunto a cerniera 2D. Questo componente ha diverse nuove proprietà; copriremo solo quelli nuovi.
Abilita collisione significa che i due oggetti connessi possono collidere tra loro. Corpo rigido connesso specifica dove si trova l'altro oggetto a cui si connette questo giunto. Aggiungi il HingePlat1 in questo campo. Usa motore specifica se il motore della cerniera deve essere abilitato. Dovresti controllare questa proprietà. Velocità del motore specifica la velocità del motore target in gradi / sec. Impostalo su -100 (per tornare alla posizione originale dalla posizione verso l'alto).
Forza motore massima rappresenta la coppia massima (o rotazione) che il motore può applicare durante il tentativo di raggiungere la velocità target. Dovresti impostarlo su 25. Usa i limiti, come suggerisce il nome, rappresenta la soglia limite dell'angolo di rotazione. Controllalo!
Angolo inferiore è l'estremità inferiore dell'arco di rotazione consentito dal limite, mentre Angolo superiore è l'estremità superiore dell'arco di rotazione consentito dal limite. Cambiare il Angolo superiore a 60. Rompere coppia è simile a Break Force e specifica il livello di rotazione necessario per interrompere ed eliminare il giunto. Di nuovo, Infinity significa che è infrangibile.
Ora deseleziona il Configura connessione automatica. È necessario impostare il Ancora e Ancoraggio connesso manualmente. Il primo dovrebbe essere impostato su (-1.12,0), e il secondo a (1.09,0). La tua scena dovrebbe ora assomigliare alla seguente immagine:
Il finale HingePlat2 la configurazione è:
Esegui il tuo gioco e testiamo la prima botola.
Se tutto è a posto, è ora di andare avanti e creare la seconda botola. La procedura è esattamente uguale alla descrizione di cui sopra; l'unica differenza sta nei dettagli di configurazione del Giunto a cerniera 2D. I passaggi principali sono:
Esegui il tuo gioco e testiamo la doppia botola.
Dal momento che vogliamo forzare il giocatore a passare attraverso la doppia botola, dobbiamo creare dei muri attorno ad esso. Seleziona il Cerniera GameObject e dal Assets \ Free Assets \ Sprites cartella aggiungere sei MetalPlatform nel Cerniera GameObject. Dai loro nome wall1 a Wall4 e cambia il Ordine nel livello a 2.
Posiziona il wall1 nel Posizione (-0,9, -1,43, 0) e cambia il Rotazione Z a 90. Il restante deve essere configurato come segue:
Posizione Muro2: (-0,9, -3,8, 0), Rotazione Z: 90
Posizione 3: (8.2, 1.55, 0), Rotazione Z: 90
Posizione4: (8.2, 3.95, 0), Rotazione Z: 90
Ora, per ogni muro dovresti aggiungere un componente aggiuntivo, a Box Collider 2D. Per ciascuno Box Collider 2D cambiare il Taglia a (2,21, 0,63). Quindi aggiungere un Platform Effector 2D a ogni muro e impostare il Arco di superficie a 360 e il Arco laterale a 180. Torna al Box Collider 2D e girare Usato da Effector sopra.
Il risultato finale dovrebbe essere simile a:
Infine, trascina il Cerniera GameObject nel GameAssets \ Ostacoli cartella per creare il tuo secondo prefabbricato.
Il Joint Target 2D si collega ad un bersaglio specifico, piuttosto che ad un altro oggetto di corpo rigido, come normalmente fanno altri giunti. Applicheremo questo giunto per creare una piattaforma di ostacoli che si muova verso l'alto e verso il basso.
La prima cosa che devi fare è creare la piattaforma stessa. Sul Risorse / Sprites gratuiti cartella, lì troverai il MetalPlatform sprite. Trascinalo e posizionalo sulla scena.
Cambia il suo nome in RisingPlatform e la sua Posizione a (35, -6, 0), e impostare il Ordine nel livello a 2. Hai bisogno di alcuni componenti per farlo funzionare. Aggiungere un Rigidbody 2D e a Box Collider 2D. Quindi, imposta il Massa a 20 e controllare Blocca posizione X e Blocca rotazione Z. Sul Box Collider 2D, assicurati che il Taglia è impostato per (2,35, 0,55). Infine, imposta il Scala di gravità a 0 in modo che l'oggetto non sia influenzato dalla gravità.
I componenti di base sono ora pronti. È giunto il momento per te di aggiungere il Target Joint 2D componente. Come già detto, il Target Joint 2D non si collega a un altro oggetto con un corpo rigido; invece, si collega a un obiettivo specifico. Questo è un giunto a molla e può essere usato per raccogliere e spostare oggetti che agiscono sotto gravità, come la nostra piattaforma mobile.
Diamo un'occhiata più da vicino al componente stesso. Il Ancora funziona esattamente come nei giunti precedenti, quindi non c'è bisogno di spiegarlo. Il Bersaglio imposta le coordinate del mondo verso le quali i comuni tentativi di movimento. Questo è un campo molto importante, dal momento che questo giunto cercherà di mantenere zero la distanza lineare tra il Ancora e il Bersaglio punti. Per questo esempio, vuoi il Bersaglio essere (35, -6).
Quindi, hai Auto Configura Target. Se questa proprietà è abilitata, il comune calcolerà il target da solo. Se lasci questa opzione attiva, la mira cambierà man mano che la piattaforma si sposta. Dato che non vuoi che ciò accada, lascia questa casella deselezionata (deseleziona Auto Configura Target).
Quello che segue è Forza massima; qui imposti la forza che l'articolazione può applicare mentre cerchi di raggiungere la posizione di destinazione. Impostare questo valore su 80.
Il Rapporto di smorzamento è il grado in cui si desidera sopprimere l'oscillazione della molla. Questo valore può andare da 0 a 1, dove 1 significa nessun movimento. Vuoi che la piattaforma si muova liberamente, quindi imposta questo campo su 0. Quindi, hai Frequenza che, come suggerisce il nome, imposta la frequenza con cui la molla oscilla durante il tentativo di raggiungere il bersaglio. Impostare questo parametro su 5.
Infine, l'ultimo è Break Force, che è identico ai giunti precedenti, quindi lascia che il valore rimanga al suo valore predefinito.
Dal momento che vuoi che la tua piattaforma continui a muoversi nel tempo, devi cambiare il Bersaglio posizione di volta in volta. Fortunatamente, hai già lo script per gestirlo. Vai al Script cartella, trova il Script TracktorPlatform, e aggiungilo al tuo oggetto di gioco. Impostato Target A a (35, -6) e B target a (35, 0). Il Tempo dovrebbe essere 2.
Alla fine, il tuo componente dovrebbe assomigliare a questo:
Se si preme Giocare, dovresti essere in grado di vedere l'articolazione bersaglio risultante che funziona come previsto. Non dimenticare di creare un prefabbricato, come hai fatto con gli ostacoli precedenti, e posizionarlo nel ostacoli cartella.
Il giunto fisso 2D è usato per mantenere due oggetti controllati dalla fisica del corpo rigido l'uno rispetto all'altro. Pertanto, entrambi gli oggetti sono sempre sfalsati in una data posizione e angolo.
Per usare questo giunto, creerai una piattaforma di metallo che può essere mossa solo quando il giocatore muove un magnete ad esso collegato. Il giocatore dovrà spingere il magnete per rimuovere la piattaforma dal suo cammino e quindi progredire sul livello.
Inizia creando un GameObject vuoto, nominalo MagnetPlatform, e impostare il suo Posizione a (41,81, 5,22, 0). Quindi, prendi il Magnete sprite dal sprites cartella e rilasciarlo sopra MagnetPlatform. Impostare il Magnete Posizione a (0,55, 3,15, 0) e il Ordine nel livello a 3.
Quindi, aggiungere un Rigidbody 2D componente e a Circle Collider 2D. Impostare il Massa a 200 e girare Blocca rotazione Z sopra. Assicurati che il Raggio sul Circle Collider è impostato per 0.4. Alla fine, il tuo Magnete dovrebbe assomigliare a questo:
Ora, dal sprites cartella, trascina il MetalPlatform sprite nel MagnetPlatform GameObject. Impostare il Posizione del MetalPlatform a (0,57, -1,73, 0), il Rotazione a (0, 0, 90), e il Scala a (2, 1, 1). Impostare il Ordine nel livello a 3.
Quindi, aggiungere i seguenti componenti: Rigidbody 2D, e a Box Collider 2D. Sopra Rigidbody 2D, impostare il Massa a 1000 e abilitare Blocca rotazione Z. Finalmente, via BoxCollider 2D, impostare il Taglia a (2,31, 0,52).
Ora che tutto è pronto, è giunto il momento di configurare il giunto fisso 2D e stabilire la connessione tra il magnete e la piattaforma metallica. Con MetalPlatform selezionato, aggiungi il FixedJoint 2D componente.
Questo nuovo giunto consente a due oggetti di gioco con un corpo rigido di mantenere uno spostamento relativo lineare e angolare l'uno rispetto all'altro. In questo caso, vuoi che la piattaforma metallica mantenga una certa distanza dal magnete.
Questi offset lineari e angolari sono impostati sulle posizioni e sugli orientamenti relativi dei due oggetti di gioco connessi. Ciò significa che quando cambi la posizione di uno degli oggetti nel Scena vista, aggiornerai anche gli offset.
Questo giunto utilizza una molla simulata che è configurata per essere il più rigida possibile. Tuttavia, è possibile modificare la forza della molla e renderla più debole. Questa molla simulata applica la sua forza tra gli oggetti ed è responsabile del mantenimento degli offset che desideri.
Dando un'occhiata al componente stesso, troverai diversi campi con cui hai già familiarità.
Ad eccezione di due di questi campi, tutti i parametri funzionano esattamente come sugli altri giunti, quindi non c'è bisogno di spiegarli di nuovo. Per quanto riguarda la Rapporto di smorzamento, questo parametro rappresenta il grado in cui si desidera sopprimere l'oscillazione della molla. È possibile impostare valori da 0 a 1, dove 1 significa nessun movimento.
Il Frequenza è la frequenza alla quale la molla oscilla mentre i due oggetti connessi si avvicinano alla distanza di separazione. Questo parametro può assumere valori da 1 a 1000000. Più alto è il valore, più rigida sarà la molla.
Si noti che, sebbene valori più alti significano una molla più rigida, se si imposta il valore Frequenza a 0, la molla sarà completamente rigida.
Ora, per quanto riguarda l'ostacolo che stai cercando di costruire, tutto ciò che devi fare è trascinare il Magnete oggetto di gioco al Corpo rigido connesso campo. Tutti gli altri parametri possono essere lasciati con i loro valori di default.
stampa Giocare e testare il nuovo ostacolo.
Ora che l'ostacolo è pronto, creane una prefabbricata trascinando il GameObject su ostacoli cartella.
Questo conclude il primo tutorial su Unity Joints 2D. Hai imparato quattro articolazioni, vale a dire distanza, cerniera, bersaglio e articolazioni fisse. Con questa conoscenza puoi già iniziare a creare i tuoi mondi 2D pieni di oggetti dinamici e complessi. Nel secondo tutorial, imparerai a conoscere le giunture di scorrimento, relative, primaverili e di attrito.
Se avete domande o commenti, come sempre, sentitevi liberi di inserire una riga nei commenti.