Warning: file_exists(): open_basedir restriction in effect. File(/tmp/rvpuuusc.txt) is not within the allowed path(s): (/membri/blendergameengineitalia/:/membri2/blendergameengineitalia/:/membri/.dummy/) in /membri/blendergameengineitalia/wp-includes/plugin.php(437) : runtime-created function on line 1

Warning: file_exists(): open_basedir restriction in effect. File(/tmp/rvpuuusc.txt) is not within the allowed path(s): (/membri/blendergameengineitalia/:/membri2/blendergameengineitalia/:/membri/.dummy/) in /membri/blendergameengineitalia/wp-includes/plugin.php(437) : runtime-created function on line 1

Creare un prototipo parte 3


Warning: file_exists(): open_basedir restriction in effect. File(/tmp/rvpuuusc.txt) is not within the allowed path(s): (/membri/blendergameengineitalia/:/membri2/blendergameengineitalia/:/membri/.dummy/) in /membri/blendergameengineitalia/wp-includes/plugin.php(437) : runtime-created function on line 1

Warning: file_exists(): open_basedir restriction in effect. File(/tmp/rvpuuusc.txt) is not within the allowed path(s): (/membri/blendergameengineitalia/:/membri2/blendergameengineitalia/:/membri/.dummy/) in /membri/blendergameengineitalia/wp-includes/plugin.php(437) : runtime-created function on line 1

Warning: file_exists(): open_basedir restriction in effect. File(/tmp/rvpuuusc.txt) is not within the allowed path(s): (/membri/blendergameengineitalia/:/membri2/blendergameengineitalia/:/membri/.dummy/) in /membri/blendergameengineitalia/wp-includes/plugin.php(437) : runtime-created function on line 1

Warning: file_exists(): open_basedir restriction in effect. File(/tmp/rvpuuusc.txt) is not within the allowed path(s): (/membri/blendergameengineitalia/:/membri2/blendergameengineitalia/:/membri/.dummy/) in /membri/blendergameengineitalia/wp-includes/plugin.php(437) : runtime-created function on line 1

Warning: file_exists(): open_basedir restriction in effect. File(/tmp/rvpuuusc.txt) is not within the allowed path(s): (/membri/blendergameengineitalia/:/membri2/blendergameengineitalia/:/membri/.dummy/) in /membri/blendergameengineitalia/wp-includes/plugin.php(437) : runtime-created function on line 1

Warning: file_exists(): open_basedir restriction in effect. File(/tmp/rvpuuusc.txt) is not within the allowed path(s): (/membri/blendergameengineitalia/:/membri2/blendergameengineitalia/:/membri/.dummy/) in /membri/blendergameengineitalia/wp-includes/plugin.php(437) : runtime-created function on line 1

Warning: file_exists(): open_basedir restriction in effect. File(/tmp/rvpuuusc.txt) is not within the allowed path(s): (/membri/blendergameengineitalia/:/membri2/blendergameengineitalia/:/membri/.dummy/) in /membri/blendergameengineitalia/wp-includes/plugin.php(437) : runtime-created function on line 1

Warning: file_exists(): open_basedir restriction in effect. File(/tmp/rvpuuusc.txt) is not within the allowed path(s): (/membri/blendergameengineitalia/:/membri2/blendergameengineitalia/:/membri/.dummy/) in /membri/blendergameengineitalia/wp-includes/plugin.php(437) : runtime-created function on line 1

Warning: file_exists(): open_basedir restriction in effect. File(/tmp/rvpuuusc.txt) is not within the allowed path(s): (/membri/blendergameengineitalia/:/membri2/blendergameengineitalia/:/membri/.dummy/) in /membri/blendergameengineitalia/wp-includes/plugin.php(437) : runtime-created function on line 1

Warning: file_exists(): open_basedir restriction in effect. File(/tmp/rvpuuusc.txt) is not within the allowed path(s): (/membri/blendergameengineitalia/:/membri2/blendergameengineitalia/:/membri/.dummy/) in /membri/blendergameengineitalia/wp-includes/plugin.php(437) : runtime-created function on line 1

Warning: file_exists(): open_basedir restriction in effect. File(/tmp/rvpuuusc.txt) is not within the allowed path(s): (/membri/blendergameengineitalia/:/membri2/blendergameengineitalia/:/membri/.dummy/) in /membri/blendergameengineitalia/wp-includes/plugin.php(437) : runtime-created function on line 1

Warning: file_exists(): open_basedir restriction in effect. File(/tmp/rvpuuusc.txt) is not within the allowed path(s): (/membri/blendergameengineitalia/:/membri2/blendergameengineitalia/:/membri/.dummy/) in /membri/blendergameengineitalia/wp-includes/plugin.php(437) : runtime-created function on line 1

