Unity3d : un Menu nascosto per testare i giochi

Durante la creazione di un gioco esiste sempre la necessità di introdurre un meccanismo che consenta di testare tutti i livelli con vite o energia infinite, oppure di abilitare una modalità "speciale" ai beta tester in modo che abbiano a disposizione contenuti o livelli sbloccati senza necessariamente doverli sbloccare in gioco.

Un semplice Cheat Menu per Unity3D


Per questo scopo, in molti titoli blasonati viene creata una "console", cioè un componente che una volta attivato dall'interno del gioco consente di esegurie dei comandi adhoc.

In questo post vedremo come costruire un menu di test (o cheat menu) che viene attivato utilizzando una parola chiave e che consente di eseguire codice all'interno del gioco stesso.
Questa funzionalità è utile quando si vuole modificare qualche parametro di gioco direttamente sulla versione pubblicata: è una sorta di TEST MODE che si abilita in modo semplice e veloce.

Supponiamo di completare il nostro gioco con Unity e di reperire alcuni beta tester che vogliono contrinuire al prodotto finale, provando a fondo le funzionalità. Essi devono poter avere accesso al gioco completo: livelli sbloccati, vite infinite, tempo infinito (per i giochi a tempo). 

In questo modo potranno terminare le loro attività in meno tempo.

Creazione del menu nascosto

Come indicato, vedremo come creare un'interfaccia a pulsanti che compare solo dopo che l'utente inserire una parola chiave. Se l'utente sbaglia a digitare la parola chiave (anche solo un carattere) l'inserimento del codice di sblocco viene interrotta (in questo modo si evita che un utente smaliziato possa provare ad indovinare a caso il codice). Quando il sistema rileva che è stata inserita correttamente la parola chiave, viene mostrata a video un'interfaccia nativa di Unity con alcuni pulsanti che il giocatore/tester può utilizzare per abilitare funzionalità nascoste.

In pratica questa funzionalità è possibile assolverla con un solo script, da collegare ad un oggetto qualsiasi della scena (probabimente anche un oggetto vuoto contenuto nella scena stessa).

Ecco i passaggi da seguire:

  • Aprire Unity
  • Aprire un progetto esistente (o crearne uno nuovo, a seconda delle esigenze)
  • creare un nuovo oggetto vuoto (empty) nella scena attuale
  • creare un nuovo script CS di nome HiddenMenu.CS e agganciarlo al nuovo oggetto creato

using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using UnityEngine.SceneManagement;

public class HiddenMenu : MonoBehaviour {

    private string[] cheatCode;
    private int index;
    private bool cheat;

    void OnGUI()
    {
        if (cheat) 
        {
            // draw the hidden menu
            GUI.Box(new Rect(20, 80, 240, 240), "Cheat Menu :-) ");
            if (GUI.Button(new Rect(40, 120, 200, 20), "Reset all data"))
            {
                // do a total reset
            }
            if (GUI.Button(new Rect(40, 150, 200, 20), "Reset Levels"))
            {
                // do a reset all levels
            }
            if (GUI.Button(new Rect(40, 180, 200, 20), "Unlock Levels"))
            {
                // if you have blocked levels, here you can unlock them
                // for the testers
            }
            if (GUI.Button(new Rect(40, 210, 200, 20), "Unlimited credits"))
            {
                // give unlimited CREDITS to the player
            }
            if (GUI.Button(new Rect(40, 240, 200, 20), "Unlimited time"))
            {
                // give unlimited TIME to the player
            }
            if (GUI.Button(new Rect(40, 270, 200, 20), "Close this menu"))
            {
                cheat = false;
                index = 0;
            }
        }
    }

    void Start () 
    {
        // The pass Code is "secret", user needs to input this word to show the hidden menu
        // You can change it whatever you want
        cheatCode = new string[] { "s", "e", "c", "r", "e", "t"};
        index = 0;
    }

    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Escape))
        {
            Application.Quit();
        }

        if (Input.anyKeyDown)
        {
            if (Input.GetKeyDown(cheatCode[index]))
            {
                // right input, check next digit
                index++;
            }
            else
            {   
                // wrong input, restart from index 0
                index = 0;
            }
        }

        if (index == cheatCode.Length)
        {
            // cheat is ok, the hidden menu is now visible :-)
            cheat = true;
            index = 0;
        }
    }
}

Proviamolo!

Eseguite il gioco con Unity e attivate l'interfaccia nascosta digitanto (senza errori) la stringa "secret". Se avete seguito correttamente i vari passi, apparirà a video il menu nascosto.

Creazione di un oggetto Empty nella scena

Il menu nascosto viene visualizzato dopo l'inserimento corretto del passcode


Ovviamente potete configurare un vostro pass-code preferito.

All'interno dello script, basta scrivere il codice che verrà richiamato alla pressione dei vari pulsanti, garantendo al tester di poter provare il gioco con vite o tempo infiniti.




Commenti