Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Pubblicare un gioco Unity su Windows Store

Esportare il gioco dalla piattaforma Unity, creare una solution Visual Studio e sottoporre l'applicazione al Windows Store
Esportare il gioco dalla piattaforma Unity, creare una solution Visual Studio e sottoporre l'applicazione al Windows Store
Link copiato negli appunti

Come è noto Windows Store è il marketplace grazie al quale possiamo distribuire le nostre app per PC e tablet e proporle ad un pubblico di milioni di utenti in tutto il mondo. Possiamo vendere i nostri giochi, creare versioni trial, oppure utilizzare l'acquisto "in-app", o ancora monetizzare il nostro lavoro grazie alla pubblicità.

La prima cosa da fare quindi è capire come esportare i giochi che abbiamo creato (ad esempio quello realizzato nella lezione precedente) come app di Windows Store che giri su tutti i dispositivi Windows 8.1.

Iniziamo aprendo il nostro gioco con Unity (potete scaricare il progetto qui) e controllare se tutto funziona a dovere. Per farlo basta aprire la gameScene e lanciare il gioco con play: sarà tutto ok se apparirà un'orda di invasori che cercherà di raggiungere il lato destro dello schermo e se voi riuscirete a sparargli con il vostro laser cliccando con il mouse o toccando lo schermo.

Gestire la modalità Snap e le molteplici risoluzioni dello schermo

Prima di essere pubblicato il nostro gioco dovrà passare il processo di certificazione del Windows Store, perciò dovremo prevedere che il gioco gestisca la "snapped view", ovvero la modalità che permette di suddividere lo schermo in più porzioni e di far girare applicazioni diverse in ciascuna di esse.

Tipicamente non è semplice poter giocare in modalità snap (si tratta di un cambio di risoluzione). Perciò il modo più comune per gestire la modalità snap è quello di mettere semplicemente in pausa il gioco. Ma come facciamo a mettere in pausa il gioco?

Da Unity 4.3 in poi abbiamo a disposizione la funzione UnityPause() che, come vedremo tra poco, si può richiamare direttamente dalla soluzione esportata in Visual Studio.

In alternativa e a scopo puramente dimostrativo, vediamo come creare uno script che congeli il gioco che possa essere a sua volta richiamato direttamente nella soluzione esportata. Come sempre creiamo un nuovo script nella cartella Scripts:

using UnityEngine;
using System.Collections;
public static class Windows8Handler
{
	public static void PauseGame(bool p)
    {
        if (p)
        {
            Time.timeScale = 0.0f;
        }
        else Time.timeScale = 1.0f;
    }
}

Aver dichiarato un metodo statico infatti ci consentirà di richiamare lo script ovunque vogliamo senza dover istanziare la relativa classe. Prima della versione 4.3 di Unity, bisognava adottare questo metodo per stoppare il gioco, perché non esisteva ancora la funzione UnityPause. Aldilà di questo possiamo tenere conto della tecnica per ulteriori funzionalità che potrebbero esserci comode in futuro per la comunicazione tra gioco e sistema "ospite".

Prepararsi ad esportare la Windows Store App

Creiamo una nuova cartella chiamata Publishing all'interno della cartella Assets e aggiungiamo i tre formati per il logo che rappresenterà la nostra applicazione (li troviamo nel file allegato a questa lezione)

Ora impostiamo la piattaforma di destinazione dell'applicazione su Windows Store. Clicchiamo su File > Build Settings ... e tra le piattaforme a disposizione nel pannello Paltform selezioniamo Windows Store Apps

Clicchiamo sul pulsante Switch Platform per rendere la piattaforma Windows Store quella standard per noi . Poi clicchiamo sul pulsante Player Settings per impostare le proprietà della soluzione che verrà creata alla fine dell'esportazione.

Questa maschera ci permette di modificare molte proprietà legate alla piattaforma di pubblicazione. Cliccando sulla tab Publishing Settings in basso appariranno le opzioni specifiche per la piattaforma selezionata.

Possiamo impostare le proprietà per il logo delle tile utilizzando le tre immagini che avevamo aggiunto alla cartalla Publishing.

In questo modo abbiamo definito le tile per il nostro gioco ovvero le icone che identificheranno il nostro gioco nel menu start. Dobbiamo anche impostare la splash screen del gioco. inseriamo il file splash.png che troviamo nello zip in allegato.

Esportare il package