Come prima cosa, e come ho detto anche nell’articolo precedente, è buona abitudine salvare il file con un’altro nome (in questo caso aumento solo il numero) quando iniziamo una nuova fase non solo del prototipo ma anche del gioco stesso. Quindi salva il file.

Se ricordi l’articolo precedente ero arrivato al punto di avere tre monete, una porta e la logica per raccogliere le monete e fare aprire la porta e la scena si presenta come nell’immagine sotto (almeno la mia)

Prima di proseguire però volevo fare una modifica alle monete, perchè il gioco così è un pò statico, vorrei che le monete girassero su se stesse, è anche un modo per fare capire al giocatore che devono essere prese. Come ho detto clonando la moneta posso fare dei cambiamenti e verranno riflessi automaticamente nei suoi cloni, ma questo per quanto riguarda le modifiche alla mesh (se entri in edit mode lo puoi notare, tasto Tab, quello a sinistra della Q), purtroppo non è la stessa cosa per quanto riguarda i Mattoni. Posso seguire due metodi : 

  • Il primo è cancellare tutte le monete, lasciandone una, e rielaborare la logica definitiva per poi clonarla di nuovo;
  • Il secondo metodo è di creare la logica e poi copiarla nelle altre mesh.

Nel mio caso ho solo poche monete e posso permettermi di cancellarle e poi clonarle una volta soddisfatto della logica; mentre se ne ho tante è meglio scegliere il secondo metodo. Vediamo come operare.

 Seleziona una delle monete, aggiungi un Sensor Always, un Controller And e un’Actuator Motion, collegali tra di loro e nell’Actuator inserisci 2 nel campo della rotazione (Rot) dell’asse Z, come da immagine

Adesso se fai partire il motore di gioco, vedrai che la moneta ruota. Bene ora voglio che questa logica sia eseguita anche dalle altre monete e per fare questo Blender mi viene in aiuto con uno strumento fantastico, la ricerca. Come prima cosa però bisogna selezionare gli oggetti, per copiare i Mattoni dobbiamo selezionare per primi tutti quegli oggetti che non hanno la logica (in questo caso le monete che non girano) e per ultimo l’oggetto che ha la logica che vogliamo copiare. Tenendo il puntatore del mouse sulla 3D view premi lo spazio, si apre una piccola finestrella di ricerca, basta digitare copy che Blender ci restituirà tutti i termini che includono la copia; a noi interessa Copy Logic Bricks to Selected, come mostra l’immagine seguente, fatto.

Per quello che voglio ottenere sono abbastanza soddisfatto del risultato, quindi posso clonare le monete tante volte quante me ne servono, ma come faccio a sapere di quante monete ho bisogno ? La risposta è in relazione al tipo di livello che voglio sviluppare, nel mio caso il prototipo è un platform 3D, quindi si suppone che il livello sia frastagliato in vari pezzi e che il giocatore per raccogliere le monete debba saltare da un platform all’altro per poi indirizzarsi verso la porta per passare alla fase successiva (oppure ad un’altro livello). Se ti capita di giocare spesso ai video giochi avrai forse notato (magari da ora ci farai più caso) che ci sono dei percorsi stabiliti, anche negli openworld quando si fa una missione si deve seguire una certa logica per risolverla, infatti gli sviluppatori fanno in modo di creare dei percorsi per indirizzare il giocato e non sempre questi percorsi sono obbligatori, ma indotti, nel senso che mettendo una serie di oggetti da raccogliere il giocatore (ignaro) ne segue la scia e così viene portato al completamento della missione/livello/ecc ecc senza volerlo. E’ un trucchetto psicologico ma funziona perfettamente. Se poi ci aggiungi il fattore rischio, che in alcune parti del livello si può morire, allora la cosa può diventare interessante. 

Era una piccola premessa per introdurre il discorso del livello di gioco, c’è una figura nel mondo del game development (lo sviluppo dei videogiochi) che è il level designer, cioè colui che costruisce il livello, questo prechè è diventata una vera e propria scienza. Nel mio piccolo però cerco di organizzare il livello in modo da dare al giocatore un’esperienza di gioco gradevole, quindi in questo tutorial creerò un livello semplice ma divertente, con qualche area dove se si cade si muore e un traguardo da raggiungere dopo aver superato la porta.

Come prima cosa inserisco due cubi che diventeranno le parti del mio livello, assegno loro due diversi materiali e uno di essi lo scalo il doppio del cubo di base. Ecco un’immagine del mio livello attualmente

