Visualizzazione post con etichetta definizioni fondamentali. Mostra tutti i post
Visualizzazione post con etichetta definizioni fondamentali. Mostra tutti i post

lunedì 4 luglio 2011

Sparo di un cannone (moto proiettile)

Una delle cose più importanti nella realizzazione di un videogioco è la concretizzazione del sistema fisico, ovvero la realizzazione di corpi che, in primissima istanza, si comportano come se fossero soggetti a forza di gravità. Avrete notato che se ponete in una scena un piano ed un cubo, ad esempio, e premete Play dopo aver posizionato opportunamente una camera, il cubo rimarra sospeso nel vuoto.

Devo necessariamente premettere un paio di cose prima di andare avanti: anzitutto la differenza tra vista Globale e Locale. La prima, in effetti, fa riferimento ad una "visione" degli assi direzionali x,y,z in modo assoluto, quindi indipendente dai vari oggetti sulla scena, mentre la seconda è relativa a dove "sta guardando" un determinato GameObject. La distinzione viene fatta perchè, nel caso in cui ruotiate un certo personaggio, per esempio, il suo sistema di assi puo' non coincidere con quello globale, e puo' essere utile in alcuni casi passare dall'una all'altra.




Come forse saprete Unity3D permette di applicare la fisica ad un qualsiasi GameObject, ed il modo più semplice per farlo è quello di selezionare l'oggetto e dal menu Components selezionare Phisics-> RigidBody. Questo vi metterà a disposizione una nuova componente nella quale potrete decidere le caratteristiche fisiche dell'oggetto, tra cui:
  • mass: la massa o "peso" dell'oggetto
  • drag: il "rallentamento" che subisce l'oggetto durante il moto, ad esempio "effetto paracadute" che potete settare a 20, per esempio;
  • angular drag: il "rallentamento" che subisce l'oggetto durante la rotazione, che potete settare a 5, per esempio;
  • collision detect: discreta, continua, o continua e dinamica;
  • use gravity: oggetto sottoposto alla forza di gravità lungo l'asse globale y, in direzione -1.


A questo punto proveremo ad applicare una forza ad esempio ad una sfera sulla quale avrete applicato la componente fisica, allo scopo di emulare il classico "moto di un proiettile" (il cannone che spara un colpo, per intenderci). Per farlo ricorreremo alla pratica funzione addForce, applicata ovviamente una sola volta quando l'oggetto è stato creato (ovvero dentro Awake(): vedi anche ciclo di vita di un GameObject):

var force = 20.0;
var direzione = Vector3 (0,1,1);

function Awake(){
    rigidbody.AddForce(direzione * force);
}

Il valore 20 rende il moto del proiettile visibile rispetto ad una massa fissata ad 1, se inserite altri valori dovrete calibrare per tentativi il resto di conseguenza. Inoltre ho introdotto un vettore direzione che spara, quindi, lungo (0,1,1) come è possibile vedere anche nel video:




Se poi ad esempio decidiamo di vincolare la direzione del movimento senza scomodare complesse formule matematiche, potrei congelare uno o più assi (freeze) e fare in modo che il movimento sia diretto verso l'alto (lungo l'asse y, tipo lancio di un missile).


venerdì 1 luglio 2011

Ciclo di vita di un Game Object

In generale usiamo associare degli script (in JS, C# o Boo) allo scopo di stabilire il comportamento dei vari personaggi e degli oggetti che compongono il nostro videogioco tridimensionale: è utile considerare le funzioni più importanti e visualizzare il cosiddetto "ciclo di vita" di un generico oggetto Unity3D.

Leggendo da destra a sinistra avremo: inizialmente viene eseguito quanto contenuto nel blocco di codice dello script Awake() (risveglio), e subito dopo se lo script è abilitato si esegue il blocco Start() per ulteriori inizializzazioni. Alla fine si passa alla fase di Update(), che viene eseguita per ogni singolo frame del gioco (quindi a velocità molto elevata), oppure LateUpdate che viene invece ripetuta ogni secondo fisico.

Se lo script non fosse abilitato si passa direttamente alla fase Update() / FixedUpdate().

Interfaccia di Unity3D: presentazione rapida

Dopo aver installato ed aperto Unity3D, selezionate Window->Layouts->2 by 3 ed avrete suddiviso la vostra interfaccia in 5 parti distinte.



Esse sono:


1. Scene View: utile per posizionare gli oggetti del gioco
2. Game View: anteprima di come si vedrà il gioco
3. Hierarchy View: lista di tutti gli oggetti presenti nella SCENA (ovvero nel livello corrente: ogni progetto puo' essere fatto da più livelli, ovviamente)
4. Project View: mostra tutti i package e gli asset pronti ad essere inseriti nel gioco.
5. Inspector View: mostra le proprietà delle componenti, delle variabili delle componenti e permette di visualizzare i watch per fare debug.

martedì 28 giugno 2011

GameObject e Layer: a cosa servono e come usarli?


Sono una sorta di contenitori di qualsiasi entità del gioco, caratterizzati da una serie di Componenti (components) che ne definiscono vari tipi di proprietà.

Nell'inspector ecco come compare, inizialmente, un GameObject: c'è un nome, un tag ed un layer. Nome e tag rappresentano come detto in precedenza nome univoco dell'oggetto e/o rispettivamente identificatore della classe o "categoria" (ad esempio un tag enemy123 per identificare un gruppo di nemici). Sul layer invece vi è un discorso a parte da tenere in considerazione.

Cosa servono i Layer di Unity3D? I layer stabiliscono cosa deve essere visibile nella scena, sempre rispetto ad una camera che la riprende. Essi permettono di definire degli "strati" di visibilità e permettono di costruire caratteristiche avanzate come i Raycast.