Per esportare il nostro gioco, andiamo ancora su Build Settings (File > Build Settings...), clicchiamo semplicemente su Build e salviamo tutto in una cartella a nostra scelta (es. "Win81Build" ) Può volerci qualche minuto, ma avremo finalmente la soluzione Visual Studio del nostro gioco.

Alla fine dovrebbe aprirsi automaticamente la cartella in cui abbiamo esportato il progetto.

Aprire il progetto in Visual Studio per creare lo store pacakge

Come accennato all'inizio della guida, per creare il pacchetto da sottomettere allo Store , e non solo, ci serve Visual Studio 2013.

Se non abbiamo installato Visual Studio 2013 sulla nostra macchina possiamo scaricare una delle versioni di prova (Ultimate, Professional, etc.) oppure le versioni Express, che sono gratuite. Per gli studenti, grazie a programmi come DreamSpark c'è la possibilità di accedere a licenze gratuite anche delle versioni a pagamento.

Apriamo quindi la soluzione Invad0rs.sln in Visual Studio 2013.

Cliccando sulla soluzione possiamo modificare l'architettura (e scegliere x86 piuttosto che ARM ad esempio) e decidere se la versione che compileremo è quella di Debug o quella pronta per il rilascio. Selezioniamo Release|x86.

Clicchiamo ora sul tasto play su Computer locale (Windows 8.1) per effettuare la build del Windows Store App package (.appx) e mandiamo in esecuzione il gioco.

In questo modo avremo effettuato il deploy del gioco sul nostro dispositivo Windows 8.1 e se tutto sarà andato bene dovrebbe girare perfettamente. Tra le app sotto la start page dovremmo trovare anche la nostra:

Completare il supporto alla modalità Snap

Vediamo come gestire la modalità Snap per una soluzione XAML/C#. Infatti nell'esportare il gioco abbiamo scelto questo tipo di soluzione (c'erano diverse possibilità: XAML C++ Solution; D3D11 C# Solution; D3D11 C++ Solution).

Perciò per effettuare la nostra modifica apriamo il file App.xaml.cs:

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices.WindowsRuntime;
using Windows.ApplicationModel;
using Windows.ApplicationModel.Activation;
using Windows.Foundation;
using Windows.Foundation.Collections;
using Windows.UI.Core;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;
using Windows.UI.Xaml.Data;
using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Navigation;
using UnityPlayer;
using Windows.UI.ViewManagement; // Aggiungiamo un riferimento a ViewManagement
// The Blank Application template is documented at http://go.microsoft.com/fwlink/?LinkId=234227
namespace Template
{
	/// <summary>
	/// Provides application-specific behavior to supplement the default Application class.
	/// </summary>
	sealed partial class App : Application
	{
		private WinRTBridge.WinRTBridge _bridge;
		private AppCallbacks appCallbacks;
		/// <summary>
		/// Initializes the singleton application object.  This is the first line of authored code
		/// executed, and as such is the logical equivalent of main() or WinMain().
		/// </summary>
		public App()
		{
			this.InitializeComponent();
			appCallbacks = new AppCallbacks(false);
            appCallbacks.Initialized += RemoveSplashScreen;
		}
		/// <summary>
		/// Invoked when the application is launched normally by the end user.  Other entry points
		/// will be used when the application is launched to open a specific file, to display
		/// search results, and so forth.
		/// </summary>
		/// <param name="args">Details about the launch request and process.</param>
		protected override void OnLaunched(LaunchActivatedEventArgs args)
		{
            appCallbacks.SetAppArguments(args.Arguments);
			Frame rootFrame = Window.Current.Content as Frame;
			// Do not repeat app initialization when the Window already has content,
			// just ensure that the window is active
			if (rootFrame == null && !appCallbacks.IsInitialized())
			{
				var mainPage = new MainPage(args.SplashScreen);
				Window.Current.Content = mainPage;
				Window.Current.Activate();
				// Setup scripting bridge
				_bridge = new WinRTBridge.WinRTBridge();
				appCallbacks.SetBridge(_bridge);
                appCallbacks.SetSwapChainBackgroundPanel(mainPage.GetSwapChainBackgroundPanel());
				appCallbacks.SetCoreWindowEvents(Window.Current.CoreWindow);
				appCallbacks.InitializeD3DXAML();
			}
			Window.Current.Activate();
			// Aggiungiamo un handler all'evento SizeChanged
            Window.Current.SizeChanged += Current_SizeChanged;
		}
		// Scriviamo il  codice dell'handler
        void Current_SizeChanged(object sender, WindowSizeChangedEventArgs e)
        {
			// Verifichiamo la visualizzazione
			// mettiamo in pausa se l'app non gira a schermo intero
            bool isFull = ApplicationView.GetForCurrentView().IsFullScreen;
            if (isFull)
                AppCallbacks.Instance.UnityPause(0);
            else
                AppCallbacks.Instance.UnityPause(1);
        }
        private void RemoveSplashScreen()
        {
            try
            {
                MainPage page = (MainPage)Window.Current.Content;
                page.RemoveSplashScreen();
            }
            catch (InvalidCastException)
            { }
        }
	}
}

