In questo tutorial ti mostrerò come creare un semplice menu di personalizzazione dei caratteri e come salvare i dati necessari per l'uso in un gioco. Creeremo un avatar giocatore (un aereo in questo esempio), lo personalizziamo aggiungendo allegati opzionali o cambiando colore, salvando i dati, caricando un altro livello e ricrearlo dai dati salvati. Ciò ti consente in effetti di personalizzarlo al di fuori del mondo di gioco; in un sistema di menu, quindi è disponibile ovunque tu voglia, anche dopo aver smesso e riavviato il gioco.
Post correlatiAvrai bisogno di una comprensione di base dell'Unità per questo. Se vuoi modellare i tuoi oggetti, puoi farlo anche tu, ma il modello 3d usato in questo tutorial è anche disponibile per il download qui. L'intero progetto, nel caso in cui si desideri cercare qualcosa, può anche essere scaricato qui.
Crea un nuovo progetto Unity. Avremo bisogno di 2 livelli, quindi possiamo passare da uno all'altro. Salva la scena corrente e chiamala "levelMenu". Quindi apri le impostazioni di compilazione (file - impostazioni di costruzione) e premi "aggiungi scena corrente". Questo è necessario per poterlo successivamente accedere e caricarlo direttamente.
Quindi crea una nuova scena e chiamala "levelGame" e aggiungila anche alle impostazioni di build. Ora dovrebbero essere presenti le scene di base, permettendoci di riempirle di cose.
Per ora utilizzeremo un aeroplano come "personaggio" (questo è molto più facile da gestire rispetto a un personaggio umano pieno :). Ottieni le risorse 3d (eccole di nuovo disponibili) e copiali nella cartella delle risorse. Crea un cubo e sostituisci la mesh per la mesh piana. Crea un nuovo materiale e aggiungilo all'aereo. Infine, trascina l'aereo nella cartella del progetto per creare un prefabbricato.
Per personalizzare l'aereo avremo bisogno di un qualche tipo di interfaccia.
Crea un nuovo script e chiamalo plane.js. Inserisci il codice seguente
function OnGUI () if (Application.loadedLevel == 0) if (GUI.Button (Rect (10, 10, 100, 50), "Red")) renderer.material.color = Color.red; if (GUI.Button (Rect (10, 70, 100, 50), "Blue")) renderer.material.color = Color.blue; if (GUI.Button (Rect (10, 130, 100, 50), "Green")) renderer.material.color = Color.green;
Aggiungi lo script al prefabbricato dell'aereo e metti un aereo nella scena. Sposta la telecamera in modo che guardi l'aereo, in modo che possiamo vedere le modifiche che apporteremo ad esso. Quando lo esegui, dovrebbe apparire come questo:
Se si preme un pulsante, il colore dell'aereo dovrebbe cambiare. Puoi provarlo in questa build: DOWNLOAD SOURCE PROJECT 1.
L'if (Application.loadedLevel == 0) -bracket disabilita il pulsante se viene caricato un altro livello tranne il menu (livello 0). Questo è utile per gestire i sistemi di gui.
Nel tuo "levelGame", metti un altro piano e fai in modo che la fotocamera lo guardi. Se lo provi, non dovrebbe ancora accadere nulla, poiché non abbiamo ancora aggiunto l'adattamento ai dati salvati. Mentre sei lì, rendi la scena diversa da "levelMenu" -scene, in modo che sia facile distinguere tra loro. Dare un colore di sfondo diverso nella fotocamera principale dovrebbe essere sufficiente.
Ora torna al livello "levelMenu", tutto sarà fatto da lì. Apri lo script piano e aggiungi le seguenti linee, direttamente sotto il codice per i pulsanti:
function OnGUI () if (GUI.Button (Rect (120, 10, 100, 50), "Load Level")) Application.LoadLevel (1);
Provalo! Dovrebbe apparire un nuovo pulsante e se lo si preme, caricherà il nuovo livello. L'aereo nell'altro livello avrà però l'aspetto "di base". Il prossimo passo sarà adattarlo una volta che il livello è stato caricato.
Unity è dotato di funzioni "PlayerPrefs". Questi consentono di salvare e caricare i dati su qualsiasi dispositivo utilizzato. Per prima cosa salveremo il colore del piano e poi vedremo come ricrearlo sul secondo livello caricato.
Adatta il pulsante del livello di carico per assomigliare a questo:
if (GUI.Button (Rect (120, 10, 100, 50), "Load Level")) PlayerPrefs.SetFloat ("planeColorR", renderer.material.color.r); PlayerPrefs.SetFloat ("planeColorG", renderer.material.color.g); PlayerPrefs.SetFloat ("planeColorB", renderer.material.color.b); Application.LoadLevel (1);
Facendo clic sul pulsante "load level", il gioco salverà ora le componenti rossa, verde e blu dei colori come tre valori separati. Il rosso verrà salvato come "planeColorR", il verde verrà salvato come "planeColorG" e il blu verrà salvato come "planeColorB". Questi valori vengono salvati al di fuori del gioco sul computer (o su qualsiasi dispositivo su cui verrà eseguito, come un dispositivo iOS, Android o Ouya) e possono essere recuperati in qualsiasi momento e in qualsiasi momento.
Non aggiungere questo codice allo script:
function Start () renderer.material.color.r = PlayerPrefs.GetFloat ("planeColorR"); renderer.material.color.g = PlayerPrefs.GetFloat ("planeColorG"); renderer.material.color.b = PlayerPrefs.GetFloat ("planeColorB");
All'avvio del livello, l'aereo riceverà i dati di colore salvati e li applicherà al piano. Se lo provi ora e sembra nero, è perché nessun dato è stato ancora salvato! Per evitare ciò, puoi impostarlo per adattarsi solo al secondo livello:
if (Application.loadedLevel == 1) PlayerPrefs.SetFloat ("planeColorR", renderer.material.color.r); PlayerPrefs.SetFloat ("planeColorG", renderer.material.color.g); PlayerPrefs.SetFloat ("planeColorB", renderer.material.color.b);
Facciamo qualche altra cosa per personalizzare l'aereo! Nei file 3D troverai anche alcune bombe. Lo faremo in modo che possano essere messi sotto l'aereo e salvati.
Inizia creando un oggetto-bomba. Crea un cubo e scambia la rete per la maglia della bomba. Aggiungi un colore grigio, quindi aggiungi il missile al piano e lo centra al di sotto di esso. Dovrebbe sembrare come questo:
Se premi "apply" mentre l'aereo è nell'ispettore, le nuove bombe verranno aggiunte al prefabbricato e l'aereo nel livello "levelGame" verrà automaticamente aggiornato anche.
Ora aggiungi queste righe allo script:
var bombs: GameObject; function Start () bombs.SetActive (false); if (PlayerPrefs.GetInt ("bombs") == 1) bombs.SetActive (true); funzione OnGUI () if (GUI.Button (Rect (10, 190, 100, 50), "Bombs")) bombs.SetActive (! bombs.activeSelf); function LoadLevel () if (bombs.ActiveSelf ()) PlayerPrefs.SetInt ("planeBombs", 1); Else PlayerPrefs.SetInt ("planeBombs", 0);
Prima di provarlo, ricorda di trascinare la "bomba" - l'oggetto nella scena in "bombe" - lo slot nell'aereo, altrimenti non funzionerà.
L'intero script dovrebbe assomigliare a questo:
#pragma strict var bombs: GameObject; function Start () if (Application.loadedLevel == 1) renderer.material.color.r = PlayerPrefs.GetFloat ("planeColorR"); renderer.material.color.g = PlayerPrefs.GetFloat ("planeColorG"); renderer.material.color.b = PlayerPrefs.GetFloat ("planeColorB"); Bombs.SetActive (false); if (PlayerPrefs.GetInt ("planeBombs") == 1) bombs.SetActive (true); funzione OnGUI () if (Application.loadedLevel == 0) if (GUI.Button (Rect (10, 10, 100, 50), "Red")) renderer.material.color = Color.red; If (GUI.Button (Rect (10, 70, 100, 50), "Blue")) renderer.material.color = Color.blue; If (GUI.Button (Rect (10, 130, 100, 50), "Green")) renderer.material.color = Color.green; If (GUI.Button (Rect (10, 190, 100, 50), "Bombs")) bombs.SetActive (! Bombs.activeSelf); If (GUI.Button (Rect (120, 10, 100, 50), "Load Level")) PlayerPrefs.SetFloat ("planeColorR", renderer.material.color.r); PlayerPrefs.SetFloat ("planeColorG", renderer.material.color.g); PlayerPrefs.SetFloat ("planeColorB", renderer.material.color.b); if (bombs.activeSelf) PlayerPrefs.SetInt ("planeBombs", 1); Else PlayerPrefs.SetInt ("planeBombs", 0); Application.LoadLevel (1); Else if (GUI.Button (Rect (10, 10, 100, 50), "Load Menu")) Application.LoadLevel (0);
Quando si preme il pulsante "livello carico", lo stato delle bombe viene salvato. Quando si inizia il nuovo livello, le bombe vengono quindi disattivate o attivate, a seconda dello stato salvato. Puoi provarlo in questa build: DOWNLOAD SOURCE PROJECT 2.
Sono stati fatti! Ora sai come
Questo "personaggio" giocatore personalizzato sarà quindi disponibile in qualsiasi momento durante il gioco.
Abbiamo usato solo un semplice aeroplano come nostro "personaggio" di esempio, ma può essere qualsiasi cosa. Barche, auto, umani, animali, anche cose semplici, come cubi o sfere, potrebbero essere utilizzate per rappresentare i tuoi giocatori nei tuoi giochi. Questo può anche essere usato per personalizzare altri oggetti, come armi, veicoli, costume, acconciature o anche decarazioni in una vasta casa persistente. Impazzire!