Crea un videogioco 2D con Unity

In questo Instructable, ti mostrerò come realizzare un videogioco 2D davvero semplice. È un gioco in stile corridore infinito, come "Fly with Me 'o" DoodleJump ".

Provalo qui !!

Ho fornito una zip dell'ex del gioco che ti mostrerò come creare. Scaricalo e provalo.

È completamente incompleto per quanto riguarda un gioco, ma mi è stata una fantastica opportunità per imparare un po 'di scripting C # e per consolidare la conoscenza di Unity che ho raccolto da quando l'ho scaricato due settimane fa. Ai fini della condivisione, ho deciso di utilizzare il robot adorabile di Instructables come personaggio principale. Ho cercato uno sguardo semplicistico in omaggio a quei cartoni di una volta realizzati nello stesso stile. Ho sempre amato quando la matita interagiva con il cartone animato.

Devo dire che Unity è uno strumento incredibile. Ci sono molte informazioni disponibili nella sezione di apprendimento del sito Unity, consiglio vivamente di dargli un'occhiata dopo aver visto quanto è semplice iniziare a creare giochi 2D.

Tutto quello che ti sto mostrando qui, l'ho imparato dal sito Unity, hanno dei fantastici tutorial e sessioni di video training.

Sono nuovo di Unity come puoi o non puoi essere, quindi questo è solo per condividere il mio amore per l'ambiente e la mia esperienza di apprendimento finora.

Fornirò le risorse di sprite per ogni passaggio in modo che tu possa seguire e creare il gioco da solo. Consiglio di non usare il mio codice così com'è, ma piuttosto di seguire e scrivere la tua versione degli stessi script.

Ho poca o nessuna esperienza di programmazione in C, eppure ho scritto script in C # abbastanza rapidamente ... mi ricorda moltissimo Arduino e Processing, con cui ho familiarità.

Quindi, anche se non hai familiarità con la programmazione, credo che potresti farlo anche tu. Almeno segui la mia avventura per vedere quanto è stato facile.

Passaggio 1: scaricare il software Unity gratuito

Bascillay Unity è abbastanza gentile da permettere a quelli di noi che desiderano entrare nel mondo degli sviluppatori di giochi, prendersi una pugnalata per apprenderlo gratuitamente, purché non facciamo soldi con i prodotti che facciamo usando il loro software. Eccezionale. Grazie mille Unity, per l'incoraggiamento e la libertà di provarlo, e per l'incredibile software.

Se si prevede di seguire, sarà necessario accedere alla home page di Unity e scaricare la versione gratuita del software.
Dovrai anche creare un Unity Login, basta seguire i passaggi dopo l'installazione.

Passaggio 2: Apri Unity

Se è la prima volta che apri Unity, ti verrà presentata una finestra di dialogo per creare un nuovo progetto. Cerca una posizione adatta e dai un nome al tuo progetto, qualcosa come "Iblejump".
È molto importante controllare la selezione 2D nella parte inferiore del modulo in cui è indicato "Impostazioni predefinite per".

Non dovrai importare nessuno dei pacchetti per il gioco che realizzeremo. Consiglierei di non disturbare con loro a meno che tu non ne abbia bisogno per il tuo gioco. Non ha senso includere un volume extra nei nostri file di build.

Dopo aver effettuato le selezioni appropriate, vai avanti e premi 'crea'.

Ora Unity Editor aprirà il nostro nuovo progetto vuoto e ci presenterà un bel popup di benvenuto. Chiudiamolo per ora ed esploriamo un po 'l'interfaccia.

L'area di lavoro è divisa in quattro diverse sezioni, che è possibile organizzare in base al flusso di lavoro.

La finestra della gerarchia sul lato sinistro mostra tutti gli oggetti che sono attualmente nella tua scena. La finestra della scena è dove costruiremo e posizioneremo i nostri oggetti di gioco.

In basso abbiamo un'altra area di lavoro in cui è possibile agganciare un separare diverse schede. La maggior parte delle schede può essere ancorata in un'area che ritieni conveniente. È così che ho impostato la mia area, potresti fare le cose in modo leggermente diverso. La cosa principale da tenere presente è che puoi accedere a tutte queste finestre dal menu a discesa della finestra e aggiungerle o sottrarle secondo necessità. non devi preoccuparti se la tua finestra non sembra identica. Ti mostrerò ciascuna delle aree che useremo in modo più dettagliato mentre andiamo.

Per ora basta fare clic sulla "Telecamera principale" in modo da poter vedere cosa succede a destra nella finestra di ispezione e nelle scene.
Nota come ora hai un'anteprima della scena vuota nell'angolo in basso della finestra della scena e tutti i componenti e i valori delle proprietà della videocamera sono esposti.

Passaggio 3: crea il tuo primo oggetto di gioco


Per prima cosa avrai bisogno della cartella Sprites che ho incluso come file zippato. Estrai la cartella da qualche parte per trovarla.

In Unity, nell'area di lavoro del progetto, sotto la scheda Progetto, con Risorse selezionate, trascina la cartella decompressa nell'area grigia sulla destra. Tutti gli sprite di cui avrai bisogno per duplicare il mio progetto sono in questa cartella.

Passa alla nuova cartella Sprites e trova uno sprite chiamato "barra di navigazione". Trascinalo nella finestra della scena. Rilascialo da qualche parte vicino al fondo della scena, come ho fatto nell'immagine.

Se fai clic su Videocamera principale nella finestra della gerarchia dopo averla posizionata, puoi già vedere come apparirà nel tuo gioco.

Dovremo aggiungere alcuni componenti, iniziamo con un colllider box, per rendere solido il nostro box.

Con il nuovo oggetto selezionato, in Impostazioni, fai clic su "Aggiungi componente" e quindi aggiungi un Box Collider 2D, disponibile in Physics2D

