Come creare una build iOS ed Android con Unity 3D

creare una build iOS ed Android con Unity 3D

Creato il tuo primo videogioco con Unity 3D è arrivato il momento di pubblicarlo sugli Store.

Unity 3D permette di creare un progetto che può essere compilato per diverse piattaforme: iOS, Android, PS4, PC etc. Ognuna di queste piattaforme, però, richiede dei passaggi e dei settings ad hoc che potrebbero mandarti in confusione.

Se nell’ultima lezione del corso Unity Bootstrap ti ho già mostrato com’è possibile buildare un progetto per PC e macOS, ora è giunto il momento di far arrivare il nostro gioco anche su iOS ed Android.

Quindi, mano al tuo progetto, perché ti sto per mostrare come creare una build iOS ed Android con Unity 3D 💪

Build Android

Per poter buildare il nostro gioco per Android è necessario installare un paio di cosette.

Innanzitutto accertati di aver installato il modulo Android per la tua versione di Unity.

Puoi verificarlo entrando nelle Build Settings (accessibili cliccando su File dal menù a tendina e poi Build Settings…) ed evidenziando la piattaforma Android.

Se il modulo sarà installato vedrai una serie di opzioni, in caso contrario invece apparirà un pulsante che ti consentirà di scaricare ed installare questo modulo:

Android SDK e JDK

Installato con successo il modulo Android, passiamo agli Android SDK Tools ed il Java Development Kit (o JDK, per gli amici più intimi!)

Per poterli installare (o collegare ad Unity, nel caso tu li abbia già nel tuo computer) è necessario navigare fino al menù Edit>Preferences…>External Tools.

Nella sezione Android di questo menù potrai selezionare le directory di SDK e JDK o andare alle loro pagine di download:

Per quanto riguarda l’SDK è possibile scegliere se scaricare esclusivamente gli SDK tools o l’intera IDE di Android Studio (scelta che ti consiglio se non hai problemi di spazio sul tuo computer), mentre per ciò che riguarda il JDK la scelta è abbastanza obbligata e dipenderà esclusivamente dal tuo sistema operativo!

Una volta selezionate le cartelle in cui abbiamo installato SDK e JDK possiamo passare allo step successivo!

Generare la Build

Torniamo al menù Build Settings e, evidenziando Android come piattaforma di destinazione, clicca sul tasto Player Settings.

Si aprirà un menù contenente tutte le impostazioni relative all’eseguibile del nostro gioco riguardanti Android.

Potrai selezionare l’icona, impostare l’orientamento dello schermo e personalizzare la splash screen mostrata prima dell’avvio dell’app.

Per poter buildare il tuo gioco devi necessariamente inserire alcuni dati: in primis Company Name e Product Name, ovvero il nome del produttore ed il nome del gioco (da inserire nella parte alta del pannello):

I prossimi campi da riempire si troveranno all’interno della sezione Other Settings, ovvero: Package Name, Version e Bundle Code:

Il package name segue una convenzione standard, chiamata reverse domain look at, ovvero: dominio.nomeProduttore.nomeApplicazione.

Se ad esempio Mario Rossi decidesse di creare un gioco chiamato “Super Mario” (mai sentito prima, davvero!), il suo package name potrebbe essere:

  1. com.MarioRossi.SuperMario
  2. o anche it.MarioRossi.SuperMario

Versione e Bundle Code infine ci serviranno per identificare univocamente ogni aggiornamento.

Ricordati di cambiare sempre il Bundle Code in maniera crescente fra un aggiornamento e l’altro, dato che è proprio quest’ultimo a permettere ai diversi dispositivi Android e al Play Store di capire se viene installata una versione più recente dell’app.

Per capirci.

Se hai già caricato sul Play Store l’app con Bundle code 1 ti sarà impossibile caricare un’altra build con Bundle code 1, anche se piena di aggiornamenti e cose fantastiche.

Dovrai necessariamente caricare una versione con Bundle code 2 o superiore!

A questo punto avrai inserito tutto il necessario per poter creare una test Build: ti basterà tornare su Build Settings, assicurarti di aver aggiunto tutte le scene del tuo gioco e cliccare sul tasto Build.

Il processo di Build verrà avviato e dopo qualche minuto, se tutto andrà per il verso giusto, troverai finalmente il tuo file apk da installare sul tuo dispositivo Android!

Questo file è testabile su dispositivo, ma trattandosi per l’appunto di una test build non sarà possibile caricarlo sul Play Store.

Per poter avere una build finale sarà necessario generare un Keystore!

Generazione Keystore e key

