In questo tutorial imparerai come creare un gioco 3D mobile usando C # e Unity. L'obiettivo del gioco è quello di segnare più punti possibili. 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 3D.
Nel prossimo passaggio, ti verrà presentata l'interfaccia utente di Unity. Scegli il progetto per lo sviluppo mobile scegliendo Costruisci le impostazioni dal File menu e seleziona la tua piattaforma preferita. Ho scelto Android per questo tutorial.
La prima cosa che dobbiamo fare dopo aver selezionato la piattaforma a cui stiamo mirando è scegliere la dimensione del materiale illustrativo che useremo nel gioco. Ho elencato i dispositivi più importanti per ciascuna piattaforma di seguito e ho incluso la risoluzione dello schermo e la densità dei pixel del dispositivo.
Poiché Android è una piattaforma aperta, ci sono molti dispositivi diversi, risoluzioni dello schermo e densità di pixel. Alcuni dei più comuni sono elencati di seguito.
Ricorda che il codice utilizzato per questo tutorial può essere utilizzato per scegliere come target una delle piattaforme sopra elencate.
4. Esporta grafica
A seconda dei dispositivi che hai scelto come targeting, potrebbe essere necessario convertire l'artwork del gioco nelle dimensioni e nella risoluzione consigliate. Puoi farlo nel tuo editor di immagini preferito. Ho usato il Regola dimensioni ... funzione sotto il Utensili menu in OS X Anteprima applicazione.
Prima di iniziare, assicurati di fare clic su 3D pulsante nel Scena pannello. È anche possibile modificare la risoluzione che viene visualizzata nel Gioco pannello.
L'interfaccia del nostro gioco sarà semplice. Lo screenshot qui sopra ti dà un'idea dell'opera che useremo e di come l'interfaccia del gioco finirà per apparire. Puoi trovare il disegno e le risorse aggiuntive nei file sorgente di questo tutorial.
È possibile utilizzare uno dei tre linguaggi di programmazione quando si utilizza Unity, C #, UnityScript, una variazione di JavaScript e fischio. Ogni linguaggio 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 #, quindi 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.
Userò un numero di suoni per migliorare l'esperienza audial del gioco. Gli effetti sonori utilizzati in questo tutorial sono stati ottenuti da As3sfxr e Soungle.
Per creare il nostro gioco, dobbiamo prima ottenere i nostri modelli 3D. Raccomando 3Docean per modelli di alta qualità, trame e altro, ma se stai provando o stai ancora imparando, i modelli gratuiti potrebbero essere un buon punto di partenza.
I modelli di questo tutorial sono stati scaricati da SketchUp 3D Warehouse in cui è possibile trovare una buona varietà di modelli di tutti i tipi.
Poiché Unity non riconosce il formato di file di SketchUp, dobbiamo convertire i file di SketchUp in un formato di file che Unity può importare. Inizia scaricando la versione gratuita di SketchUp, SketchUp Make.
Apri il tuo modello 3D in SketchUp Fai e vai seleziona Esporta> Modello 3D dal File menu e scegliere Collada (* .dae) dalla lista di opzioni.
Scegli un nome, seleziona una directory e fai clic Esportare. Verranno creati un file e una cartella per il modello 3D. Il file contiene i dati dell'oggetto 3D e la cartella le trame utilizzate dal modello. Ora puoi importare il modello in Unity come spiegato nel passaggio successivo.
Prima di iniziare la codifica, dobbiamo aggiungere le nostre 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.
Siamo pronti a creare la scena del nostro gioco trascinando gli oggetti sul Gerarchia o Scena pannello.
Inizia trascinando e rilasciando lo sfondo nel Gerarchia pannello. Dovrebbe apparire automaticamente nel Scena pannello. Aggiusta il Trasformare valori nel Ispettore come mostrato nello screenshot successivo.
L'obiettivo del gioco è lanciare la palla attraverso il cerchio. Trascinalo dal Risorse pannello al Scena e cambiala Trasformare proprietà come mostrato nello screenshot qui sotto.
Come avrai notato, il canestro da basket è un po 'troppo scuro. Per risolvere questo problema, dobbiamo aggiungere un Luce alla nostra scena. Vai a GameObject> Crea altro e selezionare Luce direzionale. Questo creerà un oggetto che produrrà un raggio di luce. Cambialo Trasformare valori come mostrato nello screenshot successivo in modo che illumini il canestro da basket.
Con il canestro da basket correttamente illuminato, è tempo di aggiungere un collisore in modo che la palla non passi attraverso quando colpisce l'area bianca.
Clicca il Aggiungi componente pulsante nel Ispettore pannello, selezionare Fisica> Box Collider, e cambia i suoi valori come mostrato nella prossima schermata.
Vedrai un bordo verde attorno al canestro nel Scena pannello che rappresenta il collisore che abbiamo appena aggiunto.
Se gettassimo una palla sul canestro, verrebbe fermato dal box-box, ma si fermerebbe senza rimbalzare come ci si aspetterebbe nel mondo reale. Per rimediare a questo abbiamo bisogno di a Materiale fisico.
Dopo aver selezionato Crea> Materiale fisico dal Risorse menu,dovresti vederlo apparire nel Risorse pannello. Ho cambiato il nome in BounceMaterial.
Cambia le sue proprietà nel Ispettore pannello per abbinare quelli in questo screenshot qui sotto.
Quindi, selezionare il riquadro di raccolta del canestro da basket e fare clic sul puntino a destra di Materiale testo, dovrebbe apparire una finestra in cui è possibile selezionare il materiale di fisica.
Useremo un altro collisore per rilevare quando la palla passa attraverso il cerchio. Questo dovrebbe essere un collettore di trigger per assicurarsi che rilevi la collisione senza interagire con il corpo fisico.
Crea un nuovo collisore per il telaio come mostrato nel passaggio 15 e aggiorna i suoi valori come mostrato nella schermata successiva.
Questo posizionerà il collisore sotto l'anello dove la palla non può tornare indietro, nel senso che è stato fatto un canestro. Assicurati di controllare il È Trigger casella di controllo per contrassegnarlo come collettore di trigger.
È ora di aggiungere un collisore all'anello stesso. Perché abbiamo bisogno che la palla passi attraverso il centro dell'anello, non possiamo avere un collisore di sfere o di sfere, invece useremo un Mesh Collider.
UN Mesh Collider ci consente di utilizzare la forma dell'oggetto 3D come un collisore. Come indica la documentazione, Mesh Collider crea la sua rappresentazione di collisione dalla mesh collegata al GameObject.
Seleziona il telaio dal Gerarchia pannello, fai clic sul triangolo a sinistra per espandere la sua gerarchia, espandi group_17, e selezionare l'elemento chiamato Squillare.
Aggiungi un collisore come abbiamo visto nel passaggio 15, ma assicurati di selezionare Mesh Collider. Unity rileverà automaticamente la forma del modello e creerà un collisore per questo.
Per suonare un suono quando la palla colpisce il cerchio, prima dobbiamo attaccarlo. Selezionalo dal Gerarchia o Scena visualizzare, fare clic su Aggiungi componente pulsante nel Ispettore pannello e selezionare Sorgente Audio nel Audio sezione.
Deseleziona Gioca su Awake e fai clic sul piccolo punto a destra, sotto l'icona a forma di ingranaggio, per selezionare il suono che desideri riprodurre.
Concentriamoci ora sul basket. Trascinalo dal Risorse cartella e posizionarlo nella scena. Non preoccuparti della posizione della palla per ora, perché la convertiremo in a Prefab dopo.
Per far sì che la palla rilevi quando colpisce il cerchio, dobbiamo aggiungere un componente, a Sphere Collider per essere precisi. Seleziona la palla nella scena, apri il Ispettore pannello e fare clic Aggiungi componente. Dall'elenco dei componenti, selezionare Sphere Collider dal Fisica sezione e aggiornare le sue proprietà come mostrato di seguito.
Per rilevare una collisione con il basket, almeno uno degli oggetti in collisione deve avere un Corpo rigido componente collegato ad esso. Per aggiungerne uno alla palla, selezionare Aggiungi componente nel Ispettore pannello e scegliere Fisica > Corpo rigido.
Lascia le impostazioni ai loro valori predefiniti e trascina la pallina dal Gerarchia pannello al Risorse pannello per convertirlo in a Prefab.
Per rappresentare i canestri già realizzati dal giocatore, utilizziamo una versione 2D del canestro da basket. Trascinalo dal pannello Risorse e posizionalo sulla scena come mostrato di seguito.
Sotto il telaio 2D, mostriamo il numero di canestri che il giocatore ha segnato finora. Selezionare GameObject> Crea altro> Testo della GUI per creare un oggetto di testo, posizionarlo nella parte inferiore del canestro e cambiare il testo nel Gerarchia pannello a 0.
Puoi incorporare un font personalizzato importandolo nel Risorse cartella e cambiando il Font proprietà del testo nel Ispettore.
Il misuratore di forza è una barra che mostrerà la forza usata per sparare alla palla. Questo aggiungerà un altro livello di difficoltà al gioco. Trascina gli sprite per il misuratore di forza dal Risorse pannello al Scena e posizionali come mostrato nello screenshot qui sotto.
Aggiungiamo anche un indicatore all'interfaccia che mostra quanti colpi il giocatore ha lasciato. Per completare questo passaggio, segui la stessa procedura usata per visualizzare il punteggio attuale del giocatore.
È finalmente giunto il momento di scrivere del codice. Il primo script che creeremo è il Cestino
script che controlla se la palla passa attraverso l'anello o colpisce il tabellone.
Seleziona il telaio e fai clic sul Aggiungi componente pulsante nel Ispettore pannello. Selezionare Nuovo script e nominalo Cestino
. Non dimenticare di cambiare la lingua in C #. Apri il file appena creato e aggiungi il seguente snippet di codice.
usando UnityEngine; usando System.Collections; cesto di classe pubblica: MonoBehaviour punteggio pubblico di GameObject; // riferimento al gameObject ScoreText, impostato nel cestino dell'editor pubblico di AudioClip; // riferimento al basket sound void OnCollisionEnter () // if ball hits board audio.Play (); // riproduce l'hit board sound void OnTriggerEnter () // se la palla colpisce il collisore del basket int currentScore = int.Parse (score.GetComponent (). text) + 1; // aggiungi 1 al punteggio ottenuto. GetComponent (). text = currentScore.ToString (); AudioSource.PlayClipAtPoint (basket, transform.position); // riproduce il suono del cestello
In questo script, impostiamo due variabili pubbliche che rappresentano oggetti sul Scena e nel Risorse cartella. Torna all'editor e fai clic sul piccolo punto a destra delle variabili per selezionare i valori descritti nei commenti.
Suoniamo un suono quando la palla colpisce il canestro e controlla se la palla passa attraverso l'anello. Il analizzare
il metodo convertirà il testo dal Testo della GUI oggetto di gioco a un numero in modo da poter aumentare il punteggio e quindi impostarlo nuovamente come testo utilizzando accordare
. Alla fine, suoniamo il cestino
suono.
Il Sparare
classe gestisce il resto dell'interazione del gioco. Romperemo i contenuti dello script per renderlo più facile da digerire.
Inizia selezionando telecamera e fare clic su Aggiungi componente pulsante nel Ispettore pannello. Selezionare Nuovo script e nominalo Sparare
.
Nel prossimo snippet di codice, ho elencato le variabili che useremo. Leggi i commenti nello snippet di codice per chiarimenti.
usando UnityEngine; usando System.Collections; classe pubblica Spara: MonoBehaviour public GameObject ball; // riferimento alla palla prefabbricata, impostata nell'editor privato Vector3 throwSpeed = new Vector3 (0, 26, 40); // Questo valore è un paniere sicuro, lo modificheremo usando il forcemeter public Vector ballPos; // starting ball position private bool gettato = falso; // se la palla è stata lanciata, previene 2 o più palline private GameObject ballClone; // non usiamo il prefabbricato pubblico originale GameObject disponibileShotsGO; // ScoreText riferimento all'oggetto di gioco private int availableShots = 5; contatore pubblico di GameObject; // riferimenti alla freccia pubblica di GameObject del misuratore di forza; private float arrowSpeed = 0.3f; // Difficoltà, valore più alto = movimento della freccia più veloce private bool right = true; // usato per invertire il movimento della freccia public GameObject gameOver; // gioco sul testo
Successivamente, creiamo il Inizio
metodo in cui impostiamo la forza di gravità -20
per far cadere la palla più velocemente.
void Start () / * Increase Gravity * / Physics.gravity = new Vector3 (0, -20, 0);
Per gestire le interazioni con il motore fisico, implementiamo il FixedUpdate
metodo. La differenza tra questo metodo e il normale Aggiornare
il metodo è quello FixedUpdate
viene eseguito in base a passaggi fisici anziché a ogni frame, il che potrebbe causare problemi se il dispositivo è lento a causa di una mancanza di memoria, ad esempio.
Nel FixedUpdate
metodo, spostiamo la freccia del misuratore di forza usando il destra
variabile per rilevare quando invertire il movimento della freccia.
void FixedUpdate () / * Move Meter Arrow * / if (arrow.transform.position.x < 4.7f && right) arrow.transform.position += new Vector3(arrowSpeed, 0, 0); if (arrow.transform.position.x >= 4.7f) right = false; if (right == false) arrow.transform.position - = new Vector3 (arrowSpeed, 0, 0); if (arrow.transform.position.x <= -4.7f) right = true;
Il basket viene lanciato quando il giocatore tocca lo schermo. Ogni volta che lo schermo viene toccato, per prima cosa controlliamo se c'è già una palla in aria e se il giocatore ha tiri disponibili. Se questi requisiti vengono soddisfatti, aggiorniamo i valori, creiamo una nuova istanza della palla e la lanciamo usando il comando addForce
metodo.
/ * Spara palla su Tap * / if (Input.GetButton ("Fire1") &&! Gettato && availableShots> 0) throw = true; availableShots--; availableShotsGO.GetComponent (). text = availableShots.ToString (); ballClone = Instantiate (ball, ballPos, transform.rotation) come GameObject; throwSpeed.y = throwSpeed.y + arrow.transform.position.x; throwSpeed.z = throwSpeed.z + arrow.transform.position.x; ballClone.rigidbody.AddForce (throwSpeed, ForceMode.Impulse); audio.Play (); // riproduci il suono dello scatto
Nel seguente blocco di codice, testiamo se la palla raggiunge il pavimento e rimuove quando lo fa. Prepariamo anche il lancio successivo ripristinando le variabili.
/ * Rimuovi la palla quando colpisce il pavimento * / if (ballClone! = Null && ballClone.transform.position.y < -16) Destroy(ballClone); thrown = false; throwSpeed = new Vector3(0, 26, 40);//Reset perfect shot variable
Dopo aver rimosso la palla, verifichiamo che il giocatore abbia sparato a sinistra. Se questo non è il caso, allora finiamo il gioco e chiamiamo ricomincia
.
/ * Verifica se non ci sono scatti * / se (disponibiliShots == 0) arrow.renderer.enabled = false; Instantiate (gameOver, new Vector3 (0.31f, 0.2f, 0), transform.rotation); Invoke ("restart", 2);
ricomincia
Il ricomincia
Il metodo viene eseguito due secondi dopo che il giocatore ha finito i colpi, riavviando il gioco invocando LoadLevel
.
void restart () Application.LoadLevel (Application.loadedLevel);
È tempo di testare il gioco. stampa Comando-P per giocare a Unity. Se tutto funziona come previsto, allora 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.
Le impostazioni sono applicazione e includono il creatore o la società, la risoluzione e la modalità di visualizzazione, la modalità di rendering, la compatibilità del dispositivo, ecc. Le impostazioni variano a seconda della piattaforma e dei dispositivi utilizzati dall'applicazione e mantengono anche i requisiti del negozio che stai pubblicando in mente.
Usando l'artwork creato in precedenza, ora puoi creare una bella icona e un'immagine splash per il tuo gioco. Unity ti mostra le dimensioni richieste, che dipendono dalla piattaforma che stai creando.
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 a conoscere modelli 3D, raccoglitori di maglie, materiali di fisica, rilevamento di collisioni e altri aspetti dello sviluppo del gioco 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.