Programmare un gioco con Unity: una guida per principianti

Programmare un gioco con Unity: una guida per principianti
Questa guida è disponibile per il download come PDF gratuito. Scarica questo file ora . Sentiti libero di copiarlo e condividerlo con i tuoi amici e familiari.

Una caratteristica sorprendente dell'economia di Internet è l'ascesa dei videogiochi indipendenti. Un tempo dominio esclusivo di studi tripla A da migliaia di uomini e multimilionari, sono stati sviluppati numerosi set di strumenti che portano le moderne risorse di sviluppo di giochi nelle mani di individui o piccole raccolte ad hoc di programmatori e designer. Abbiamo già discusso dei migliori giochi indie , quindi assicurati di dare un'occhiata a quelli per trarre ispirazione su ciò che può essere ottenuto con strumenti come Unity.





Questi team di sviluppo di giochi indipendenti hanno dimostrato un'agilità e una tolleranza al rischio che, in molti casi, consentono loro di spingere l'innovazione del gameplay più velocemente rispetto alle loro controparti con un budget elevato. Negli ultimi anni sono stati presentati in anteprima un certo numero di titoli indie di incredibile successo, tra cui Minecraft , Limbo , e Super Carne Ragazzo , e anche se non hai competenze per creare giochi come questo, puoi creare un gioco usando Buildbox .





Nel panorama in rapida evoluzione dello sviluppo di giochi indie, Unità è emerso come una sorta di standard de facto: il suo basso costo, la facilità d'uso e l'ampio set di funzionalità lo rendono ideale per lo sviluppo rapido di giochi. L'unità è così flessibile, che puoi anche crea i tuoi controller di gioco personalizzati con un po' di bricolage!





Anche grandi studi come CCP (Developers of vigilia in linea ) utilizzarlo per creare rapidamente prototipi di concetti di gioco. Unity fornisce un 'motore di gioco in una scatola': un motore di fisica e rendering con hook per diversi linguaggi di scripting, adattabile praticamente a qualsiasi genere di videogioco.

Mentre Unity fornisce un editor visivo per manipolare l'ambiente di gioco, Unity non è uno strumento di creazione di giochi a 'programmazione zero'. Ti richiede di programmare per produrre risultati, ma ti offre anche uno strumento molto più flessibile e potente di qualsiasi programma di 'creatore di giochi' potrebbe.



L'unità non farà il lavoro per te, ma abbasserà sostanzialmente la barriera all'ingresso. Partendo completamente da zero con C++ e OpenGL, possono volerci giorni per arrivare al punto in cui viene effettivamente visualizzato qualcosa sullo schermo. Usando Unity, ci vogliono circa dieci secondi. Unity mette gli elementi di base della creazione di giochi nelle mani dei programmatori alle prime armi in modo veloce e intuitivo.

Oggi ti guiderò attraverso tutto ciò che devi sapere per creare un gioco in Unity, suddiviso in dieci capitoli principali:





§1–Versioni dell'Unità

§2–Installazione di Unity





§3–Una breve introduzione al paradigma orientato agli oggetti

§4–Unità di base

§5–Esempio: elementi base di un gioco

§6–Scripting in Unity

§7–Esempio: Script Pong

§8–Esplorare la documentazione/Ulteriori informazioni

§9–Creazione del gioco/Compilazione su un'applicazione autonoma

§10-Note di chiusura

1. Versioni di Unity

Unity è disponibile in due versioni di base: la versione pro e la versione gratuita. Ci sono numero di differenze , ma, in generale, la versione pro supporta una serie di miglioramenti visivi (come ombre morbide in tempo reale e post-elaborazione) e un gran numero di funzionalità relativamente minori che sono estremamente utili per i giochi più complessi.

Detto questo, per la maggior parte dei giochi relativamente semplici che potresti voler creare, la versione gratuita di Unity è perfettamente adeguata. Analizzeremo le differenze chiave di seguito in modo più dettagliato per coloro che sono interessati.

1.1 Prezzi

La versione gratuita di Unity è, ovviamente, gratuita. Tuttavia, ci sono alcune limitazioni: la versione gratuita di Unity non può essere concessa in licenza a nessuna azienda con un reddito annuo superiore a $ 100.000 . Sebbene tali organizzazioni vadano oltre lo scopo di questa guida, se sospetti di poter diventare una tale organizzazione, è probabilmente consigliabile optare per la versione Pro.

La versione Pro di Unity è $ 75 un mese, o $ 1500 per una licenza permanente e non ha limiti su ciò che puoi fare con i giochi creati con esso. È disponibile anche una prova gratuita di 30 giorni, che utilizzeremo per questa guida, al fine di darti una panoramica il più completa possibile delle funzionalità disponibili. Una licenza per studenti di un anno è disponibile anche tramite Studica per $ 129 .

1.2 Caratteristiche

Ci sono molte funzionalità assenti nella versione gratuita di Unity. Tuttavia, le differenze più importanti sono le seguenti: la versione gratuita di Unity manca di una serie di opzioni di rendering che consentono giochi più belli e più veloci (supporto LOD, post-elaborazione screen-space, shader avanzati, soft ombre e rendering differito). Manca anche il pieno sistema di animazione meccanico e alcuni strumenti di intelligenza artificiale.