Un Keystore è un database contenente informazioni di sicurezza necessario per firmare un’app, e sarà necessario per verificare l’identità dello sviluppatore.

Questo assicurerà che l’aggiornamento sarà stato realizzato da noi sviluppatori (e non da qualche burlone entrato in possesso del nostro codice sorgente e credenziali del Play Store).

Per creare un nuovo Keystore ti basterà tornare all’interno dei Player Settings ed espandere la sezione Publishing Settings.

Qui dovrai spuntare la casella Create a new Keystore, cliccare sul bottone Browse Keystore, inserire il nome della keystore e selezionare una Directory in cui salvare il nuovo file:

Fatto ciò, occorrerà creare una nuova Key: dopo aver inserito la password del Keystore potremo selezionare l’opzione Create a new key dalla voce Alias.

Qui dovrai inserire alcune informazioni necessarie alla firma dell’app, come il tuo nome, la tua città ed una Password:

Fatto ciò, potrai cliccare su Create Key. Inserisci la password della key appena creata nell’apposito spazio sotto il campo Alias e adesso potrai finalmente buildare una versione dell’app pubblicabile sullo store.

Mi raccomando, fai Attenzione!

All’interno di un singolo Keystore puoi inserire diverse key, vale a dire diverse applicazioni.

Non utilizzare mai la stessa key per firmare due diverse applicazioni, e soprattutto prendi sempre nota delle password di ogni key.

Non c’è modo di recuperare la password di una key e se dovessi dimenticare quella di un’app già pubblicata sullo store non potresti più pubblicare aggiornamenti per quella singola app.

Allo stesso modo, assicurati di salvare sempre il tuo keystore in un posto sicuro e di averne un paio di copie di backup: la sicurezza non è mai troppa!

Pubblicazione su Play Store

Dopo aver buildato il tuo gioco in formato apk, dovrai occuparti della distribuzione.

Per poter pubblicare il tuo gioco su Play Store dovrai entrare nella Google Play Developer Console ed acquistare una licenza da sviluppatore (dal costo di 25€ una tantum).

Dopo aver acquistato la licenza potrai entrare nella tua pagina da sviluppatore, e creare una nuova applicazione dall’apposito tasto in alto a destra:

Qui, prima di tutto, dovrai caricare il tuo file APK nella sezione “Versioni dell’app”, scegliendo se questa dovrà essere una versione destinata alla distribuzione o ad un test.

Dovrai anche compilare i vari campi relativi alla classificazione dei contenuti del tuo gioco, prezzi e scheda dello store del gioco (accanto ai quali apparirà una spunta verde una volta inseriti tutti i dati necessari).

A questo punto potrai inviare l’app in  review, e diventerà disponibile nel giro di qualche ora!

Buildare il progetto per iOS

Devi sapere che per poter portare il tuo gioco su iOS devi necessariamente utilizzare un computer dotato di macOS.

Unity infatti non ti permetterà di generare un file in formato .ipa, ma un progetto per xCode (disponibile appunto solo su macOS).

I passaggi da seguire per buildare il progetto xCode sono uguali a quelli visti per buildare l’APK per Android.

Dovrai portarti all’interno del menù Build Settings, scegliere iOS come dispositivo di destinazione e riempire i campi all’interno del menù Player Settings.

Per iOS non sarà necessario scaricare SDK e JDK, dato che Java non sarà coinvolto nel processo di build.

Una volta ottenuto il progetto xCode puoi seguire il nostro articolo su come pubblicare un applicazione su app store per avere maggiori informazioni sul processo di build e pubblicazione.

Conclusioni

Adesso la tua app è quasi pronta per essere mostrata al mondo.

A questo punto ti consiglio di dare un’occhiata all’articolo del nostro Matteo sull’App Store Optimization per tirar fuori il meglio dalla pagina tuo gioco ed ottenere la giusta visibilità!

Per qualsiasi dubbio riguardante i processi di build e pubblicazione non esitare a lasciare un commento qui sotto.

Buon Game Development!

Le novità di Unity 5.6. Cosa c’è di nuovo?

Corso gratuito sviluppo giochi con Unity 3D. Le basi di Unity dalla A alla Z.

Habemus aggiornamento! Da oggi  la nuova versione di Unity è disponibile al download (a questo indirizzo). L’ultimo aggiornamento del nostro Game Engine preferito porta con sé diversi miglioramenti e nuove caratteristiche! diamo uno sguardo alle più importanti novità di Unity 5.6.

Video Player

Nelle precedenti versioni di Unity avevamo a disposizione il componente Movie Texture, che consentiva la riproduzione di vido solo tramite Apple QuickTime.