Adesso posso sbizzarrirmi come voglio e creare un livello più o meno complesso copiando questi due cubi. Nella creazione cercherò di delineare un’area di spawn da dove parte il player, in questo caso allargherò il pavimento per avere più spazio e posizionerò il player in un angolo, così facendo posso costruire una sorta di labirinto. Per questioni pratiche creerò il livello e posterò un’immagine, perchè è solo una fase in cui si copia e si muovono i cubi appena creati e ognuno lo può fare come vuole. Io uso questo modo di lavorare (in questo specifico caso) :

  • Guardo il livello dall’alto (Tn7) e metto la finestra 3D a tutto schermo (CTRL+freccia su).
  • Uso le frecce dell’asse X oppure Y per spostare i cubi, come delle maniglie tenendo premuto il CTRL per ancorarle alla griglia.
  • Per risparmiare tempo uso la selezione multipla (tenere premuto Shift) e seleziono più di un cubo in questo modo posso ridurre i tempi di creazione.
  • Quando ho finito dalla visuale top passo a quella laterale e sposto i cubi che mi interessano verso l’alto (sull’asse Z) in modo da creare dei dislivelli.

Questi sono dei piccoli suggerimenti, per chi sa usare Blender la cosa può sembrare ridicola, ma per chi è alle prime armi copiare e spostare può rivelarsi difficoltoso.

Il mio livello è pronto e più o meno sono soddisfatto, magari porterò qualche modifica in seguito, eccolo

Dall’immagine non si capisce molto bene quali sono i cubi che poggiano a terra e quali sono in aria, ma ti assicuro che il livello è ben architettato. Per questo motivo ti do il link del file in questione in modo che lo puoi visualizzare da te. Come ultima cosa, prima di concludere questo articolo, creerò attorno al pavimento dei muri invisibili in modo che il player non cada nel vuoto.

Inserisci un piano e spostalo su un lato del pavimento, scalalo in modo che una delle lunghezze (X oppure Y)  sia pari a quella del pavimento, posto un’immagine

Ruota il piano sull’asse che hai allungato di 90° (R+90), ricorda che un lato deve combaciare con quello del pavimento. Scala sull’asse Z il piano fino a quando credi che il player non possa oltrepassarlo, posto un’altra immagine

Il passo successivo è rendere il muro Invisibile, vai sulle proprietà della fisica del piano e clicca sul pulsante Invisible, in questo modo il piano sarà Static, quindi farà parte della fisica di gioco, ma non verrà renderizzato. Adesso che il muro è come lo desideri basta duplicarlo e spostare le copie attorno al pavimento, nel mio caso ho messo la porta su un piccolo ponte quindi dovrò cercare una soluzione per farsì che il player possa averci accesso.

Cerca di essere creativo, prova e riprova il livello perchè se hai allontanato troppo i cubi il player non arriverà a saltarci, ti ricordo che un prototipo è un sistema per provare le meccaniche di gioco quindi non è un gioco definitivo anche se in certi casi lo può diventare se poi cambi i cubi con oggetti ben modellati e texturizzati. 

Per questo articolo è tutto, nel prossimo parlerò dell’Outliner finestra importante nella creazione dei livelli, imposterò la Camera.


Warning: file_exists(): open_basedir restriction in effect. File(/tmp/rvpuuusc.txt) is not within the allowed path(s): (/membri/blendergameengineitalia/:/membri2/blendergameengineitalia/:/membri/.dummy/) in /membri/blendergameengineitalia/wp-includes/plugin.php(437) : runtime-created function on line 1

Warning: file_exists(): open_basedir restriction in effect. File(/tmp/rvpuuusc.txt) is not within the allowed path(s): (/membri/blendergameengineitalia/:/membri2/blendergameengineitalia/:/membri/.dummy/) in /membri/blendergameengineitalia/wp-includes/plugin.php(437) : runtime-created function on line 1

Warning: file_exists(): open_basedir restriction in effect. File(/tmp/rvpuuusc.txt) is not within the allowed path(s): (/membri/blendergameengineitalia/:/membri2/blendergameengineitalia/:/membri/.dummy/) in /membri/blendergameengineitalia/wp-includes/plugin.php(437) : runtime-created function on line 1

Warning: file_exists(): open_basedir restriction in effect. File(/tmp/rvpuuusc.txt) is not within the allowed path(s): (/membri/blendergameengineitalia/:/membri2/blendergameengineitalia/:/membri/.dummy/) in /membri/blendergameengineitalia/wp-includes/plugin.php(437) : runtime-created function on line 1

Warning: file_exists(): open_basedir restriction in effect. File(/tmp/rvpuuusc.txt) is not within the allowed path(s): (/membri/blendergameengineitalia/:/membri2/blendergameengineitalia/:/membri/.dummy/) in /membri/blendergameengineitalia/wp-includes/plugin.php(437) : runtime-created function on line 1

Warning: file_exists(): open_basedir restriction in effect. File(/tmp/rvpuuusc.txt) is not within the allowed path(s): (/membri/blendergameengineitalia/:/membri2/blendergameengineitalia/:/membri/.dummy/) in /membri/blendergameengineitalia/wp-includes/plugin.php(437) : runtime-created function on line 1