In generale, per progetti complessi e su larga scala o progetti in cui le prestazioni grafiche sono importanti, vale la pena utilizzare la versione pro. Uso la versione pro, perché sviluppo giochi di realtà virtuale per Oculus Rift e il supporto post-elaborazione screen-space è necessario per interagire correttamente con il visore.

2. Installazione di Unity

Unity è semplice da installare. Puoi scaricare l'eseguibile da unity3d.com/get-unity/download .

Una volta scaricato, eseguilo e segui le istruzioni del programma di installazione. Al termine dell'installazione, apparirà una finestra intitolata 'attiva la tua licenza Unity'. Seleziona la casella 'attiva una prova gratuita di 30 giorni di Unity Pro' e poi 'OK'.

Congratulazioni! Ora hai una prova di 30 giorni di Unity Pro. Alla scadenza del periodo di prova, se non desideri acquistare la versione pro, puoi passare alla versione gratuita e mantenere i tuoi contenuti esistenti.

il computer non può connettersi a Internet

3. Una breve introduzione al paradigma orientato agli oggetti

Prima di iniziare con Unity, è importante che esaminiamo un po' le basi. Unity supporta entrambi C # e JavaScript per programmazione di giochi ; lavoreremo con C# per questo tutorial.

Prima di tutto, se non hai mai programmato prima, metti da parte questo tutorial e trascorri qualche giorno lavorando tramite Microsoft C # Guida alla lingua finché non ti senti a tuo agio nell'usare la lingua per compiti semplici.

Se desideri qualcosa di leggermente diverso da C# (ma non necessariamente un linguaggio che puoi usare in Unity), dai un'occhiata alla nostra guida ai sei linguaggi di programmazione più semplici per principianti.

Se hai già programmato in un linguaggio imperativo o orientato agli oggetti come C o Java, sfoglia il primer e familiarizza con come C# differisce da altri linguaggi che hai usato in passato. Ad ogni modo, non procedere con il tutorial finché non ti senti a tuo agio nel risolvere semplici problemi con C# (per esempio, se ti chiedessi di scrivere un programma che stampi i primi cento numeri primi, dovresti essere in grado di scrivere quel programma senza consultando Google).

Il concetto più importante da capire qui è il paradigma orientato agli oggetti (abbreviato come APRIRE ). Nei linguaggi orientati agli oggetti, i programmi sono divisi in unità funzionali chiamate oggetti . Ogni oggetto ha le proprie variabili e funzioni private. Le funzioni specifiche dell'oggetto sono chiamate metodi .

L'idea qui è la modularità: isolando ogni oggetto e costringendo altri oggetti a interagire con esso attraverso i suoi metodi, è possibile ridurre il numero di possibili interazioni non intenzionali e, per estensione, i bug. Puoi anche creare oggetti che puoi riutilizzare in seguito senza modifiche. In Unity, costruirai questi oggetti e li attaccherai a entità di gioco (di cui governeranno il comportamento).

Gli oggetti sono istanziati da classi : una classe è solo un file che dispone la definizione del tuo oggetto. Quindi, se vuoi un mook oggetto che gestisce l'intelligenza artificiale per un nemico nel tuo gioco, dovresti scrivere una classe 'Mook' e quindi allegare quel file a ogni entità nemica. Quando esegui il gioco, ogni nemico sarà dotato di una copia dell'oggetto 'Mook'.

Il collegamento di un nuovo script a un oggetto ha il seguente aspetto:

Primo, seleziona l'oggetto e vai al Ispettore . Clicca sul Aggiungi componente pulsante.

Vai a nuova sceneggiatura , inserisci il nome che desideri e fai clic su creare e aggiungere .

Ora hai un nuovo script che puoi modificare facendo doppio clic su di esso!

Un file di classe ha un aspetto simile a questo:

using UnityEngine;
public class Mook : MonoBehaviour {
private float health;
void Start () {
health = 100;
}
void Update(){
if (health > 0) {
/* Search for player
if you encounter the player on the road, kill him
if you get shot, remove a random amount of health */
}
}
}

Scomponiamo questo:

  • Utilizzando UnityEngine: Questa linea dice a C# che vogliamo usare le librerie di Unity, che ci permettono di connetterci al motore di gioco di Unity.
  • Classe pubblica Mook : MonoBehaviour: Questa riga dichiara la classe e il suo nome -- mook .
  • Salute del galleggiante privato: Questo dichiara una variabile di classe privata (che può essere modificata solo dall'interno della classe). Alla variabile viene assegnato un valore in Cominciare .
  • Inizio vuoto(): Questo dichiara un metodo chiamato Cominciare . Start è un metodo speciale che viene eseguito solo una volta, all'avvio iniziale del gioco.
  • Aggiornamento nullo(): L'aggiornamento è un altro metodo speciale, che viene eseguito su ogni frame. La maggior parte della tua logica di gioco andrà qui.
  • //se incontri il giocatore per strada, uccidilo: Questa riga è un commento (qualsiasi riga che inizia con una doppia barra viene ignorata da C#). I commenti sono usati per ricordare a te stesso cosa fanno particolari pezzi di codice. In questo caso, questo commento viene utilizzato per sostituire un blocco di codice più complicato che fa effettivamente ciò che descrive il commento.

Insieme a Cominciare e Aggiornare , puoi creare un'istanza dei tuoi metodi con quasi tutti i nomi. Tuttavia, i metodi creati non verranno eseguiti a meno che non vengano chiamati. Dichiariamo un metodo per una classe ipotetica chiamata aggiungiDueNumeri che somma due numeri:

public float addTwoNumbers(float a, float b) {
return a+b;
}

Questo dichiara un metodo pubblico (accessibile ad altri oggetti) che restituisce un float, chiamato aggiungiDueNumeri , che accetta due float come input (chiamato a e B ). Quindi restituisce la somma dei due valori come output.

Chiamare questo metodo dall'interno della stessa classe (diciamo, dall'interno Aggiornare ) Somiglia a questo:

float result = addTwoNumbers(1, 2);

La chiamata al metodo da un'altra classe è simile:

addTwoNumbers instance;
float result = instance.addTwoNumbers(1, 2);

Di nuovo, questo crea solo un'istanza della nostra classe, accede al metodo appropriato e gli fornisce i numeri che vogliamo aggiungere, quindi memorizza il risultato in risultato . Semplice.

Se il tuo script è collegato a un oggetto che ha proprietà speciali (come un emettitore di particelle) a cui non è possibile accedere con il normale set di parametri GameObject, puoi scegliere di trattarlo come un diverso tipo di entità di gioco utilizzando il OttieniComponente metodo.

La sintassi per questo assomiglia a questa:

GetComponent().Play();

Se qualcosa di tutto questo non ti è familiare, torna indietro e passa attraverso il primer C#. Ti risparmierà molta frustrazione mentre procediamo.

4. Nozioni di base sull'unità

In questa sezione, esamineremo la meccanica di base del motore di Unity. Il flusso di lavoro in Unity è simile a questo:

  1. Crea un'entità per svolgere un ruolo nel gioco (vuoto Oggetti di gioco può essere utilizzato per compiti logici astratti).
  2. Scrivi o trova un file di classe e aggiungilo all'entità come script (usando il pulsante Aggiungi componente pulsante nel ispettore Visualizza.
  3. Correre > test > eseguire il debug > ripetere finché non funziona e passa all'elemento successivo del gioco.

Unity viene fornito con una serie di schede di visualizzazione di base che possono essere disposte in vari modi secondo il gusto dell'utente. I grandi cinque sono:

  1. Gioco: mostra un'istanza in esecuzione del gioco con cui puoi interagire e testare.
  2. Scena: fornisce una versione statica e modificabile del mondo di gioco .
  3. Ispettore: ti permette di modificare singole entità nel mondo di gioco selezionandole nel editore scheda.
  4. Progetto: consente di sfogliare i file del progetto e trascinare modelli, materiali e altre risorse nel editore scheda per inserirli nel mondo di gioco.
  5. Gerarchia: questa scheda mostra tutti gli oggetti nel mondo, permettendoti di trovare oggetti distanti nella scena e le entità genitori l'una con l'altra facendo clic e trascinando.

Vedi il diagramma qui sotto per le posizioni di tutte queste cose:

4.1 Entità dell'Unità

4.1.1 Maglie

Le maglie sono la strada Geometria 3D è rappresentato nell'Unità. Puoi usare il built-in di Unity primitivo oggetti (cubi, sfere, cilindri, ecc.) o importa i tuoi modelli 3D da un pacchetto di modellazione come Miscelatore o maya . Unity supporta una varietà di formati 3D, tra cui .fbx , e .3ds .

Gli strumenti di base per manipolare le mesh sono i pulsanti di ridimensionamento, rotazione e traduzione nell'angolo in alto a sinistra dell'interfaccia. Questi pulsanti aggiungono icone di controllo ai modelli nella vista dell'editor, che possono quindi essere utilizzati per manipolarli nello spazio. Per modificare la trama o le proprietà fisiche di un oggetto, selezionale e usa il pulsante ispettore vista per analizzare il Materiale e corpo rigido elementi.

4.1.2 Elementi della GUI

Gli sprite e il testo della GUI tradizionale possono essere visualizzati utilizzando il Testo della GUI e il Struttura dell'interfaccia grafica GameObjects nell'editor. Tuttavia, un modo più solido e realistico per gestire gli elementi dell'interfaccia utente consiste nell'utilizzare il testo 3D e Quad GameObjects (con trame trasparenti e uno shader trasparente non illuminato) per posizionare gli elementi HUD nel mondo di gioco come entità.

Nel gerarchia vista, questi elementi di gioco possono essere trascinati sulla fotocamera principale per renderli bambini, assicurandosi che si muovano e ruotino con la fotocamera.

Gli elementi della GUI (testo e trame) possono essere regolati nelle dimensioni e nella scala utilizzando i campi pertinenti nella scheda dell'ispettore.

4.1.3 Materiali

I materiali sono combinazioni di trame e shader e possono essere trascinati direttamente sugli oggetti di gioco dalla scheda del progetto. Un gran numero di shader viene fornito con Unity Pro e puoi regolare la trama ad essi collegata utilizzando la scheda delle impostazioni per un oggetto a cui sono applicati.

Per importare una texture, convertirla in a .jpg , .png , o .bmp , e trascinalo nel risorse cartella nella directory del progetto Unity (che appare in I miei documenti per impostazione predefinita). Dopo alcuni secondi, nell'editor apparirà una barra di caricamento. Al termine, sarai in grado di trovare l'immagine come trama sotto il progetto scheda.

