Avatar dinamici in Unity

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 correlati
  • Unità: ora stai pensando con i componenti
  • Uso del modello di disegno composito per un sistema di attributi RPG
  • Interfaccia utente di gioco Esempio: un corso di accelerazione nel bene e nel male
  • Le tavolozze personalizzabili aggiungono una varietà variegata ai personaggi del tuo gioco

Clicca sui pulsanti per cambiare il tuo avatar.

Avrai 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.


Impostazione del progetto

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.


Creare il piano

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.


GUI di personalizzazione avatar

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.


Caricamento del livello successivo

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.


Salvataggio dei dati dell'avatar

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.


Adattare l'avatar del giocatore ai dati salvati

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);
 

Accessori

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.


Conclusione

Sono stati fatti! Ora sai come

  • personalizzare un "personaggio"
  • salva i dati su qualsiasi dispositivo su cui gira il gioco
  • ricreare il personaggio con i dati salvati

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!