Il nuovo componente Video Player permetterà di riprodurre video fino a risoluzione 4K senza appoggiarsi a QuickTime (consentendo così la riproduzione di video anche su dispositivi Android), sia a schermo intero che sovrascrivendo un materiale o tramite render texture!

Light Explorer

Ti è mai capitato di perdere di vista le luci della tua scena tra centinaia e centinaia di game object diversi?

Non sei il solo! In Unity 5.6 troverai una nuova finestra che risolverà questo problema: Il Light explorer consentirà di tenere sott’occhio tutte le luci della scena ed i relativi parametri, consentendo di regolarle con maggior efficienza!

Progressive Lightmapper

Il baking delle luci può estenuante per chi lavora in Unity, e per una scena complessa e con molte luci  possono essere necessarie diverse ore affinché questo venga completato.

Ancor peggio, prima di vedere i risultati del baking bisogna attendere che questo sia completato, e cambiare anche solo un parametro di una delle luci della scena comporterà il riavvio dell’intera procedura.

Hai aspettato per 4 ore per poi renderti conto che una delle tue luci è troppo… gialla? Bene, preparati ad aspettare altre 4 ore!

Il nuovo Progressive Lightmapper ci aiuterà aggiornando la lightmap mentre il baking è in esecuzione, aggiungendo dettagli man mano che i relativi calcoli vengono eseguiti. Sarà anche possibile dare priorità alla parte della scena attualmente inquadrata dalla telecamera, così da poter ridurre al minimo lo spreco di tempo in baking infruttuosi!

…Magia!

Build per piattaforme Facebook

Facebook sarà disponibile come piattaforma di sviluppo per il nostro progetto: nello specifico potremo rendere disponibile l’app per Facebook Games (come un tradizionale browser game) o per Facebook Gameroom: la nuova piattaforma di gioco destinata ai PC creata del colosso dei social network.

NavMesh System

Una NavMesh (o Navigation Mesh) è una struttura fondamentale per il pathfinding e la creazione di complessi comportamenti motori all’interno di un videogioco.

In questo aggiornamento il sistema con cui vengono gestite le NavMesh è stato completamente rivisto: adesso NavMesh e relativi agenti sono gestiti tramite dei componenti appositi, scritti tramite delle nuove API di basso livello. Tutto questo ci darà la possibilità di creare e modificare le NavMesh a runtime, o persino di salvarle all’interno di un prefab!

9-Slice Sprites

Il 9-slice scaling è un metodo che consente di suddividere in 9 parti un’immagine e ridimensionarla senza perdita di qualità, basandosi sulla ripetizione indipendente di queste 9 parti lungo la superficie interessata.

Fino ad ora utilizzato per gli elementi della UI, adesso è possibile applicare il 9-slice scaling a degli sprite: utilissimo se si vuole realizzare un progetto in 2D!

2D Sorting group

Sarà possibile ordinare dei renderer 2D appartenenti ad un unico oggetto e racchiuderli in un unico gruppo: in questo modo il gruppo verrà renderizzato insieme e si eviteranno sgradite interpolazioni con altri gruppi di renderer 2D!

Collider composito 2D

Un nuovo componente, il Composite Collider 2D, permetterà di creare dei collider 2D unici, frutto dell’unione di più collider.

Physics Debug Visualization

Un nuovo tool per il debug visuale delle collisioni fa la sua comparsa: grazie a questo sarà possibile trovare eventuali problemi con le collisioni del nostro progetto semplicemente lanciando uno sguardo alla scene view.

Saranno presenti anche delle opzioni in grado di semplificare il tutto, ad esempio nascondendo alcuni tipi di colliders o mostrando solo oggetti con dei RigidBody attivi!

GPU Instancing

Il GPU instancing permette di creare diverse istanze dello stesso oggetto effettuando un minor numero di draw calls: in parole povere, se devi realizzare un grosso insieme degli stessi oggetti (ad esempio uno stormo di uccelli, o una fascia di asteroidi) l’instancing ti permetterà di farlo risparmiando preziosissime risorse.

Benchè fosse possibile utilizzare questa feature anche in versioni precedenti, per attivarla adesso basta cliccare su un  semplice checkbox nel pannello del materiale di cui si desidera realizzare le diverse istanze.

Sì! Voglio il potere!

Supporto a Vulkan

Per chi non lo sapesse, Vulkan è un’ API grafica multi piattaforma di basso livello in grado di sfruttare al meglio le moderne GPU: ciò si traduce in performance migliori e consumi notevolmente ridotti rispetto alle librerie grafiche OpenGL.