Vai avanti e aggiungi un secondo Box Collider 2D al tuo oggetto, questo che useremo per impedire al giocatore di cadere accidentalmente dal lato della barra di navigazione proprio all'inizio del gioco.

Poiché volevo che Robot iniziasse dove si trova sulla pagina Web di Instructables, ho ridotto leggermente il collider principale. E il secondo collider è effettivamente seduto in uno spazio aperto, il che impedirà al nostro giocatore di scappare dal lato sinistro quando inizia il gioco.

Imposta i raccoglitori di scatole in modo che corrispondano alle dimensioni nell'immagine, inoltre imposta le dimensioni xey del parametro di trasformazione su 1, 5. Guarda le modifiche apportate nella finestra della scena.

allegati

  • Scarica Sprites.zip

Passaggio 4: aggiungere un giocatore

Ora che abbiamo una piattaforma su cui il nostro giocatore può stare in piedi, avremo bisogno di un giocatore.

Fai clic su GameObject nella barra dei menu in alto, seleziona crea vuoto.

Seleziona il tuo nuovo oggetto di gioco vuoto nella finestra della Gerarchia e, nell'Inspector, cambia il suo nome in Giocatore.
Quindi aggiungere un componente Sprite Renderer, disponibile in Rendering.

Nella cartella risorse / sprites del progetto, trova Idle_Sprite, fai clic sul piccolo triangolo accanto ad esso e trascina una delle immagini nel valore Sprite del componente renderer sprite.

Avremo bisogno di alcuni altri componenti per il nostro lettore. Per prima cosa aggiungi un Rigidbody2D dalle scelte Physics2D.

Se premi il pulsante di riproduzione ora, il nostro giocatore cadrà attraverso la barra di navigazione. Continua provalo.

Lo risolveremo aggiungendo alcuni collider. In qualche modo contro intuitivamente, aggiungeremo un collider circolare ai nostri piedi e al nostro corpo e un collider a scatole alla nostra testa.

Ora, se premiamo play, il nostro piccolo robot rotolerà sulla sua schiena come farebbe qualsiasi robot con fondo circolare. Risolvi il problema selezionando la casella di controllo Angolo fisso e, quando premi Play, il tuo robot dovrebbe cadere sulla barra di navigazione e riposare bene.

È un po 'grande per i miei gusti, quindi ho cambiato le sue dimensioni trasformandole in .75 xe .75 y.

Poi ho armeggiato con il posizionamento della barra di navigazione e del robot fino a quando non sono stato felice.

Ora è un buon momento per salvare la tua scena, dargli un nome che ti fa sentire bene e salvarla.

Passaggio 5: aggiungi un po 'di vita al robot

Bene, ora che abbiamo l'oggetto giocatore in atto, possiamo iniziare ad aggiungere alcune animazioni e funzionalità ad esso.

Con l'oggetto giocatore selezionato, aggiungi un componente Animator. Aggiungi componente -> Varie -> Animatore.
Deseleziona "Applica movimento radice" e seleziona la casella "Animazione fisica".

Ora apri la finestra di Animator. È possibile farlo tramite il menu a discesa Finestra se non è già aperto nell'area di lavoro del progetto. Mi piace ancorare il mio in fondo.

Con Player ancora selezionato in Gerarchia, apri la finestra Animazione. Può anche essere trovato nel menu a discesa della finestra. Mi piace ancorare il mio nella stessa area della mia scena e delle finestre di gioco.

Nella finestra Animazione, fai clic sui triangolini accanto a "campione" per creare una nuova clip.

In basso, apri la cartella asset / sprite e riapri lo sprite inattivo. Spostare selezionare l'intera serie di immagini e trascinarle verso l'alto nella finestra di animazione.

Poiché l'animatore (me) era economico sui frame, reimpostare la dimensione del campione su 10.

Ora guarda il tuo Animator, dovresti aggiungere automaticamente due stati, uno qualsiasi e un nuovo stato predefinito, Inattivo. Il colore arancione ci dice che è lo stato di animazione predefinito.

Se hai seguito correttamente questi passaggi, dovresti avere un robot animato ora quando premi play.

Crea un'altra animazione e chiamala drive. Usa il foglio sprite di Drive. Ancora una volta, ridurre la frequenza dei fotogrammi. Lo sto mettendo a 20 per ora. Puoi twittarlo in seguito a tuo piacimento.

Nella finestra Animator, vedrai che un secondo stato è stato creato automaticamente. Grande! Aggiungiamo un parametro float chiamato "Speed" al nostro Animator prima di creare le transizioni.

Ora fai clic con il pulsante destro del mouse sullo stato Inattivo e seleziona "effettua transizione". Quindi trascinare nello stato dell'unità. Questo dovrebbe creare una piccola barra della freccia. seleziona il triangolo al centro della barra di transizione. Modificare la condizione di transizione nell'ispettore in modo che la velocità sia maggiore di 0, 01. Ora crea una transizione dal drive back al minimo con la condizione che Speed ​​sia inferiore a 0, 01.

Successivamente dovremo creare uno script del controller per Robot.

Passaggio 6: lo script del controller del robot

Ora che abbiamo un giocatore con alcuni stati di animazione, abbiamo bisogno di uno script per controllare il personaggio. Aggiungeremo un semplice script C # al nostro progetto per controllare il nostro Player.

Nella finestra Progetto, crea una nuova cartella e chiamala Script. Apri quella cartella e crea un nuovo script C #, chiamalo RobotController.