Prima di tutto abbiamo aggiunto una direttiva using per includere Windows.UI.ViewManagement, quindi aggiungiamo un listener all'evento SizeChanged, che è l'evento che l'app utilizza per sapere quando avviene un cambio di risoluzione o delle dimensioni della schermata, ovvero quando avviene lo switch in modalità Snap.

Nel corpo della funzione interroghiamo l'applicazione per sapere se sta girando a schermo intero. Poniamo questa condizione infatti come l'unica che consenta di giocare. Se cambiamo risoluzione o ci troviamo in modalità Snap, l'applicazione si congelerà, finché non si sia tornati a farla girare a schermo intero.

Come anticipato, utilizzeremo AppCallbacks.Instance.UnityPause(1) per congelare il gioco e chiameremo la stessa funzione (ma con argomento 0) per sbloccarlo.

Impostare proprietà importanti per essere pronti al submit

Ora ci sono alcune cose che dobbiamo fare prima di inviare il nostro gioco al Windows Store per la pubblicazione. Clicchiamo su PROGETTO > Proprietà di Invad0rs:

e nella tab Applicazioni clicchiamo su Informazioni Assmbly...

Impostiamo la lingua

Poi riempiamo tutti i campi che vogliamo e clicchiamo OK

Creare un account per la pubblicazione su Windows Store e creare il progetto sul portale

Creare un account e registrarsi come publisher è piuttosto semplice. Per iniziare possiamo andare su dev.windows.com e accedere con il nostro account. Se non ne abbiamo uno possiamo effettuare la registrazione.

Una volta accreditati, per creare un progetto su Windows Store clicchiamo su DASHBOARD.

Qui, la prima volta ci può essere richiesto di aggiornare alcune informazioni del nostro account, poi di sottoscrivere il contratto per gli sviluppatori:

e di completare l'acquisto (14€) o di inserire un codice di sconto.

Finalmente possiamo accedere alla nostra Dashboard:

Clicchiamo sul Invia un'App

Ora la prima cosa che dobbiamo fare è quella di prenotare il nome dell'app, per avere la sicurezza che nessun altro possa utilizzarlo. Il blocco dura un anno.

Creare un collegamento col il nuovo nome in Visual Studio 2013 è facile. Torniamo su Visual Studio e, aperto il progetto del gioco, clicchiamo su PROGETTO > Store > Assoca Applicazione a Store.

Anche qui dovremo inserire il nostro account, prima di accedere alla lista delle applicazioni che abbiamo sullo Store

Clicchiamo sul nome del progetto e andiamo avanti. Poi se tutto ci sembra corretto, clicchiamo su Associa. Ora siamo pronti per creare il pacchetto per la pubblicazione.

Creare il file appx

Clicchiamo su PROGETTO > Store > Crea Pacchetti dell'applicazione

Selezioniamo per compilare i pacchetti per il caricamento. Dopo un veloce ulteriore riconoscimento, riappare la lista delle app. Scegliamo il nostro gioco e proseguiamo.

Verifichiamo il percorso in cui verrà salvato il pacchetto e scegliamo le differenti architetture su cui vogliamo far girare l'applicazione.

Clicchiamo su Crea per generare il pacchetto.

Una volta pronto il pacchetto possiamo lanciare alcuni test per garantire una migliore aderenza ai requisiti dello store come uso della memoria, performance, tempo di avvio, etc. Pero farlo possiamo utilizzare il Windows App Certification Kit, come ci viene suggerito dal wizard.

Lasciamo per un po' il computer ad elaborare.

Una volta completata anche questa fase, torniamo sulla pagina di Windows Store dove abbiamo prenotato il nome e seguiamo i passaggi successivi ed effettuiamo l'upload del file appx. Quindi possiamo effettuare il submit dell'applicazione e inviarla per la fase di testing, che può durare qualche giorno.

Se la nostra app sarà accettata, potremo trovare il nostro gioco sul Windows Store! Altrimenti ci verrà segnalato cosa abbiamo ancora da sistemare prima di riprovare.

Ti consigliamo anche