4.1.5 Luci

Le luci sono Oggetti di gioco che proiettano splendore sul mondo. Se non ci sono luci nella scena, tutti i poligoni vengono disegnati allo stesso livello di luminosità, conferendo al mondo un aspetto piatto e sbiadito.

Le luci possono essere posizionate, ruotate e hanno diverse caratteristiche interne che puoi personalizzare. Il intensità cursore controlla la luminosità della luce, e il gamma controlla la velocità di dissolvenza.

Le linee guida in vista della scena mostra la portata massima dell'illuminazione. Gioca con entrambe le impostazioni per ottenere l'effetto desiderato. È inoltre possibile regolare il colore della luce, il motivo ( biscotto visualizzato sulla superficie su cui è puntata la luce e che tipo di bagliore appare sullo schermo quando si guarda direttamente la luce. Il cookie può essere utilizzato per simulare schemi di luce più realistici, creare ombre false drammatiche e simulare proiettori.

I tre principali tipi di luce sono individuare , punto , e direzionale .

Faretti avere una posizione nello spazio 3D e proiettare la luce solo in una direzione in un cono di angolo variabile. Questi sono buoni per torce elettriche, proiettori e, in generale, ti danno un controllo più preciso dell'illuminazione. Le luci spot possono proiettare ombre.

Luci puntiformi avere una posizione nello spazio 3D e proiettare la luce in modo uniforme in tutte le direzioni. Le luci puntiformi non proiettano ombre.

Luci direzionali , infine, servono a simulare la luce solare: proiettano la luce in una direzione come da infinitamente lontano. Le luci direzionali influenzano ogni oggetto nella scena e possono produrre ombre.

4.1.6 Sistemi di particelle

A Sistema di particelle è un Oggetto del gioco che genera e controlla centinaia o migliaia di particelle contemporaneamente. Le particelle sono piccoli oggetti 2D ottimizzati visualizzati nello spazio 3D. I sistemi di particelle utilizzano rendering e fisica semplificati, ma possono visualizzare migliaia di entità in tempo reale senza balbettare, rendendoli ideali per fumo, fuoco, pioggia, scintille, effetti magici e altro ancora.

Ci sono molti parametri che puoi modificare per ottenere questi effetti e puoi accedervi generando un sistema di particelle sotto il editor di componenti > selezione del sistema particellare > aprendo la scheda dell'ispettore . Puoi modificare le dimensioni, la velocità, la direzione, la rotazione, il colore e la trama di ogni particella e impostare anche la maggior parte di questi parametri in modo che cambino nel tempo.

Sotto il collisione attributo, se lo abiliti e imposti lo spazio di simulazione su mondo otterrai particelle che si scontreranno con gli oggetti nel mondo, che possono essere utilizzate per una serie di effetti particellari realistici, tra cui pioggia, acqua in movimento e scintille.

5. Esempio: elementi base di un gioco

Per questo tutorial, faremo un semplice gioco di Pong -- qualcosa che abbiamo già trattato più volte nel fai da te:

  • Arduino Classic Pong
  • Arduino OLED Pong

In questa sezione, esamineremo la disposizione degli elementi principali: il tutorial sugli script verrà dopo.

Per prima cosa, scomponiamo il gioco di Pong nelle sue componenti di base. Per prima cosa, abbiamo bisogno di due pagaie e una palla. La palla vola fuori campo, quindi ci servirà un meccanismo per ripristinarla. Vogliamo anche che il testo mostri il punteggio corrente e, per mostrarti tutti gli elementi principali di Unity, vorremmo un effetto particellare fantasioso quando colpisci la palla. L'intero gioco dovrà essere drammaticamente illuminato.

Che si scompone in a oggetto palla (una sfera), a generatore , due eliche pagaia con emettitori di particelle allegato un Entità testo 3D , e a riflettore . Per questo tutorial, utilizzeremo il materiale fisico predefinito rimbalzo , insieme a rimbalzo combinare impostato moltiplicare . Ecco come appare la configurazione, in dieci schermate:

Per prima cosa, crea un cubo prop per la pagaia.

Scalalo in modo appropriato, duplicalo , e metti a sfera tra le pale per la palla.

Quindi, creare un Oggetto 3DText e scala e posizione correttamente, cambiando il dimensione del font attributo per ottenere un'immagine meno pixelata.

Quindi, creane due sistemi di particelle , scegli le caratteristiche che desideri e collegale ai paddle.

Successivamente, vorrai posizionare e ruotare la telecamera in modo da inquadrare correttamente la scena. Mentre la telecamera è selezionata, puoi vedere una piccola anteprima della vista della telecamera nell'angolo in basso a destra.

Prima di finire, dobbiamo creare due cubi aggiuntivi per essere paraurti, per evitare che la palla rimbalzi fuori dall'area di gioco. Possiamo renderli invisibili deselezionando il renderer di mesh nel scheda ispettore .

Se premi play, ora puoi vedere gli elementi di base del nostro gioco disposti. Non faranno ancora nulla, ma ci arriveremo!

Ora che abbiamo quella configurazione, parleremo di ciò che è coinvolto nello scripting di questi elementi per creare un gioco.

6. Scripting in Unity

Una volta che hai uno script allegato a un oggetto, puoi revisionarlo facendo doppio clic su di esso nel ispettore . Questo si apre Monosviluppo , l'ambiente di sviluppo predefinito per Unity. In sostanza, Monodevelop è un editor di testo con funzionalità specificamente ottimizzate per la programmazione.

Parole chiave e commenti sono evidenziati in blu e verde , e i valori numerici e le stringhe vengono visualizzati in netto . Se hai usato Eclisse o altri IDE, MonoDevelop è molto simile. Puoi costruire i tuoi script dall'interno dell'editor, per verificare la presenza di errori di sintassi, in questo modo:

In generale, per far interagire il tuo script con Unity, dovrai fare riferimento agli elementi che possiede l'oggetto che contiene lo script (puoi vedere un elenco di questi elementi sotto il ispettore scheda quando l'oggetto in questione è selezionato). È quindi possibile chiamare metodi o impostare variabili per ciascuno di questi elementi per attuare le modifiche desiderate.

