In questo tutorial, imparerai come creare un gioco 2D usando C # e Unity. Sfrutteremo il supporto del microfono di Unity per migliorare il gameplay del gioco. L'obiettivo del gioco è semplice, raggiungere l'altro lato del livello evitando gli ostacoli lungo la strada. Il giocatore può spostare il personaggio principale soffiando sul microfono del dispositivo, spostandolo verso l'alto.
In questo tutorial imparerai i seguenti aspetti dello sviluppo del gioco Unity:
Apri Unity e seleziona Nuovo progetto dal File menu per aprire la nuova finestra di dialogo del progetto. Dillo a Unity dove vuoi salvare il progetto e impostare ilImpostare i valori predefiniti per: menu a 2D.
Nel prossimo passaggio, ti verrà presentata l'interfaccia utente di Unity. Scegli il progetto per la tua piattaforma preferita scegliendo Costruisci le impostazioni dal File menu e selezionando la piattaforma di destinazione.
Prima di iniziare, assicurati che il 2D pulsante nel Scena il pannello è evidenziato. È inoltre possibile modificare la risoluzione corrente in Gioco pannello.
Dovresti anche vedere i pannelli di lavoro di Unity, che utilizzeremo in questo tutorial. Prenditi un momento per esplorare l'interfaccia utente di Unity, come ad esempio Scena, Gioco, Gerarchia, Progetto, Risorse, e Ispettore. Li useremo molto in questo tutorial.
L'interfaccia utente del nostro gioco sarà semplice. Il prossimo screenshot ti darà un'idea delle risorse che useremo e di come l'interfaccia utente finale del gioco finirà per apparire. Puoi trovare le risorse che utilizzeremo nei file di origine su GitHub.
È possibile utilizzare uno dei tre linguaggi di programmazione quando si utilizza Unity, C #, UnityScript, una variazione di JavaScript e fischio. Ognuno di questi linguaggi di programmazione ha i suoi pro e contro e spetta a te decidere quale preferisci. La mia preferenza personale va al linguaggio di programmazione C # e questa è la lingua che userò in questo tutorial.
Se decidi di utilizzare un altro linguaggio di programmazione, assicurati di dare un'occhiata al Riferimento degli script di Unity per degli esempi.
Prima di iniziare la codifica, è necessario aggiungere le risorse al progetto Unity. Puoi farlo in diversi modi:
Dopo aver completato questo passaggio, dovresti vedere le risorse nel tuo progetto Risorse cartella nel Progetto pannello.
Useremo un numero di suoni per creare una grande esperienza auditiva. Gli effetti sonori utilizzati in questo tutorial sono stati ottenuti da freesound.org.
Inizia trascinando e rilasciando lo sfondo nel Gerarchia pannello. Dovrebbe apparire automaticamente nel Scena pannello.
Perché il Scena pannello è impostato per visualizzare una vista 2D, noterai che la selezione di Macchina fotografica principale nel Gerarchia mostra un'anteprima di ciò che la fotocamera sta per visualizzare. Puoi anche vederlo in Gioco vista. Per rendere visibile l'intera scena, imposta il Taglia valore del Macchina fotografica principale a 4 nel Ispettore pannello come mostrato di seguito.
Useremo un foglio sprite per gli elementi dell'interfaccia utente del nostro gioco. Unity ha un editor di sprite che rende l'uso degli sprite un gioco da ragazzi. Il materiale illustrativo utilizzato in questo tutorial è stato ottenuto da openclipart.org.
Importa il disegno, selezionalo dal Risorse pannello, e cambia il Modalità Sprite opzione a multiplo nel Ispettore pannello.
Fai clic sul pulsante con l'etichetta Sprite Editor e impostare il genere opzione a Automatico.
Con il foglio sprite affettato e pronto per l'uso, fai clic sulla freccia che appare quando il foglio sprite è selezionato e scegli lo sprite della mucca, il personaggio principale del nostro gioco. Trascinalo sulla scena per aggiungerlo.
Per rilevare le collisioni, almeno uno degli oggetti in collisione deve avere a Rigidbody 2D componente collegato ad esso. Per aggiungerne uno alla mucca, fare clic su Aggiungi componente pulsante nel Ispettore pannello. Dall'elenco dei componenti, selezionare RigidBody 2D nel Fisica 2D sezione.
Controlla il Angolo fisso scatola per impedire alla mucca di ruotare se si verifica una collisione. Non useremo la gravità fisica predefinita in questo gioco, ma simuleremo la nostra. Cambiare il Scala di gravità a partire dal 1 a 0 per garantire che la gravità predefinita non abbia impatto sull'oggetto.
Il pavimento è usato per mantenere il nostro personaggio principale da cadere una volta che abbiamo aggiunto la fisica al gioco. Crea un nuovo oggetto di gioco selezionando Crea vuoto dal GameObject menu.
Per far riconoscere il pavimento quando il personaggio lo sta toccando, dobbiamo aggiungere un Box Collider 2D componente. Un collisore è una forma fisica che definisce l'area che fa scattare una collisione.
Seleziona l'oggetto del gioco del pavimento nel Gerarchia, apri il Ispettore pannello e fare clic Aggiungi componente. Dall'elenco dei componenti, selezionare Box Collider 2D nel Fisica 2D sezione.
Cambiare il Taglia proprietà a X: 4.8 e Y: 0,05 per creare un piccolo rettangolo in cui posizionare la mucca. Infine, aggiungi un Box Collider 2D all'oggetto di gioco mucca ripetendo questi passaggi.
Un Sorgente Audio componente viene utilizzato per riprodurre una clip audio quando il giocatore raccoglie la stella. Questo componente leggerà la clip audio impostata nelle sue opzioni e la riprodurrà quando viene chiamata da uno script o all'inizio se il Gioca su Awake la casella di controllo è selezionata.
Per riprodurre un suono quando il giocatore raccoglie una stella, dobbiamo prima allegare un Sorgente Audio componente ad esso. Seleziona la stella dal Gerarchia o Scena visualizzare, fare clic su Aggiungi componente pulsante nel Ispettore pannello e selezionare Sorgente Audio nel Audio sezione.
Dato che vogliamo solo che il suono suoni quando il giocatore tocca la stella, dobbiamo deselezionare il Gioca su Awake opzione. Fai clic sul piccolo punto a destra, sotto l'icona a forma di ingranaggio, per selezionare il suono che vogliamo riprodurre.
I palloncini rappresentano la vita o la salute del nostro personaggio principale. Quando una mano si scontra con la mucca, scatterà uno dei palloncini per indicare che è stato colpito e il numero di vite è diminuito.
Trascina lo sprite del palloncino dal Risorse al Gerarchia pannello e poi di nuovo al Risorse. Questo creerà a prefabbricato del pallone. Noterai che il testo diventa blu indicando che ora è un prefabbricato. Creando un prefabbricato, riusciamo a riutilizzare il fumetto senza utilizzare risorse aggiuntive.
Seleziona il nuovo prefabbricato e premi Command + D duplicarlo. Utilizzare il Rotazione strumento per ruotare leggermente i palloncini come mostrato nell'immagine sopra.
Raggruppiamo mucca e palloncini per renderli un po 'più facili. Per fare ciò, trascina un palloncino dal Gerarchia pannello e posizionarlo sopra l'oggetto di gioco mucca nel Gerarchia pannello. L'oggetto del gioco mucca viene evidenziato per indicare che far cadere il palloncino su di esso lo aggiungerà come figlio dell'oggetto del gioco mucca. Il risultato è che spostando l'oggetto del gioco mucca si sposta anche la posizione dei palloncini.
Le mani sono i nemici o gli ostacoli che devono essere evitati se il giocatore vuole finire il livello raccogliendo la stella. Le mani si spostano da un lato all'altro, lasciando uno spazio angusto nel mezzo per il passaggio della mucca.
Poiché le mani sono oggetti di gioco che utilizzeremo più volte, per prima cosa la convertiamo in un prefabbricato come abbiamo fatto con i palloncini. Seguire i passaggi precedenti per creare il prefabbricato e utilizzare gli strumenti dell'editor per posizionare le mani come mostrato nell'immagine sopra.
Abbiamo anche bisogno di aggiungere un collisore a ciascuna mano per rilevare le collisioni. Per aggiungere il collisore, fare clic su Aggiungi componente pulsante nel Ispettore pannello e selezionare Box Collider 2D nel Fisica 2D sezione. Noterai che una casella verde appare attorno alla mano quando la selezioni per indicare che la mano ha un collisore legato ad essa.
Suoniamo anche un suono quando una mano si scontra con la mucca, facendo scoppiare un palloncino. Per fare ciò, dobbiamo prima aggiungere il suono. Seleziona la mano dal Gerarchia o Scena visualizzare, fare clic su Aggiungi componente pulsante nel Ispettore pannello e selezionare Sorgente Audio dal Audio sezione.
I dettagli del componente audio verranno visualizzati nel Pannello Ispettore. Fai clic sul punto sotto l'icona dell'ingranaggio per selezionare il suono corretto.
L'obiettivo del gioco è quello di raccogliere la stella alla fine di ogni livello. Il giocatore può spostare la mucca verso l'alto soffiando sul microfono del dispositivo.
Trascina la stella dal Risorse pannello e aggiungilo al Scena. Nel Ispettore'S Trasformare sezione, cambia i valori come mostrato nell'immagine qui sotto per posizionare la stella.
Questo posizionerà la stella nella parte superiore del livello. Per rilevare quando la mucca raccoglie la stella, abbiamo bisogno di aggiungere un collisore ad esso come abbiamo già fatto alcune volte. Aggiungere un Box Collider 2D alla stella.
Gli avvisi sono anche oggetti di gioco. Sono messaggi che informano il giocatore quando il livello è stato completato o il gioco è finito.
Trascina gli avvisi dal Risorse pannello al Gerarchia e poi di nuovo al Risorse pannello per convertirli in un prefabbricato. Più avanti in questo tutorial, aggiungeremo uno script agli avvisi e mostreremo come vengono utilizzati. Non dimenticare di eliminarli dal Scena una volta convertiti in prefabbricato.
Unity include un editor di codice, una versione di Mono sviluppo. Sebbene sia un buon editor, puoi usare qualunque editor ti piaccia. Visual Studio, ad esempio, è una scelta popolare se stai usando Windows.
Puoi creare un nuovo file avviando il tuo editor di codice, salvando il file nel Risorse cartella del progetto e quindi aggiungerla a GameObject, proprio come fai con un componente. In alternativa, puoi creare un nuovo script nel Ispettore selezionando Nuovo script e quindi facendo doppio clic su di esso per aprirlo.
Per spostare il nostro personaggio principale, avremo bisogno di accedere al microfono del dispositivo. Per impostazione predefinita, Unity fornisce il supporto di base per acquisire l'audio, ma non include una proprietà o un metodo per rilevare il livello di attività del microfono, che è ciò di cui abbiamo bisogno per spostare la mucca.
Fortunatamente, possiamo usare uno script di terze parti che ci darà accesso a rumorosità
proprietà. Il rumorosità
la proprietà ci permetterà, insieme a transform.position
, spostare la mucca.
Crea un vuoto GameObject e nominalo MicrophoneInput. Utilizzare il Aggiungi componente pulsante per allegare lo script di cui sopra e un Sorgente Audio componente al nuovo oggetto di gioco.
In questo modo, abilitiamo lo script e l'applicazione inizierà a catturare l'input del microfono. Regolando il sensibilità proprietà nel Ispettore, controlliamo quanto la mucca viene mossa dall'input del microfono. Più alto è il valore, più velocemente la mucca si muoverà. L'ho trovato 50 è un buon valore per iniziare.
Il seguente script definisce il Mano
classe e controlla il movimento delle mani. Le mani si spostano continuamente da sinistra a destra e viceversa. Vediamo come funziona.
La prima proprietà che usiamo nello script è velocità di movimento
, un galleggiante
che definisce il numero di unità che una mano si muove durante ogni fotogramma. Imposta il X
valore del transform.position
proprietà, muovendo la mano orizzontalmente.
La seconda proprietà, currentPos
, è anche un galleggiante
e memorizza la posizione corrente della mano prima che si muova. Questo ci aiuterà a calcolare il numero di unità che la mano può muovere.
usando UnityEngine; usando System.Collections; public class Hand: MonoBehaviour private float moveSpeed = 0.02f; private float currentPos; public bool left = false;
Infine, il sinistra
proprietà di tipo booleano
definisce se la mano si sta spostando a sinistra. Questo rende facile cambiare la direzione di una mano impostando il sinistra
variabile a entrambi vero
o falso
.
Il Inizio
metodo è un metodo definito nel MonoBehaviour
classe chiamata durante l'inizializzazione, prima che venga chiamato qualsiasi altro metodo, ad eccezione di Sveglio
, che non tratteremo in questo tutorial.
Nel Inizio
metodo, possiamo configurare l'oggetto prima che venga eseguito qualsiasi altro codice. In questo caso, impostiamo il currentPos
proprietà alla posizione corrente della mano, prima che si sposti.
void Start () currentPos = transform.position.x;
Nel Aggiornare
metodo, controlliamo se la mano è sinistra o destra e la spostiamo nella direzione corretta durante ogni fotogramma. Per fare questo, scriviamo un Se
affermazione all'interno del Aggiornare
metodo e diminuire o aumentare il X posizione usando il velocità di movimento
variabile per modificare il posizione
proprietà.
void Update () / * Move Hand * / / * Sposta a destra se la mano è sul lato sinistro * / if (! left) transform.position - = new Vector3 (moveSpeed, 0, 0); else transform.position + = new Vector3 (moveSpeed, 0, 0); / * Cambia moveSpeed per spostarti nell'altra direzione, creando un ciclo di movimento * / if (transform.position.x <= currentPos - 0.7f) moveSpeed *= -1; if (transform.position.x >= currentPos + 0.7f) moveSpeed * = -1;
Quando la mano si muove 0.7
unità, moltiplichiamo il velocità di movimento
proprietà di -1
per far muovere la mano nella direzione opposta. Il risultato è che le mani si spostano da un lato all'altro in un ciclo continuo, rendendo più difficile per la mucca passare attraverso le mani e raggiungere la stella.
Crea un nuovo script e collegalo all'oggetto del gioco mucca. Questo script gestirà le azioni del giocatore e alcune altre funzioni relative ai meccanismi del gioco, come la visualizzazione degli avvisi. Diamo un'occhiata alle proprietà utilizzate in questo script.
usando UnityEngine; usando System.Collections; public class Cow: MonoBehaviour private Vector3 gravity = new Vector3 (0, 0.02f, 0); pubblico GameObject micVolume; private float moveSpeed; palloncini di byte privati = 3; pubblico GameObject alertWin; pubblico GameObject alertLose;
gravità
: usato per simulare una forza verticale, tira la mucca verso il bassomicVolume
: riferimento al MicrophoneInput
oggetto del giocovelocità di movimento
: ottiene il rumorosità
valore dal MicrophoneInput
classepalloncini
: contiene il numero di palloncini, questo valore rappresenta la vita del giocatorealertWin
: Riferimento al alertWin
oggetto del giocoalertLose
: Riferimento al alertLose
oggetto del giocoNota che le variabili pubbliche devono essere impostate nell'editor di Unity. Sono tutti riferimenti a prefabbricati. L'impostazione del valore di una variabile nell'editor è semplice. Salva lo script e assicurati che non vi siano errori. Quindi torna a Unity e seleziona il oggetto del gioco a cui è allegato lo script. Dovresti vedere le variabili elencate sotto il componente dello script, come mostrato di seguito.
Trascina e rilascia la risorsa richiesta o preferita nella variabile, oppure fai clic sul piccolo punto sotto l'icona a forma di ingranaggio per selezionarla.
Assicurati che il bene e la variabile siano del stesso tipo oppure non sarà possibile rilasciarlo o vederlo quando si fa clic sull'icona del punto.
Per spostare la mucca verso l'alto, useremo il FixedUpdate
metodo. Perché non il normale Aggiornare
metodo? Questo metodo è predefinito MonoBehaviour
metodo che gira ogni frame rate fisso invece di ogni frame. Ciò significa che sarà liscia anche se il frame rate corrente è un po 'basso. Aggiungi il seguente blocco di codice allo script:
void FixedUpdate () / * Muovi Cow verso l'alto in base al volume Mic * / moveSpeed = micVolume.GetComponent() .loudness * 0.01f; transform.position = new Vector3 (0, transform.position.y + moveSpeed, 0); / * Simula la nostra stessa gravità (questa non diventa più forte quando è alta) * / transform.position - = gravità;
Calcoliamo la velocità ottenendo il volume attuale del microfono. Questo volume è ottenuto dal MicrophoneInput
classe e poi moltiplicato per 0.01. Lo facciamo per evitare che la mucca si muova troppo velocemente.
Il personaggio della mucca viene spostato aumentando il y
valore del transform.position
proprietà, utilizzando la velocità che abbiamo archiviato in velocità di movimento
.
Oltre a muovere la mucca, applichiamo anche una forza verso il basso, la gravità. Raggiungiamo questo diminuendo la posizione della mucca usando il gravità
vettore che abbiamo creato in precedenza. Fare questo ridurrà costantemente il y
posizione della mucca senza farla cadere più velocemente, il che accade se dovessimo usare il comportamento di gravità predefinito.
Nella fase successiva, rileviamo se una delle mani si scontrano con la mucca. Il OnTriggerEnter2D
il metodo viene eseguito quando due oggetti si scontrano senza interazione fisica. In questo caso, controlliamo se la mucca collide con un oggetto chiamato "Mano"
, che può essere una delle mani sulla scena e riprodurre l'audio allegato all'oggetto di gioco mucca se si verifica la collisione. Noterai che ispezioniamo anche la proprietà alfa della mucca. Perché lo facciamo viene spiegato nel passaggio successivo.
void OnTriggerEnter2D (Collider2D altro) / * Collisione di mani * / if (other.name == "Hand" && transform.GetComponent() .color.a == 1) other.audio.Play ();
Le collisioni vengono testate più volte per ogni frame, il che significa che tre collisioni si verificheranno in un tempo molto breve, facendo scoppiare tutti i palloncini. Dal momento che non vogliamo che questo accada, abbiamo bisogno di un modo per impedirlo.
Un modo utile per farlo è quello di cambiare l'alfa dell'oggetto colpito. Ciò fornirà anche un feedback visivo all'utente che indica che è stato colpito. Le prossime righe si prenderanno cura di questo.
/ * Previene da collisioni multiple * / Colore alpha = new Color (1, 1, 1, 0.5f); transform.GetComponent() .color = alpha; Invoke ("EnableCollision", 1);
Per prima cosa creiamo un nuovo Colore
oggetto e assegnagli il colore dell'oggetto di gioco e imposta il alfa
valore a 0.5
per renderlo semi-trasparente. Accediamo quindi all'oggetto del gioco SpriteRenderer
, che ci permette di modificare il suo colore.
L'ultima riga in questo blocco di codice attende un secondo e quindi chiama un EnableCollision
funzione. Questa funzione ripristina i valori cromatici della mucca rendendola nuovamente in grado di rilevare una collisione. Implementeremo questa funzione più avanti in questo tutorial.
Quando la vacca viene colpita da una mano, è necessario rimuovere un palloncino. Chiamiamo il Distruggere
metodo su un oggetto di gioco a palloncino. Noi usiamo il Trova
funzione, perché non abbiamo un riferimento a ciascuno dei palloncini.
Questa funzione cerca le risorse del gioco e restituisce l'oggetto del gioco che stiamo cercando, in questo caso un fumetto.
/ * Rimuovi Balloon * / Destroy (GameObject.Find ("Balloon")); balloons--;
Ma aspetta, non ci sono tre palloncini nella scena? È corretto. comunque, il Trova
la funzione restituisce la prima corrispondenza che riesce a trovare. In altre parole, restituisce il primo oggetto di gioco a palloncino che trova.
Decrementiamo anche il palloncini
Contattarci per aiutarci a sapere quando la mucca ha perso tutte le sue vite.
Il gioco termina quando sono stati scoppiati tutti i palloncini. Per verificare questo, controlliamo se palloncini
è uguale a 0
e mostra un avviso se è vero. Abbiamo anche impostato il gravità
'S y
proprietà a 0
e metti in pausa il gioco impostando Orizzonte temporale
a 0
.
Il Orizzonte temporale
proprietà controlla come passa il tempo nell'ambiente di gioco. Può essere usato per rendere il gioco più veloce o più lento in base al suo valore. La scala temporale predefinita è 1.0
, aumentando il suo valore accelera le funzioni associate al frame rate e diminuendole rallenta. Impostandolo a 0
mette in pausa il gioco, impedendo qualsiasi nuova collisione.
/ * Game Over * / if (balloons == 0) GameObject alert = Instantiate (alertLose, new Vector3 (0, 0, 0), transform.rotation) come GameObject; gravity.y = 0; Time.timeScale = 0;
Quando il giocatore arriva dall'altra parte del livello, è necessario rimuovere la stella e visualizzare un avviso che indica che il livello è stato completato.
Il Se
la dichiarazione controlla se la collisione è in effetti con l'oggetto del gioco a stella e riproduce l'audio allegato alla mucca se il nome è corretto. Quindi rimuoviamo la stella dalla scena prima di creare l'avviso. Abbiamo anche impostato il gravità
'S y
proprietà a 0
come abbiamo fatto nel passaggio precedente.
/ * Star Collision * / if (other.name == "Star") audio.Play (); Destroy (other.gameObject); Avviso GameObject = Instantiate (alertWin, nuovo Vector3 (0, 0, 0), transform.rotation) come GameObject; gravity.y = 0;
Il EnableCollision
metodo reimposta il valore alfa dell'oggetto di gioco mucca dopo che è stato colpito da una mano. In questo modo l'oggetto del gioco mucca consentirà di rilevare un altro colpo. Si noti che il Colore
l'oggetto ha un alfa
di 1
.
void EnableCollision () Colore alpha = new Color (1, 1, 1, 1); transform.GetComponent() .color = alpha;
Il Ricaricare
il metodo usa il Applicazione
classe per ricaricare il livello corrente. Crea un nuovo script chiamato Ricomincia , aggiungi il seguente blocco di codice e allegalo a entrambi i prefabbricati di allerta che abbiamo creato in precedenza.
usando UnityEngine; usando System.Collections; public class Riavvia: MonoBehaviour void Update () if (Input.GetButton ("Fire1")) Reload (); void Reload () Application.LoadLevel (Application.loadedLevel);
Per prima cosa testiamo se l'utente tocca lo schermo usando il Ingresso
classe e chiama il Ricaricare
metodo se vero. L'implementazione del Ricaricare
il metodo è breve e semplice Tutto ciò che facciamo è caricare il livello corrente, resettando ogni oggetto e variabile al suo stato iniziale.
È tempo di testare il gioco. stampa Comando-P per giocare a Unity. Se tutto funziona come previsto, sei pronto per i passaggi finali.
Quando sei soddisfatto del tuo gioco, è il momento di selezionare Costruisci le impostazioni dal File menu e fare clic su Impostazioni del giocatore pulsante. Questo dovrebbe far apparire il Impostazioni del giocatore nel Ispettore pannello in cui è possibile impostare i parametri per la propria applicazione.
Queste impostazioni sono specifiche dell'applicazione e includono il creatore o la società, la risoluzione dell'applicazione, la modalità di visualizzazione, ecc. Queste impostazioni dipendono dai dispositivi che hai scelto come target e dai negozi o mercati sui quali pubblicherai il gioco.
Una volta che il tuo progetto è configurato correttamente, è il momento di rivisitare il Costruisci le impostazioni e fare clic su Costruire pulsante. Questo è tutto ciò che serve per costruire il tuo gioco per test e / o distribuzione.
In questo tutorial, abbiamo imparato come implementare i controlli del microfono, l'interazione fisica, i fogli degli sprite e altri aspetti dello sviluppo del gioco usando Unity. Ti incoraggio a sperimentare il risultato e personalizzare il gioco per renderlo tuo. Spero che questo tutorial ti sia piaciuto e l'ho trovato utile.