Randomizzazione

Creare un gioco è sempre esaltante, preparare l’asset, modellare i vari personaggi e texturizzarli, animarli, ecc ecc. Poi bisogna creare un’ambiente di gioco e implementare le varie meccaniche (non è detto che si debba seguire questo ordine); ma di solito il risultato finale è un gioco statico, nel senso che la mappa è quella e i nemici sono sempre gli stessi e sempre negli stessi punti, quindi dopo un pò il giocatore può decidere di non giocare più il tuo gioco per il semplice motivo che lo conosce a memoria. In questo tutorial ti farò vedere com’è possibile creare un’ambiente di gioco randomizzato, cioè casuale, rendendo il tuo gioco a ogni avvio diverso. Premessa, non creerò una mappa procedurale, cioè che si auto-genera seguendo un’algoritmo; ma ti farò vedere com’è possibile fare apparire sul terreno di gioco pezzi della mappa in modo casuale, nello specifico sarà una mappa a tasselli precedentemente creati. Per questo tutorial ti consiglio di scaricare il file che ho già preparato con le varie parti QUA oppure di creare i tuoi tasselli partendo da un semplice piano (non ridimensionarlo). Questo tutorial è stato realizzato seguendo un videotutorial di John Hamilton.

Una volta aperto il file (se hai deciso di non usarne uno tuo) ti trovi davanti a una scena vuota, però se noti bene nel layer sotto il primo (che è il decimo) ci sono i tasselli da me modellati e sull’Outliner rinominati come build_00, build_01 ecc ecc. Io ne ho creati quattro ma è possibile farne molti di più, quanti ? Beh dipende dal grado di randomizzazione che vuoi, più sono i tasselli più il gioco è vario.

Randomizzare

La tecnica è semplice ma efficace, si tratta di randomizzare una Property int per poi assegnare a ogni singolo numero un tassello. La prima cosa da fare però è decidere quale oggetto farà apparire i vari tasselli, come sai di solito si usa una Empty, ma invece di usare la solita Plane Axes, inserirò un Cube Empty (si trova nella lista delle Empty). Inserisci ora una Property int, io la chiamo random sarà questa la base di partenza della randomizzazione. Adesso passiamo alla logica per la nostra Empty. La prima cosa che ti devi chiedere è : quando deve partire la randomizzazione ? In questo caso la risposta è semplice : Quando inizia il livello; perché in questo esempio voglio creare una città che sia diversa ogni volta che parte il gioco. Quindi inserisci un Sensor Always e attiva il Tap, collegalo attraverso un Controller And ad un’ Actuator Random (se non hai mai usato questo Actuator ti consiglio di cliccare il link e dare una lettura alla scheda). Nell’opzione Distribution seleziona dal menù a tendina Int Uniform, nel campo Property scegli la Prop random (o il nome che hai dato tu), lascia il Seed a zero, inserisci Min 1 e Max 4, in questo modo ogni volta che parte il motore di gioco la Property random avrà un numero diverso da 1 a 4, eccoti un’immagine.

Può capitare che due o più volte il numero sia lo stesso per il semplice motivo che quattro numeri sono pochi, e questo si riallaccia al discorso che più tasselli si hanno più il gioco è vario. A questo punto puoi mettere la Property in debug e vederla randomizzata.

Adesso manca solo un passaggio (che si ripeterà tante volte quanti sono i tasselli), quello di dire a Blender che quando la Property random ha un determinato valore di inserire un tassello. Inserisci un Sensor Property, scegli la Prop random, e inserisci il numero 1 come valore. Inserisci un’ Actuator Edit Object, lascia tutte le opzioni così come sono, seleziona dal campo Object l’oggetto che vuoi che venga inserito, in questo caso è il build_00. Quindi se la Property random è uguale a 1 Blender inserirà nel punto in cui c’è la Empty l’oggetto che si chiama build_00, che è uno dei tasselli della mappa. Se fai partire il motore di gioco vedrai apparire build_00 solo e soltanto quando la Property random è uguale a 1. Ripeti questa linea di mattoni altre tre volte, una per ogni tassello, cambiando il valore nel Sensor Property e l’oggetto che vuoi fare apparire. I due mattoni sono collegati tra loro attraverso un Controller And, ecco un’mmagine

Una volta creati tutti i mattoni necessari per ogni valore della Property random, puoi vedere come ogni volta che la Prop cambia di valore appare un tassello diverso. Il tocco finale è quello di duplicare la empty tante volte quante vuoi che la tua città sia grande, io per esempio ne ho creata una di 5 x 5 Empty (25 tasselli), anche per farli entrare nell’inquadratura della camera.

Questa prima parte del tutorial finisce qua, puoi sbizzarrirti come vuoi creando tasselli di dimensione più grandi e diversificati da inserire nel tuo ambiente di gioco. Nel prossimo articolo vedrai com’è possibile randomizzare alcune procedure del tuo gioco e come creare dei tasselli che abbiano già parti automatizzate, è un giochino di gerarchie, un random dentro un random dentro un random ecc ecc. Buon divertimento.