Metal Compute Shaders

Uno shader è una parte di codice eseguita dal processore grafico (o per gli amici, GPU) per disegnare su schermo poligoni o pixel.

Sì, è una descrizione che può sembrare molto generica, ma in effetti è anche la più accurata! In origine infatti, gli shader venivano utilizzati esclusivamente per il rendering delle ombre sulla scena (da qui il nome che deriva da shade, ovvero “ombra”).

Oggi gli shader vengono ampiamente utilizzati per la creazione dei diversi materiali, o anche per creare effetti e filtri vari da applicare alla camera di gioco!

Nella vasta famiglia degli shader troviamo anche i Compute Shaders: programmi che vengono eseguiti al di fuori della normale pipeline di rendering e che fondamentalmente consentono di eseguire alla GPU algoritmi normalmente eseguiti su CPU.

In Unity 5.6 viene aggiunto il supporto a Metal Compute: i compute shaders gestiti dalla API grafica Metal made in Apple!

E tanto altro!

Per una lista completa di tutte le novità di Unity 5.6 visita questo link. Se invece sei interessato allo sviluppo di giochi multipiattaforma con Unity 3D, dai un’occhiata al mio corso gratuito.

Non mi resta che salutarti ed augurarti una buona programmazione!

Creare un ciclo giorno notte con Unity 3D

Al giorno d’oggi, i cosidetti “Sandbox” spadroneggiano senza rivali nell’industria videoludica.

Il nome “Sandbox” (che fa riferimento ai recinti di sabbia in cui giocano i bambini) rappresenta l’intento degli sviluppatori di dare al giocatore un mondo che non abbia limiti, in cui quest’ultimo possa fare ciò che preferisce: costruire abitazioni, procacciarsi viveri, andare a zonzo senza una meta precisa, e così via.

"Guarda! Un sandbox!"
“Guarda! Un sandbox!”

Ho parlato di sandbox perchè in questo genere di giochi una delle caratteristiche che da quel senso di libertà e senso di appagamento è l’alternarsi del giorno e della notte. L’alternarsi del giorno e della notte da al giocatore quel senso dello scorrere del tempo, rendendo così il gioco più immersivo.

Come avrai sicuramente capito, in questo articolo voglio farti vedere come creare un ciclo giorno notte con Unity 3D all’interno di un tuo qualsiasi e dico qualsiasi gioco:

Immagine00

Ne approfitto per ricordarti che il tutorial è pensato per chi già segue il mio corso gratuito di sviluppo videogiochi con Unity 3D, quindi, se sei alle prime armi ti consiglio di dargli uno sguardo.

Ok, pronto? Cominciamo!

Lo script Unity 3D per il ciclo Giorno Notte

Per prima cosa, apri la tua Game Scene (per questo articolo ho creato una semplice scena in stile lowpoly che puoi scaricare cliccando qui) e crea al suo interno una Directional light.

Apri il pannello Lighting (lo trovi nel menù a tendina Window, nella barra in alto di Unity 3D) e, sotto il pannello “Scene”, assegna la directional light che hai appena creato al valore sun. Accertati che la skybox sia quella di default (chiamata Default-Skybox, per l’appunto). Se non ti ricordi come navigare nell’interfaccia di Unity, rinfrescati la memoria.

A questo punto potrai notare che, roteando la directional light, anche il cielo reagirà di conseguenza: su di esso troveremo un sole in posizione opposta alla rotazione della Directional light! Più questo sole sarà vicino all’orizzonte, più il cielo assumerà i colori tipici di un tramonto. Se il sole scenderà sotto la linea dell’orizzonte… sarà notte!

gif01Per ottenere il nostro ciclo giornaliero non dovrai far altro che automatizzare la rotazione di questa directional light! Aggiungi, quindi, un nuovo script (che ho chiamato DayNightCycle) alla directional light (Se non ti ricordi cos’è uno script o come si aggiunge, trovi tutto in questa mia lezione gratuita):

using UnityEngine;
using System.Collections;

public class DayNightCycle : MonoBehaviour {
	[Range(0.0f,10.0f)]
	public float CycleSpeed;

	void FixedUpdate () {
		transform.Rotate(new Vector3(0.1f * CycleSpeed,0.0f,0.0f));
	}
}

In questa prima fase hai semplicemente reso automatica la rotazione del Sole, ma non è ancora abbastanza!

Allo stadio attuale, infatti, il sole continuerà a colpire con la sua luce gli oggetti della scena anche durante la notte, dal basso verso l’alto. Devi eliminare questo effetto, e per farlo, bisogna aggiungere qualche riga al nostro script:

using UnityEngine;
using System.Collections;

public class DayNightCycle : MonoBehaviour {
	[Range(0.0f,10.0f)]
	public float CycleSpeed;
	private Light sunLight;

	void Start(){
		sunLight = GetComponent<Light>();

	}
	void FixedUpdate () {
		transform.Rotate(new Vector3(0.1f * CycleSpeed,0.0f,0.0f));

		if(transform.rotation.eulerAngles.x > 0.0f && transform.rotation.eulerAngles.x < 160.0f){
			sunLight.intensity = Mathf.Lerp(sunLight.intensity,1.0f,Time.deltaTime*CycleSpeed*2);
		}
			if(transform.rotation.eulerAngles.x > 160.0f){
			sunLight.intensity = Mathf.Lerp(sunLight.intensity,0.0f,Time.deltaTime*CycleSpeed*2);
		}
	}
}

tutto ciò che abbiamo fatto in questa fase è stato aggiungere un riferimento alla luce, così da poterne manipolare la luminosità all’interno dello script.

Piuttosto che settare il valore dell’intensità luminosa a zero, ho utilizzato la funzione Mathf.Lerp, che permette di creare un’interpolazione tra due valori. In questo modo al sorgere ed al tramontare del Sole l’illuminazione della scena muterà progressivamente!

Aggiungere le stelle

Adesso il nostro ciclo potrebbe dirsi completo, se non fosse per un piccolo dettaglio: mancano le stelle. Un cielo notturno non può dirsi tale senza quei milioni di puntini luminosi mozzafiato! Vediamo quindi come creare un basilare cielo stellato da donare alla nostra notte virtuale!

Inserisci una sfera al centro della tua scena (coordinate 0,0,0) ed aumenta di molto la scala: un valore di 200 per ognuno degli assi andrà bene per una scena modesta come questa, ma non esitare ad ingrandirla ulteriormente se necessario!

Disabilita i componenti “Sphere Collider” e “Mesh Renderer”, ed aggiungi un componente di tipo “Particle System“:

gif02

Affinchè questa sfera si trasformi in un vero e proprio cielo stellato, sarà necessario giocherellare un po’ con i parametri del particle system. Ruota la sfera di 270 gradi nell’asse delle x e dal suo particle system spunta la casella “Shape, impostando il parametro “Radius” a 3 e spuntando la casella “emit from shell“.

Se vuoi qualche stella in più puoi aumentare il parametro “Emission e, per finire, possiamo impostare un gradiente come “Start Color” ed una curva per “Start Size“, così da avere stelle di dimensioni e colori diversi:

gif03

A questo punto devi tornare allo script che hai scritto in precedenza per apportare le ultime modifiche. Vuoi, che le stelle siano visibili solo durante la notte (o al massimo durante le fasi di alba e tramonto!), quindi aggiungi i dovuti riferimenti al particle system della sfera:

using UnityEngine;
using System.Collections;

public class DayNightCycle : MonoBehaviour {
	[Range(0.0f,10.0f)]
	public float CycleSpeed;
	private Light sunLight;
	public ParticleSystem starSystem;

	void Start(){
		sunLight = GetComponent<Light>();

	}
	void FixedUpdate () {
		transform.Rotate(new Vector3(0.1f * CycleSpeed,0.0f,0.0f));

		if(transform.rotation.eulerAngles.x > 0.0f && transform.rotation.eulerAngles.x < 160.0f){
			sunLight.intensity = Mathf.Lerp(sunLight.intensity,1.0f,Time.deltaTime*CycleSpeed*2);
			starSystem.Stop();
		}
			if(transform.rotation.eulerAngles.x > 160.0f){
			sunLight.intensity = Mathf.Lerp(sunLight.intensity,0.0f,Time.deltaTime*CycleSpeed*2);
			starSystem.Play();
		}
	}
}

Ultimo ma non meno importante, vai ad aggiungere il riferimento al particle system della sfera allo script del Sole… et voillà! Adesso hai appena creato il tuo ciclo giorno-notte con Unity 3D!

Conclusione

Per questo articolo è tutto! Hai visto che Creare un ciclo giorno notte con Unity 3D è più semplice di quello che si può pensare. Basta solo un po’ di ingegno per poter realizzare molte delle features che, agli occhi di un dev inesperto, sembrano assurde.

Continua a seguirci qui su xCoding e se non lo hai ancora fatto dai uno sguardo al mio corso base di Unity 3D.

Alla prossima e buona programmazione!