Fare doppio clic sullo script per avviare MonoDevelop. Può volerci un momento per aprirsi, sii paziente.
Immettere il codice seguente per iniziare
 utilizzando UnityEngine; utilizzando System.Collections; RobotController di classe pubblica: MonoBehaviour {// Questa sarà la nostra massima velocità poiché moltiplicheremo sempre per 1 float pubblico maxSpeed ​​= 2f; // un valore booleano per indicare se siamo rivolti a sinistra o no bool facingLeft = true; // un valore per rappresentare il nostro animatore Animator Animator; // Utilizzalo per l'inizializzazione void Start () {// imposta anim sul nostro animatore anim = GetComponent (); } // L'aggiornamento viene chiamato una volta per frame void FixedUpdate () {float move = Input.GetAxis ("Horizontal"); // Ci dà uno se ci muoviamo attraverso i tasti freccia // sposta i nostri giocatori rigidbody rigidbody2D.velocity = nuovo Vector3 (move * maxSpeed, rigidbody2D.velocity.y); // imposta la nostra velocità anim.SetFloat ("Speed", Mathf.Abs (move)); // se ci stiamo muovendo a sinistra ma non affrontando la rotazione a sinistra, e viceversa if (sposta 0 && facingLeft) {Flip (); }} // capovolgi, se necessario, annulla Flip () {facingLeft =! facingLeft; Vector3 theScale = transform.localScale; theScale.x * = -1; transform.localScale = theScale; }} 

Salvare lo script e tornare alla finestra Unity. Trascina il nuovo script RobotController dal lavoro del progetto sull'oggetto Player nella finestra Gerarchia. Premi il pulsante di riproduzione per avviare il gioco e dovresti essere in grado di controllare il robot con i tasti freccia sinistra e destra. Se apri la finestra Animator sotto il gioco, dovresti vedere l'animazione che cambia stato da unità a inattiva a seconda che Robot si stia muovendo o meno.

Step 7: Get Jumping - Player Controller Script Continua

Bastano pochi passaggi per implementare per far saltare il nostro giocatore.
Avremo bisogno di uno stato di animazione per saltare e cadere, e anche del codice per controllare le cose.

Cominciamo aggiungendo altri due parametri al nostro Player Animator. Aggiungi un float chiamato `vSpeed`` e un Bool chiamato` Ground`. Useremo vSpeed ​​per mantenere la nostra velocità verticale e Ground sarà in posizione per aiutarci a rilevare quando il nostro personaggio è a terra, consentendo un salto più realistico. (Saltare in aria senza toccare il suolo è più come volare).

Torna nella finestra della scena, crea un nuovo oggetto di gioco vuoto. Chiamalo groundcheck e aggiungi un Circle Circle Collider ad esso.
Trascina il nuovo Collider nell'oggetto Player nella finestra Gerarchia. Cambia il raggio del collider del groundcheck in 0.1 e cambia la sua posizione di trasformazione in -1. Questo mette un piccolo cerchio proprio sotto i piedi dei robot. Taggalo anche come Player e inseriscilo nel Player Layer.

Ora aggiorniamo il nostro script per utilizzare i nostri nuovi parametri e mettere in atto il codice per far saltare Robot quando viene premuta la barra spaziatrice.

Aggiorna il tuo script RobotController in modo che sia il seguente.

 utilizzando UnityEngine; utilizzando System.Collections; RobotController di classe pubblica: MonoBehaviour {// Questa sarà la nostra massima velocità poiché moltiplicheremo sempre per 1 float pubblico maxSpeed ​​= 2f; // un valore booleano per indicare se siamo rivolti a sinistra o no bool facingLeft = true; // un valore per rappresentare il nostro animatore Animator Animator; // per controllare ground e avere un jumpforce possiamo cambiare nell'editor bool grounded = false; trasformazione pubblica groundCheck; float groundRadius = 0.2f; public LayerMask whatIsGround; public float jumpForce = 700f; // Utilizzalo per l'inizializzazione void Start () {// imposta anim sul nostro animatore anim = GetComponent (); } void FixedUpdate () {// imposta il nostro vSpeed ​​anim.SetFloat ("vSpeed", rigidbody2D.velocity.y); // imposta il nostro bool grounded grounded = Physics2D.OverlapCircle (groundCheck.position, groundRadius, whatIsGround); // imposta il terreno nel nostro animatore in modo che corrisponda all'animazione animata. SetBool ("Ground", grounded); float move = Input.GetAxis ("Horizontal"); // Ci dà uno se ci stiamo muovendo tramite i tasti freccia // sposta i nostri giocatori rigidbody rigidbody2D.velocity = nuovo Vector3 (move * maxSpeed, rigidbody2D.velocity.y); // imposta la nostra velocità anim.SetFloat ("Speed", Mathf.Abs (move)); // se ci stiamo muovendo a sinistra ma non affrontando la rotazione a sinistra, e viceversa if (sposta 0 && facingLeft) {Flip (); }} void Update () {// se siamo a terra e la barra spaziatrice è stata premuta, cambia il nostro stato fondamentale e aggiungi una forza verso l'alto se (a terra && Input.GetKeyDown (KeyCode.Space)) {anim.SetBool (" Ground", false); rigidbody2D.AddForce (nuovo Vector2 (0, jumpForce)); }} // capovolgi, se necessario, annulla Flip () {facingLeft =! facingLeft; Vector3 theScale = transform.localScale; theScale.x * = -1; transform.localScale = theScale; }} 
Ritorna di nuovo a Script controller robot nell'Inspector e assicurati di impostare What Is Ground su tutto tranne che sul giocatore. Seleziona tutto, quindi apri di nuovo la finestra di dialogo e deseleziona Player. (Grazie c0)

Nel prossimo passaggio creeremo un albero di fusione Animator per gestire il salto e la caduta.



Passaggio 8: crea un'animazione dell'albero della miscela

Facciamo un albero misto per contenere i nostri diversi stati di caduta / salto. Potremmo fare animazioni separate per entrambi, ma questo è più efficiente e richiede meno ingombro per il nostro piccolo gioco. Inoltre è bello. (Ho già detto che Unity ospita un ottimo materiale didattico?)

Torna alla finestra di animazione del tuo lettore, con l'oggetto Player selezionato crea 5 nuove clip di animazione, chiamale jump1 -jump5.

Per ogni clip, trascinare un fotogramma dal jumpsheet, nell'ordine. cioè saltare la prima immagine a jump1, e così via.

Apri di nuovo la finestra Animator, fai clic con il pulsante destro del mouse, crea ... nuovo dall'albero insipido. Chiamalo JumpFall.
Fai doppio clic sul nuovo stato JumpFall, aprendo l'albero di fusione nella finestra di ispezione.

Fai clic sul piccolo segno più e sul campo Aggiungi movimento, esegui questa operazione cinque volte.

Modificare la soglia in un intervallo compreso tra -13 e 10 e modificare il parametro di soglia su vSpeed.

Se non sei soddisfatto dell'animazione, puoi modificare i valori deselezionando Automat Threshold. Per questo semplice gioco, sembra abbastanza buono. (L'animatore è diventato pigro ... di nuovo)

Ora torna alla finestra di Animator, vedrai l'albero di fusione aperto, fai clic su Livello base nell'angolo in alto a sinistra per tornare ai nostri stati di base.

Ora dovresti eliminare anche tutti gli stati di salto generati automaticamente, da Jump1 a Jump5. (Grazie c0)

Crea una transizione da qualsiasi stato al nuovo stato JumpFall e quindi una da JumpFall al minimo. Ciò significa che possiamo andare nell'animazione di salto da qualsiasi stato, cioè se cadiamo.

Imposta la transizione da Any State a JumpFall per quando è Ground falso e la transizione da JumpFall a inattivo a quando ground è true.

Fatto tutto, esegui di nuovo il gioco e dovresti riuscire a far saltare e animare Robot con la barra spaziatrice. L'animazione è un po 'a scatti per mancanza di fotogrammi, puoi giocare con il campo di movimento per cambiarlo un po' se vuoi.

Step 9: Distruttori

Nei prossimi passi, creeremo oggetti che generano più oggetti e senza un po 'di pulizia in corso, il nostro gioco si impantanerà rapidamente. Con questo in mente, ci occuperemo della pulizia posizionando alcuni oggetti fuori dallo schermo per distruggere gli oggetti mentre escono dall'area di gioco.

Il nostro gioco sarà uno scroller laterale, quindi ne posizioneremo uno sotto la scena per catturare oggetti che cadono (come il Player) e uno fuori schermo a sinistra per ripulire tutto ciò che è già passato.

Inizia creando un quad. Fai clic su GameObject -. Crea altro -> Quad. Cambia la sua posizione di trasformazione da x a -25 e y su 0. Quindi imposta la scala di trasformazione in modo che X sia 1 e y sia 25.

Dai un nome interessante all'oggetto quad, come Destroyer Rimuovi il componente Mesh Collider e aggiungi un box collider 2D, ma questa volta seleziona la casella "Is Trigger".

Aggiungi anche un 2D corpo rigido ad esso, ma imposta la scala di gravità nella finestra di ispezione su zero.

Nell'area di lavoro Progetto, apri la cartella Script e aggiungi un nuovo script C #, chiamalo Destroyer. Fare doppio clic su di esso e aprire Monodevelop.

Immettere il codice seguente nel nuovo script e salvarlo.

 utilizzando UnityEngine; utilizzando System.Collections; distruttore di classe pubblica: MonoBehaviour {// Utilizzalo per l'inizializzazione void Start () {} void OnTriggerEnter2D (Collider2D altro) {// se l'oggetto che ha attivato l'evento è taggato player se (other.tag == "Player") {Debug .Rompere (); ritorno; } if (other.gameObject.transform.parent) {Destroy (other.gameObject.transform.parent.gameObject); } else {Destroy (other.gameObject); }}} 

Trascina lo script Distruggi sull'oggetto Distruttore.
Ora fai clic con il pulsante destro del mouse sull'oggetto Destroyer nella finestra Gerarchia e seleziona Duplica. Cambia la trasformazione del nuovo Destroyer in posizione x = 0, y = -15 e la scala in x = 50 e y = 1.

Se esegui il gioco ora e esci dalla piattaforma (ricorda, c'è una barriera invisibile sulla sinistra), dovrebbe mettere in pausa il gioco e riportarti all'editor.

Lo risolveremo in un passaggio successivo.

L'ultima cosa da fare con i nostri oggetti Destroyer è di farli allontanare dall'oggetto della videocamera, poiché vorremmo che li seguissero o non faranno molto. Per fare ciò, selezionali e trascinali nell'oggetto Fotocamera principale.

Passaggio 10: la mano

La mano che disegna la linea è piuttosto semplice. Facciamolo.

Trascina prima lo sprite della mano nella finestra della scena, posizionalo utilizzando l'oggetto della fotocamera per vedere dove si trova nella scena.

Trasforma la scala in modo che x = 2 e y = 2.

Crea un nuovo oggetto di gioco vuoto e chiamalo Penciltip. Usa l'editor di scene per posizionarlo sulla punta della matita.

Dagli un piccolo tag in modo che tu possa trovarlo facilmente se necessario. Fallo facendo clic sull'icona del cubo nell'Inspector.

Ora trascina Penciltip nell'oggetto mano per accoppiarli insieme. Trascina infine l'oggetto mano nella Videocamera principale nella finestra Gerarchia.

Non fa ancora nulla, ma i pezzi sono a posto. consente di impostare alcuni altri bit di cui avremo bisogno.

Passaggio 11: linea della matita

Un prefabbricato è come una registrazione di un oggetto, lo trasformi in un prefabbricato e puoi usarlo a piacimento nella tua scena.
Li useremo per gran parte del resto del gioco, poiché il livello viene generato a livello di programmazione.

Inizia creando una nuova cartella nella cartella Risorse e chiamala Prefabs. Crea un nuovo prefabbricato facendo clic con il tasto destro e selezionando Prefab. Denominare la nuova pencillina prefabbricata.

Trova lo sprite chiamato pencilline nella cartella sprite e trascinalo nel nuovo gameObject nella finestra della gerarchia.

Aggiungi un raccoglitore di scatole 2D e ridimensionalo per adattarlo all'immagine pencillina. 0, 03 per 0, 05 opere.

Apri la cartella Prefab, quindi trascina GameObject sul prefabbricato. L'icona cambierà per corrispondere al nuovo prefabbricato.

Elimina l'oggetto di gioco dopo averlo inserito nel tuo prefabbricato. Non avremo più bisogno dell'originale.

Ora aggiungi un nuovo script C # nella cartella Scripts, chiamalo pencilline. Aprilo e inserisci il seguente script.

 utilizzando UnityEngine; utilizzando System.Collections; pencilline di classe pubblica: MonoBehaviour {// per fare riferimento al nostro gioco pubblico prefabbricato di pencilline GameObject obj; float lastx = 0f; // Usa questo per l'inizializzazione void Start () {} // L'aggiornamento viene chiamato una volta per frame void Update () {// se ci siamo spostati abbastanza lontano crea una nuova pencillina if (transform.position.x> (lastx + 0.02f )) {Istantanea (obj, transform.position, Quaternion.identity); lastx = transform.position.x; lastx = transform.position.x; }}} 
Trascina lo script sull'oggetto matita in Mano. Quindi con la punta di matita ancora selezionata, apri la cartella prefabbricata e trascina il prefabbricato in pencillina sul nuovo parametro obj sul controller di script.

La nostra fotocamera non ha ancora script di controllo, ma se esegui il gioco, dovresti vedere un oggetto pencilline generato sulla punta della matita. Puoi vederlo perché lo sfondo è blu e la linea è stata creata per uno sfondo bianco.

Passaggio 12: Rotola fotocamera!

Facciamo girare la fotocamera.
L'oggetto Camera è tutto realizzato, quindi abbiamo davvero solo bisogno di uno script del controller.

Solo un piccolo cambiamento prima di scrivere la sceneggiatura. Il colore di sfondo. Deve essere bianco, la linea apparirà sbriciolata in caso contrario, per non parlare del post che prende nota se dovessi decidere di usarli.

Basta selezionare la videocamera principale nella finestra della gerarchia e fare clic sul campione di colore in Impostazioni, verrà visualizzato un selettore di colori. Scegli il bianco

Ok, nuova sceneggiatura, ho chiamato il mio pancam. Creane uno nella cartella degli script e aprilo in Monodevelop, quindi inserisci quanto segue.

 utilizzando UnityEngine; utilizzando System.Collections; pancam di classe pubblica: MonoBehaviour {float ydir = 0f; giocatore pubblico di GameObject; // Usa questo per l'inizializzazione // L'aggiornamento viene chiamato una volta per frame void Update () {// controlla che il giocatore esista e poi procedi. altrimenti si verifica un errore quando il giocatore muore if (giocatore) {// se il giocatore ha superato la posizione x di -1, quindi si inizia a spostare la telecamera in avanti con una posizione Y casuale se (player.transform.position.x> -1) {float randy = 0f; randy = Random.Range (0f, 100f); if (randy 20 && randy 80) {ydir = 0f; } transform.position = new Vector3 (transform.position.x + 0.03f, transform.position.y + ydir, -10); }}}} 
Ora devi solo applicare lo script alla videocamera principale nella gerarchia, quindi trascinare l'oggetto Player sul parametro dello script.

Prova di nuovo il gioco, hai appena creato un corridore infinito !!! Be 'quasi. Abbiamo ancora bisogno di alcune cose, ma ora si sta avvicinando.

La mia mano è solo un po 'più alta di quanto io la voglia, ma la spingerò leggermente nell'editor di scene.

Passaggio 13: aggiungere un punteggio

Aggiungi un nuovo oggetto GUIText dal menu GameObject e chiamalo Punteggio.

Cambia il valore del testo in Punteggio e il colore in nero in Impostazioni.
Apri la finestra di gioco, se non è disponibile, puoi trovarla sotto la finestra a discesa in alto.

Regola la posizione Trasforma, per qualche motivo funziona in modo strano per gli oggetti della GUI, pensala come percentuale dello schermo visualizzabile, dove 0, 5 è 50% e 0, 0 è angolo in basso a sinistra.
X = 0, 3 e y = 0, 97 lo posiziona in alto vicino all'angolo in alto a sinistra.

Ora dobbiamo aggiungere un po 'più di codice al nostro script Camera. Aggiorna lo script con queste modifiche.
 utilizzando UnityEngine; utilizzando System.Collections; pancam di classe pubblica: MonoBehaviour {float ydir = 0f; giocatore pubblico di GameObject; // per il nostro oggetto GUIText e la nostra GUIlement pubblica GUIElement; float playerScore = 0; // questa funzione aggiorna il nostro oggetto guitext void OnGUI () {gui.guiText.text = "Score:" + ((int) (playerScore * 10)). ToString (); } // questa è una funzione generica che possiamo chiamare per aumentare il punteggio di un importo pubblico void aumentoScore (int importo) {playerScore + = importo; } // L'aggiornamento viene chiamato una volta per frame void Update () {// verifica che il giocatore esista e quindi procedi. altrimenti si verifica un errore quando il giocatore muore if (giocatore) {// se il giocatore ha superato la posizione x di -1, quindi si inizia a spostare la telecamera in avanti con una posizione Y casuale se (player.transform.position.x> -1) {/ / aggiorna il nostro punteggio ad ogni tick dell'orologio playerScore + = Time.deltaTime; float randy = 0f; randy = Random.Range (0f, 100f); if (randy 20 && randy 80) {ydir = 0f; } transform.position = new Vector3 (transform.position.x + 0.03f, transform.position.y + ydir, -10); }}}} 

Salva lo script pancam e torna all'unità.

Seleziona di nuovo la videocamera principale e vedrai che un nuovo parametro è disponibile nel componente Script in Impostazioni. Trascina l'oggetto Score GuiText sul parametro Gui.

Prova a giocare di nuovo, ora dovresti avere un punteggio crescente.

Step 14: Bombe assenti

Non esiste ancora alcun pericolo reale per il nostro eroe. Lo sistemeremo. Facciamo cadere alcune bombe dei cartoni animati dal cielo e spezziamo la linea.

Crea un nuovo oggetto di gioco vuoto e chiamalo Bomba. Nella cartella sprite, trova lo sprite della bomba, aprilo e aggiungi il primo fotogramma a Bomb. Regola la scala di trasformazione su X = 0, 5, Y = 0, 5.

Aggiungi un raccoglitore di cerchi 2D e modifica la sua scala e posizione per avere un bell'aspetto. Vogliamo che le bombe cadano, quindi avremo anche bisogno di un 2D rigido, aggiungendo anche quel componente.

Avremo anche bisogno di un animatore per controllare i nostri stati di bomba, quindi aggiungi anche quello. Deseleziona Applica movimento di root e seleziona la casella Animate Physics in Inspector.

Apri la finestra dell'animazione, assicurati di avere ancora Bomb_0 della bomba ancora selezionata. Aggiungi un'animazione e chiamala bombidle, questo creerà un nuovo stato predefinito nel nostro Animator. Usa i primi 3 fotogrammi del foglio sprite (trascina e rilascia), quindi riduci la frequenza dei fotogrammi facendo scendere il campione a circa 20.

Crea un'altra nuova clip, chiama questa esplosione bomba e usa i fotogrammi rimanenti del foglio sprite bomba. Ancora una volta, ridurre il framerate a circa 20.

Giù nella finestra Animator, crea una transizione da bombidle a bombexplode, lascia la condizione per il tempo di uscita e cambia il valore in 5, 00. Ciò significa che la nostra bomba rimarrà inattiva (miccia accesa) per 5 secondi prima di cambiare gli stati per esplodere.

Crea una terza animazione nella finestra Animazione, chiamala bombdead e lasciala vuota. Nell'Animatore, crea una transizione da esplosione di bombe a bombdead.

Crea un nuovo script chiamato bomb nella cartella degli script.

 utilizzando UnityEngine; utilizzando System.Collections; bomba di classe pubblica: MonoBehaviour {// un titolare per il nostro animatore Animator Animator; // un galleggiante pubblico per il raggio di esplosione galleggiante pubblico explodeRadius = 1f; // Usa questo per l'inizializzazione void Start () {anim = GetComponent (); } // L'aggiornamento viene chiamato una volta per frame void Update () {// se abbiamo finito di esplodere if (anim.GetCurrentAnimatorStateInfo (0) .IsName ("bombdead")) {// distruggere tutti gli oggetti in un raggio a meno che non lo siano taggato Giocatore o mano Collider2D [] colliders = Physics2D.OverlapCircleAll (transform.position, explodeRadius); foreach (Collider2D col in colliders) {if (col.tag! = "Player" && col.tag! = "hand") {Distruggi (col.collider2D.gameObject); }} Distruggi (this.gameObject); }}} 
Infine, trascina lo script bomb nel tuo oggetto bomb_0.

Una piccola cosa che ho quasi dimenticato, è etichettare la mano come mano. per fare ciò, seleziona l'oggetto mano nella finestra della gerarchia, quindi sotto tag, seleziona aggiungi tag. Crea un nuovo tag in element0 chiamato hand, quindi con l'oggetto hand selezionato, cambia il tag in hand. Cambia anche a portata di mano il tag dell'oggetto matita.

Prova a eseguire il gioco, la bomba dovrebbe cadere, esplodere ed eliminare la barra di navigazione. (dipende ovviamente da dove l'hai posizionato)

Passaggio 15: generazione della bomba

Un po 'difficile giocare ora, quello che faremo è creare un oggetto di spawn per generare le bombe, proprio come la punta di una matita genera la pencillina.

La prima cosa di cui abbiamo bisogno è un prefabbricato della nostra bomba. Passa alla cartella prefabbricata e crea un nuovo prefabbricato, chiamalo bomba. Trascina l'oggetto Bomb nel prefabbricato della bomba. Elimina l'oggetto bomba originale nella gerarchia dopo averlo come prefabbricato.

Crea un nuovo oggetto quad nome BombSpawn. Posizionalo sopra la camera verifica nella vista Fotocamera principale o nella finestra Gioco.

Crea un nuovo script nella cartella degli script chiamato BombSpawner e assegnagli il seguente codice.

 utilizzando UnityEngine; utilizzando System.Collections; bombSpawner di classe pubblica: MonoBehaviour {// un array di oggetti pubblici per il quale gli oggetti generano pubblico GameObject [] obj; // min e max volte per un altro spawn float pubblico spawnMin = 3f; spawn float pubblicoMax = 2f; void Start () {// start spawn Spawn (); } void Spawn () {// ottieni un numero casuale float rand = Random.Range (0, 1000); // se il numero casuale è maggiore di 700 crea una bomba if (rand> 700) {Istantanea (obj [Random.Range (0, obj.GetLength (0))], transform.position, Quaternion.identity); } // invoca spawn ad intervalli di tempo casuali tra min e max Invoke ("Spawn", Random.Range (spawnMin, spawnMax)); }} 
Per prima cosa, fai diventare l'oggetto BombSpawn un figlio della videocamera principale trascinandolo nella videocamera attraverso la finestra della gerarchia.
Ora trascina lo script sull'oggetto BombSpawn nella finestra della Gerarchia. Ora con BombSpawn aperto nell'Inspector, trascina il prefabbricato Bomb sul piccolo triangolo con l'etichetta Obj nel componente script.

Dobbiamo aggiungere un'istruzione if nel nostro script Bomb (dall'ultimo passaggio) per ritardare la caduta delle bombe fino a quando il giocatore non ha iniziato a camminare sulla linea. Un rapido controllo nella mia scena mostra la mano seduta a 7.qualcosa quindi ritarderò le gocce fino a quando le bombe saranno passate alle 12.
Ecco lo script Bomb modificato.

 bomba di classe pubblica: MonoBehaviour {// un titolare per il nostro animatore Animator Animator; // un galleggiante pubblico per il raggio di esplosione galleggiante pubblico explodeRadius = 1f; // Usa questo per l'inizializzazione void Start () {anim = GetComponent (); } // L'aggiornamento viene chiamato una volta per frame void Update () {// se questa bomba viene generata dopo che il generatore ha raggiunto una posizione oltre x = 12 if (transform.position.x> 12) {this.gameObject.SetActive (true) ; } // altrimenti bombardare nessun altro funzionante {this.gameObject.SetActive (false); } // se abbiamo finito di esplodere if (anim.GetCurrentAnimatorStateInfo (0) .IsName ("bombdead")) {// distruggi tutti gli oggetti in un raggio a meno che non siano taggati Player o mano Collider2D [] colliders = Physics2D.OverlapCircleAll ( transform.position, explodeRadius); foreach (Collider2D col in colliders) {if (col.tag! = "Player" && col.tag! = "hand") {Distruggi (col.collider2D.gameObject); }} Distruggi (this.gameObject); }}} 
Ora Robot può saltare sulla linea e camminare un po 'prima che le bombe inizino a cadere ... provalo. Ancora non molto impegnativo. Dupliciamo l'oggetto BombSpawn !! Quindi spostalo un po 'e abbiamo due generatori di bombe, giochiamo.

Step 16: Platforms (o Doodles)

Per generare le piattaforme doodle, iniziamo creando alcuni prefabbricati. Crea una nuova cartella nella cartella Prefab e chiamala Doodles.

Crea 10 nuovi prefabbricati chiamati doodle1 attraverso doodle10.

Crea un nuovo oggetto di gioco vuoto, non è necessario nominarlo.

Apri la cartella Sprites e trova il foglio scarabocchi, aprilo e seleziona il primo doodle. Trascinalo nell'oggetto di gioco vuoto nella finestra della gerarchia.

Aggiungi un raccoglitore di scatole 2D ad esso nella finestra di ispezione, quindi gioca con la scala e il centro per farlo sedere bene sul doodle. Ricorda, questo è ciò su cui atterrerà Robot.

Apri la cartella Prefabs / Doodles con al suo interno i prefabbricati vuoti, quindi trascina il nuovo GameObject nel prefabbricato doodle1.

Ora, invece di ripetere l'intero processo, basta tornare indietro alla cartella sprite, afferrare il doodle successivo e trascinarlo nel componente Sprite Renderer dell'oggetto di gioco, regolare il posizionamento del collider e inserirlo nel successivo prefabbricato doodle.

Ripetere l'operazione per i rimanenti prefabbricati doodle. Una volta registrati tutti come prefabbricati, è possibile eliminare l'oggetto GameObject creato per crearli.

Ora duplica un oggetto BombSpawn sotto la nostra fotocamera principale e spostalo dallo schermo a destra. Dagli un nuovo nome in Inspector, qualcosa come DoodleSpawn.

Quindi trascina ciascuno dei nuovi prefabbricati nel parametro Obj del nostro componente script. Trascina il primo nell'elemento 0 per sostituire la bomba, e gli altri nel piccolo triangolo accanto a Obj per aggiungerli all'elenco.

Gioca con il parametro min / max nel componente script per modificare la frequenza con cui vengono generati. Duplica l'oggetto DoodleSpawn e spostalo verso l'alto se desideri un altro set di livelli.

Una cosa che ho notato durante il gioco è che la velocità massima dei robot era troppo bassa, l'ho aumentata qui. Vai all'oggetto Player e regola la variabile maxSpeed ​​nel componente Script se trovi lo stesso problema.

Step 17: Pickup punti bonus

Fare i Pickup è molto simile a fare i doodle. Alcune piccole differenze Inizia creando una nuova cartella nella cartella Prefabs chiamata Bonus, e popolala con 6 prefabbricati vuoti.

Avremo bisogno di uno script per gestire l'aggiunta dei punti bonus all'oggetto GUIText, quindi nella cartella degli script, creare un nuovo script chiamato BonusPoints. Ecco lo script per entrare in Monodevelop.

 utilizzando UnityEngine; utilizzando System.Collections; BonusPoints di classe pubblica: MonoBehaviour {// crea un contenitore per l'heads up display pancam hud; void OnTriggerEnter2D (Collider2D col) {if (col.tag == "Player") {hud = GameObject.Find ("Main Camera"). GetComponent (); hud.increaseScore (10); Distruggi (this.gameObject); }}} 

Ora torna sulla scena e crea un nuovo GameObject vuoto. Trova i potenziamenti nella cartella Sprites e trascina il primo sprite nel nuovo GameObject.

Trasforma la scala in x = 2, y = 2 sopra nella finestra di ispezione, quindi aggiungi un riquadro di raccolta 2D. Questa volta vogliamo selezionare la casella contrassegnata Is Trigger.

Ora trascina lo script BonusPoints in powerups_0. Apri la cartella prefabbricati / bonus e trascina GameObject nel prefabbricato.

Come nel passaggio precedente, basta sostituire lo Sprite Renderer Sprite per ogni prefabbricato e salvarli.

Una volta realizzati i sei Prefabbricati bonus, possiamo eliminare l'oggetto GameOb che abbiamo usato per costruirli.

Per generare i nostri bonus, dupliceremo semplicemente l'oggetto DoodleSpawn, lo rinomineremo BonusSpawn, lo sposteremo un po 'in alto e sostituiremo l'oggetto che genera.

Step 18: Game Over

Il tratto di casa !! Tutto ciò di cui abbiamo bisogno ora è che il giocatore muoia piuttosto che una pausa nel codice. Questo, e avremo bisogno di una seconda scena, per mostrare che il gioco è finito e offrire la possibilità di giocare di nuovo.

Aggiungiamo questa scena alla build prima di iniziare la nuova scena. Nel menu a discesa File, seleziona Impostazioni di creazione.
Nella finestra di dialogo che si apre, fai clic sul pulsante Aggiungi corrente e verifica che la scena abbia un numero di scena pari a zero. Chiudi la finestra di dialogo

Assicurati di salvare la scena corrente e quindi seleziona Nuova scena. Assegna un nome alla scena GameOver e inseriscila nella cartella Risorse.

Aggiungi un oggetto GUIText dal menu a discesa GameObject. Nella finestra di ispezione, cambia l'ancora in alto al centro e l'allineamento al centro. Cambia anche la dimensione del carattere in 20 e il colore in nero.

Torna nella scena, trascina la nota adesiva chiamata notes_score sulla scena e posizionala all'incirca al centro, usa la finestra di gioco per vedere come apparirà. Fai lo stesso con lo sprite di Game Over, lascialo cadere dove sembra buono.

Crea uno script gameOver nella cartella degli script, come questo.

 utilizzando UnityEngine; utilizzando System.Collections; public class GameOver: MonoBehaviour {int score = 0; GUilement pubblico GUIElement; // Usa questo per inizializzare void Start () {// ottieni il nostro punteggio da score playerprefs = PlayerPrefs.GetInt ("Score"); // moltiplica per 10 come abbiamo fatto sul punteggio visualizzato punteggio = punteggio * 10; } void OnGUI () {// imposta il nostro testo sul nostro punteggio gui.guiText.text = score.ToString (); // se si preme il pulsante Riprova carica la scena 0 se (GUI.Button (nuovo Rect (Screen.width / 2-50, Screen.height / 2 +150.100, 40), "Riprova?")) {Application.LoadLevel (0); } // e pulsante Esci se (GUI.Button (new Rect (Screen.width / 2-50, Screen.height / 2 +200.100, 40), "Esci")) {Application.Quit (); }}} 

Salvalo e trascinalo sulla fotocamera principale nella nostra nuova scena.

Quasi tutto finito, dobbiamo aggiungere una funzione al nostro copione della telecamera per far avanzare lo spartito e dobbiamo modificare il nostro script distruttore in cui abbiamo la pausa del codice per inviarci sulla scena GameOver.

Il nuovo copione della fotocamera.

 utilizzando UnityEngine; utilizzando System.Collections; pancam di classe pubblica: MonoBehaviour {float ydir = 0f; giocatore pubblico di GameObject; // per il nostro oggetto GUIText e la nostra GUIlement pubblica GUIElement; float playerScore = 0; // questa funzione aggiorna il nostro oggetto guitext void OnGUI () {gui.guiText.text = "Score:" + ((int) (playerScore * 10)). ToString (); } // questa è una funzione generica che possiamo chiamare per aumentare il punteggio di un importo pubblico void aumentoScore (int importo) {playerScore + = importo; } // La telecamera verrà disabilitata quando si carica un livello, si imposta il punteggio in playerprefs void OnDisable () {PlayerPrefs.SetInt ("Score", (int) (playerScore)); } // L'aggiornamento viene chiamato una volta per frame void Update () {// verifica che il giocatore esista e quindi procedi. altrimenti si verifica un errore quando il giocatore muore if (giocatore) {// se il giocatore ha superato la posizione x di -1, quindi si inizia a spostare la telecamera in avanti con una posizione Y casuale se (player.transform.position.x> -1) {/ / aggiorna il nostro punteggio ad ogni tick dell'orologio playerScore + = Time.deltaTime; float randy = 0f; randy = Random.Range (0f, 100f); if (randy 20 && randy 80) {ydir = 0f; } transform.position = new Vector3 (transform.position.x + 0.03f, transform.position.y + ydir, -10); }}}} 

Lo script Destroyer fisso

 utilizzando UnityEngine; utilizzando System.Collections; distruttore di classe pubblica: MonoBehaviour {void OnTriggerEnter2D (Collider2D altro) {// se l'oggetto che ha attivato l'evento è taggato player if (other.tag == "Player") {Application.LoadLevel (1); } if (other.gameObject.transform.parent) {Destroy (other.gameObject.transform.parent.gameObject); } else {Destroy (other.gameObject); }}} 

Indovina un po? Hai appena fatto un gioco! L'ho fatto anch'io!! piangi per noi!
Ok, quindi non è il miglior gioco del mondo, ma non è questo il punto. Almeno non era per me. Sono rimasto scioccato da quanto tutto sia diventato semplice e ho dovuto condividere. Vai a fare, non vedo l'ora di giocare ad alcuni nuovi fantastici giochi!

Passaggio 19: File, ecc

ho incluso quest'ultimo passaggio per rendere un po 'più semplice l'accesso agli script che abbiamo appena scritto insieme.
Quindi, ecco gli script che abbiamo appena esaminato.

Grazie mille per essere passato, spero che ti sia piaciuto tanto quanto me.
Condividi e divertiti.

Oh e ...... vota fjordcarver?

allegati

  • bomb.zip Download
  • Scarica BombSpawner.zip
  • Scarica BonusPoints.zip
  • Scarica Destroyer.zip
  • Scarica GameOver.zip
  • pancam.zip Download
  • pencilline.zip Download
  • Download RobotController.zip

Articoli Correlati