Se vuoi che uno script su un oggetto influenzi le proprietà di un oggetto diverso, puoi creare un vuoto Oggetto del gioco variabile nel tuo script e usa il ispettore per assegnarlo a un altro oggetto nella scena.

Un elenco degli elementi che un oggetto potrebbe avere è il seguente (preso dalla vista di ispezione di uno dei nostri paddle nell'esempio sopra):

  1. Trasformare
  2. Cubo (filtro a rete)
  3. collisore di scatole
  4. Rendering di mesh

Ciascuno di questi aspetti dell'oggetto può essere influenzato dall'interno di uno script. Successivamente, vedremo esattamente come.

6.1 Trasformazione

Le funzioni di trasformazione per un GameObject in Unity controllano i parametri fisici di quell'oggetto: la sua scala , suo posizione , e la sua orientamento . Puoi accedervi da uno script come questo:

transform.position = newPositionVector3;
transform.rotation = newRotationQuaternion;
transform.localScale = newScaleVector3;

Negli esempi precedenti, le variabili nominate sono dei tipi specificati nei nomi. Ci sono alcuni dettagli chiave qui: posizione e scala sono, come ci si aspetterebbe, memorizzate come Vector3s . Puoi accedere al X , E , e INSIEME A componenti di ciascuno (ad esempio, trasformazione.posizione.y ti dà la distanza di un oggetto sopra il piano zero).

Tuttavia, per evitare blocco cardanico , le rotazioni sono gestite come quaternioni (vettori a quattro componenti). Poiché la manipolazione manuale dei quaternioni non è intuitiva, puoi manipolare le rotazioni usando gli angoli euleriani usando il Quaternion.Eulero metodo in questo modo:

transform.rotation = Quaternion.Euler(pitch, yaw, roll);

Se desideri spostare facilmente gli oggetti da un luogo all'altro, troverai il Slerp metodo per quaternioni e vector3s utile. Slerp accetta tre argomenti: lo stato corrente, lo stato finale e la velocità di cambiamento e li interpola dolcemente alla velocità data. La sintassi è simile a questa:

transform.position = Vector3.Slerp(startPositionVector3, newDestinationVector3, 1);

6.2 Rendering

Le funzioni del renderer in Unity ti consentono di controllare il modo in cui le superfici degli oggetti di scena vengono renderizzate sullo schermo. Puoi riassegnare la trama, cambiare il colore e cambiare lo shader e la visibilità dell'oggetto. La sintassi è simile a questa:

renderer.enabled = false;
renderer.material.color = new Color(0, 255, 0);
renderer.material.mainTexture = myTexture;
renderer.material.shader = newShader;

La maggior parte di questi ha funzioni abbastanza chiare. Il primo esempio rende invisibile l'oggetto in questione: un trucco utile in diverse situazioni. Il secondo esempio assegna un nuovo Colore RGB (vale a dire, verde) all'oggetto in questione. Il terzo assegna la texture diffusa principale a una nuova variabile Texture. L'ultimo esempio cambia lo shader del materiale dell'oggetto in una variabile shader appena definita.

6.3 Fisica

Unity è dotato di un motore fisico integrato, qualcosa che tutti i giochi sandbox di fisica usano. Ciò consente di assegnare le proprietà fisiche degli oggetti e di gestire i dettagli della loro simulazione. In generale, piuttosto che cercare di implementare la propria fisica utilizzando un libro di testo e il sistema di trasformazione, è più semplice e robusto utilizzare il motore fisico di Unity nella massima misura possibile.

Tutti gli oggetti di fisica richiedono collisori . Tuttavia, la simulazione stessa è gestita da a corpo rigido , che può essere aggiunto nel ispettore Visualizza. I corpi rigidi possono essere cinematica o non cinematico .

Gli oggetti di fisica cinematica si scontrano con (ed effettuano) gli effetti di fisica non cinematica intorno a loro, ma non sono influenzati dalla collisione stessa. I sostegni cinematici statici sono i proverbiali oggetti immobili, e gli oggetti cinematici in movimento sono la proverbiale forza inarrestabile (per la cronaca, quando si scontrano, semplicemente si attraversano).

Oltre a ciò, puoi regolare la resistenza angolare dell'oggetto (quanta energia ci vuole per farlo ruotare), cambiarne la massa, stabilire se è influenzato o meno dalla gravità e applicargli delle forze.

Esempi:

rigidbody.angularDrag = 0.1f;
rigidbody.mass = 100;
rigidbody.isKinematic = false;
rigidbody.useGravity = true;
rigidbody.AddForce(transform.forward * 100);

Questi sono tutti abbastanza auto-esplicativi. L'unica cosa da notare qui è l'uso di trasforma.avanti . I Vector3 hanno tutti tre componenti ( .inoltrare , .su , e .Giusto ) ad essi associati, a cui è possibile accedere e che ruota con essi ( inoltrare è la direzione della freccia blu nell'editor). Il trasforma.avanti la parola chiave è semplicemente il vettore in avanti per l'oggetto corrente con magnitudine 1. Può essere moltiplicato per un float per creare più forza sull'oggetto. Puoi anche fare riferimento trasforma.su e trasforma.giusto e negarli per ottenere i loro rovesci.

6.4 Collisione

Spesso, durante la creazione di un gioco, desideri che una collisione determini un cambiamento di stato nel codice, oltre alla semplice simulazione fisica. Per questo, avrai bisogno di un metodo di rilevamento delle collisioni .

È necessaria una certa quantità di lavoro di preparazione per rilevare le collisioni in Unity. Innanzitutto, almeno uno degli oggetti nella collisione necessita di a corpo rigido non cinematico attaccato ad esso. Entrambi gli oggetti devono avere collider corretti, impostati come non trigger. La velocità totale di entrambi gli oggetti deve essere sufficientemente bassa da farli scontrare effettivamente, invece di saltare semplicemente uno attraverso l'altro.

Se ti sei occupato di tutto ciò, puoi verificare la collisione inserendo uno speciale metodo di rilevamento delle collisioni in uno script allegato all'oggetto con cui desideri verificare la collisione. Il metodo sarà simile a questo:

void OnCollisionEnter(Collision other) {
//do things here
}

Questo metodo verrà eseguito automaticamente durante il primo fotogramma in cui un altro oggetto tocca il tuo oggetto. L'entità di collisione Altro è un riferimento all'oggetto che hai colpito. Puoi, ad esempio, fare riferimento al suo oggetto di gioco , corpo rigido , e trasformare caratteristiche per manipolarlo in vari modi. Mentre OnCollisionEnter è probabilmente la funzione più comune che utilizzerai, puoi anche usare OnCollisionExit e OnCollisionStay (con sintassi e utilizzo altrimenti identici), che si attivano durante il primo fotogramma in cui si interrompe la collisione con un oggetto e durante ogni fotogramma in cui si entra in collisione con un oggetto, rispettivamente.

A volte può essere utile anche fare quello che si chiama raycasting . In raycasting, una linea infinitamente sottile (a raggio ) viene lanciato attraverso il mondo da una qualche origine, lungo un vettore, e, quando colpisce qualcosa, vengono restituiti la posizione e altri dettagli della prima collisione. Il codice per un raycast è simile a questo:

RaycastHit hit;
if (Physics.Raycast(transform.position, -Vector3.up, out hit)) {
float distanceToGround = hit.distance;
}

Questo proietta un raggio dalla posizione dell'oggetto corrente lungo -Vector3.up (verso il basso) e collega la variabile colpire al primo oggetto con cui si scontra. Una volta che il tuo raggio ha colpito qualcosa, puoi accedere hit.distanza per determinare quanto è lontano, o hit.GameObject per manipolare l'oggetto colpito.

I raycast come questo possono essere usati dai tiratori per determinare a cosa è puntata la pistola, o per selezionare gli oggetti quando la telecamera li guarda, o per determinati stili di meccanica di movimento.

6.5 Correzione del tempo

Un fattore importante da tenere a mente quando si manipolano gli oggetti in questo modo ha a che fare con frequenza dei fotogrammi . Non importa con quanta cura ottimizzi, i framerate varieranno sempre e non vuoi che la tua velocità di gioco vari di conseguenza. Se qualcun altro esegue il tuo gioco su un computer più veloce di quello su cui lo hai sviluppato, non vorrai che il gioco funzioni a velocità doppia.

Il modo in cui correggi questo è moltiplicando i valori che stai utilizzando per il tempo impiegato per il rendering dell'ultimo fotogramma. Questo viene fatto usando Time.deltaTime . Questo cambia efficacemente la velocità di qualsiasi variabile da cui stai incrementando ogni fotogramma cambia per fotogramma a cambio al secondo , e probabilmente dovresti apportare questa modifica a qualsiasi valore che stai incrementando o decrementando ogni fotogramma.

6.6 Sorgenti audio e ascoltatori

Ora che abbiamo spiegato come creare, renderizzare e controllare gli oggetti, parliamo dell'altro senso in cui possono servire i giochi per computer: vale a dire, suono . Unity supporta due tipi di suoni: 2D e 3D suoni. I suoni 3D variano il loro volume in base alla distanza e si distorcono mentre si muovono rispetto alla telecamera; I suoni 2D no.

I suoni 2D sono appropriati per le voci fuori campo e la musica di sottofondo, mentre i suoni 3D si applicano ai suoni generati da eventi nel mondo. Per modificare se un suono è 3D o meno, selezionalo nel progetto visualizzare, passare a ispettore visualizzare e selezionare l'opzione appropriata dal menu a discesa, quindi premere il tasto reimportare pulsante.

Per riprodurre effettivamente il suono, dovrai allegare un Sorgente Audio a un puntello (il puntello da cui si desidera originare il suono, nel caso di un suono 3D). Quindi dovrai aprire il audioclip campo e seleziona il tuo file audio.

app gratuita per guardare film gratis

Puoi usare myAudioSource.Pause () e myAudioSource.Play () per controllare quei file audio. È possibile regolare i comportamenti di decadimento, il volume e lo spostamento doppler dei suoni sotto il ispettore scheda per la sorgente audio.

6.7 Ingresso

Un gioco che non richiede alcun input dall'utente non è un gran gioco. Ci sono molti diversi tipi di input che puoi leggere e quasi tutti sono accessibili tramite il Ingresso e Chiave oggetti. Di seguito sono riportate alcune istruzioni di input di esempio (che hanno un valore valutato ogni fotogramma).

Vector3 mousePos = Input.mousePosition;
bool isLeftClicking = Input.GetMouseButton(0);
bool isPressingSpace = Input.GetKey(KeyCode.Space);

Le funzioni di queste linee sono per lo più autoesplicative. Utilizzando questi tre tipi di input di riferimento, è possibile ricostruire gli schemi di controllo della maggior parte dei moderni giochi per computer 3D.

6.8 Debug di uno script

Diciamo che uno script non funziona. Come dice il buon dottore, ti possono capitare disguidi e riattacchi. Se ci sono errori di sintassi con il tuo C#, il gioco generalmente si rifiuterà di funzionare quando premi play e vengono forniti alcuni messaggi di errore abbastanza utili se costruire gli script dall'interno dell'editor. Vedi sotto:

Questi bug non sono in genere i più difficili da risolvere. Ciò che può essere più problematico sono i sottili errori semantici, in cui hai scritto con successo un file pieno di C# valido, ma non uno che fa quello che pensavi. Se hai uno di questi errori e hai problemi a rintracciarlo, ci sono alcune cose che puoi provare per migliorare la situazione.

Il primo è mettere in pausa l'esecuzione del gioco e controllare la console. Puoi mettere in pausa il gioco facendo clic su pausa icona nella parte centrale superiore dell'editor, quindi selezionando console dal fondo del finestra menu (o premendo Ctrl > Spostare > C ). Anche se non ci sono errori, gli avvisi possono comunque aiutare a dare qualche indizio su cosa potrebbe andare storto.

Se questo non funziona, puoi anche provare a farti un'idea dello stato del tuo script stampando lo stato delle variabili interne per verificare che il programma stia facendo ciò che pensi che stia facendo. Puoi usare Debug.Log(Stringa) per stampare il contenuto di una stringa sulla console quando l'esecuzione del programma raggiunge quella riga. In generale, se lavori a ritroso da ciò che pensi dovrebbe accadere attraverso le cose che dovrebbero farlo accadere, alla fine raggiungerai un punto in cui le tue stampe di debug non faranno ciò che ti aspetti che facciano. Ecco dov'è il tuo errore.

7. Esempio: script Pong

Per costruire Pong, scomponiamo il gioco nei suoi elementi principali: abbiamo bisogno di una palla che rimbalza avanti e indietro tra le pale a velocità crescente, abbiamo bisogno di un tabellone segnapunti che sappia quando le palle hanno superato le pale e abbiamo bisogno di un meccanismo per riavviare la palla quando ciò accade. Un buon primo passo sarebbe aggiungere un corpo rigido non cinematico alla palla, due corpi rigidi cinematici alle pale, disabilitare la gravità per tutti loro e assegnare un materiale fisico appropriato dalle risorse standard ( rimbalzo insieme a rimbalzo combinare impostato moltiplicare ).

Di seguito, puoi visualizzare lo script per la palla con commenti esplicativi. La palla deve raggiungere alcuni obiettivi fondamentali: dovrebbe rimbalzare in uno schema complicato, mantenendo sempre il movimento su entrambi gli assi, e dovrebbe accelerare a un ritmo impegnativo ma non impossibile in direzione orizzontale.

BallHandler.cs

Successivamente, dobbiamo scrivere lo script del nostro paddle, che puoi vedere di seguito. La paletta deve muoversi su e giù in risposta alla pressione dei tasti (ma non al di fuori di determinati limiti). Deve anche attivare il sistema particellare quando si scontra con qualcosa.

PaddleHandler.cs

Successivamente, abbiamo bisogno dell'IA del nemico: qualcosa che farà in modo che la pagaia del nemico segua verso la palla a una velocità fissa. Per questo, useremo Vector3.Slerp per la massima semplicità. Ci piacerebbe anche lo stesso comportamento delle particelle che vediamo sulla nostra pagaia.

EnemyAI.cs

Infine, abbiamo bisogno di uno script per aggiornare il tabellone e ripristinare la palla quando esce dal campo.

ScoreboardUpdater.cs

Con quegli script allegati e i riferimenti compilati, quando eseguiamo il nostro gioco di Pong, sperimentiamo il gameplay!

Puoi scarica la mia demo Pong , se desideri vedere tutto ciò che ho delineato in azione. Funziona su sistemi Windows, Mac e Linux.

8. Esplorare la documentazione/Ulteriori informazioni

Unity è un motore complesso con molte più funzionalità di quelle che potrebbero essere trattate in una guida di questo stile, e questo prima di includere l'ampia gamma di estensioni Unity (gratuite e commerciali) disponibili su Internet. Questa guida ti fornirà un ottimo punto di partenza per lo sviluppo di un gioco, ma l'autoeducazione è un'abilità importante in qualsiasi impresa, e lo è doppiamente qui.

Una risorsa cruciale qui è il Unity ScriptReference . ScriptReference è un database ricercabile, disponibile sia per C# che per Javascript, che contiene un elenco di tutti i comandi e le funzionalità di Unity, con descrizioni delle loro funzioni e brevi esempi di sintassi.

Se hai problemi con l'editor e l'interfaccia di Unity, o semplicemente come i tutorial video per una questione di preferenza, c'è un lungo elenco di Video tutorial Unity a disposizione. Più esteso (ma meno ampio) tutorial di testo per Unity sono disponibili anche da CatLikeCoding.

Infine, se hai domande che esulano dall'ambito della documentazione o dei tutorial, puoi porre domande specifiche su risposte.Unity3d.com . Ricorda che le risposte sono fornite da volontari, quindi rispetta il loro tempo e cerca prima nel database per assicurarti che la tua domanda non abbia già ricevuto risposta.

9. Costruire il tuo gioco/Compilare in un'applicazione autonoma

Quando hai creato qualcosa di cui sei orgoglioso (o hai finito di clonare il nostro esempio un po' losco di Pong per fare pratica), è il momento di spostare il tuo gioco dall'editor e trasformarlo in qualcosa che puoi pubblicare su Internet e forzare i tuoi amici e la tua famiglia per giocare. Per fare ciò, dovrai creare un'applicazione autonoma. La buona notizia è che in Unity è molto, molto facile. Ci sono, tuttavia, alcuni potenziali singhiozzi a cui dovresti stare attento.

Per cominciare, sappi che puoi solo creare un progetto privo di errori. A tal fine, assicurati di avere la console aperta durante la compilazione: ci sono alcune condizioni di errore che il gioco ignorerà nell'editor, ma interromperà comunque un tentativo di compilazione. Questo scarica solo i messaggi di errore sulla console, senza risultati visibili sullo schermo, il che può essere frustrante se ti dimentichi di controllare. Tuttavia, una volta completata la compilazione del gioco senza errori, puoi selezionare Impostazioni di costruzione sotto il File menu o premere Ctrl > Spostare

> B . Verrà visualizzata una semplice finestra di dialogo che ti consentirà di creare il tuo gioco per diverse piattaforme.

Il processo da lì è autoesplicativo: seleziona le tue opzioni e premi costruire ; il gioco ti chiederà una directory in cui installare e posizionerà sia l'eseguibile che la directory dei dati. Questi due file possono essere compressi insieme e distribuiti (assicurati solo di non addebitare un gioco integrato nella demo di Unity, poiché ciò viola i termini di servizio).

10. Note di chiusura

Come con qualsiasi strumento di sviluppo di giochi, la chiave del successo con Unity è lo sviluppo iterativo. Devi costruire in incrementi gestibili - essere ambizioso, con tutti i mezzi, ma essere ambizioso in piccoli pezzi e organizzare quei pezzi in modo tale che, anche se non riuscirai a raggiungere la tua ambizione finale, finirai almeno con un coerente Prodotto.

Prendi per primi gli elementi più cruciali: hai un'idea in mente per te prodotto minimo vitale , la cosa più semplice e essenziale che potresti creare e sentirti ancora come se avessi ottenuto qualcosa di utile. Raggiungi quel minimo progetto fattibile prima di passare ad ambizioni più grandi.

Questo tutorial ti offre un ottimo punto di partenza, ma il modo migliore per imparare Unity è creare un gioco. Inizia a costruire un gioco, colma le lacune nelle tue conoscenze man mano che emergono e il flusso graduale di conoscenza eroderà le cose che non conosci in modo sorprendentemente rapido.

Se hai letto tutto questo e sei un po' sopraffatto dalla codifica richiesta con Unity, assicurati di controllare come impara lo sviluppo di giochi con Unity Learn e leggi anche la nostra guida su come realizzare videogiochi senza alcuna programmazione.

Unity è uno strumento potente e, con un po' di esplorazione, puoi creare progetti impressionanti con esso più velocemente di quanto ti aspetti. Facci sapere cosa hai costruito nei commenti qui sotto: ci piacerebbe vedere!

Condividere Condividere Tweet E-mail 3 modi per verificare se un'e-mail è reale o falsa

Se hai ricevuto un'email che sembra un po' dubbia, è sempre meglio verificarne l'autenticità. Ecco tre modi per sapere se un'e-mail è reale.

Leggi Avanti
Argomenti correlati
  • Programmazione
  • Programmazione
  • Forma lunga
  • Guida lunga
Circa l'autore Andre Infante(131 articoli pubblicati)

Scrittore e giornalista con sede nel sud-ovest, Andre è garantito per rimanere funzionale fino a 50 gradi Celsius ed è impermeabile fino a una profondità di dodici piedi.

Altro da Andre Infante

Iscriviti alla nostra Newsletter

Iscriviti alla nostra newsletter per suggerimenti tecnici, recensioni, ebook gratuiti e offerte esclusive!

Clicca qui per iscriverti