Dynamische Avatars in eenheid

In deze tutorial laat ik je zien hoe je een eenvoudig personageaanpasmenu kunt maken en hoe je de benodigde gegevens kunt opslaan voor gebruik in een game. We maken een speleravatar (een vliegtuig in dit voorbeeld), passen deze aan door optionele bijlagen toe te voegen of van kleur te veranderen, de gegevens op te slaan, een ander niveau te laden en het opnieuw te maken uit de opgeslagen gegevens. Hiermee kun je het effectief aanpassen buiten de gamewereld; in een menusysteem, dus het is beschikbaar waar je maar wilt, zelfs na het afsluiten en opnieuw opstarten van het spel.

gerelateerde berichten
  • Eenheid: nu denk je met componenten
  • Het Composite Design Pattern gebruiken voor een RPG Attributes-systeem
  • Spel UI Bijvoorbeeld: een spoedcursus in het goede en het slechte
  • Aanpasbare paletten Voeg eenvoudige variaties toe aan de personages van je spel

Klik op de knoppen om je avatar te wijzigen.

Hiervoor heeft u een basisbegrip van Unity nodig. Als u uw eigen objecten wilt modelleren, kunt u dat ook doen, maar het 3D-model dat in deze zelfstudie wordt gebruikt, is ook beschikbaar om hier te downloaden. Het gehele project, voor het geval u iets wilt opzoeken, kunt u hier ook downloaden.


Het project opzetten

Maak een nieuw Unity-project. We hebben daar 2 niveaus nodig, zodat we kunnen schakelen tussen deze niveaus. Sla de huidige scène op en noem deze "levelMenu". Open vervolgens de build-instellingen (bestandsopbouw-instellingen) en druk op "huidige scène toevoegen". Dit is nodig zodat we het later kunnen openen en rechtstreeks naar het bestand kunnen laden.

Maak vervolgens een nieuwe scène en noem deze "levelGame" en voeg deze ook toe aan de build-instellingen. Nu moeten de basisscènes aanwezig zijn, zodat we ze kunnen opvullen met dingen.


Het vliegtuig maken

We zullen een vliegtuig nu gebruiken als "karakter" (dit is veel gemakkelijker te hanteren dan een volledig mens :). Download de 3d-assets (hier zijn ze weer) en kopieer ze naar uw asset-map. Maak een kubus en verwissel de mesh voor de plane-mesh. Maak een nieuw materiaal en voeg het toe aan het vliegtuig. Sleep ten slotte het vliegtuig naar de projectmap om er een prefab van te maken.


Avatar Customization GUI

Om het vliegtuig aan te passen, hebben we een soort interface nodig.

Maak een nieuwe scripts en noem deze plane.js. Plaats de volgende code erin

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; 

Voeg het script toe aan het prefab vliegtuig en plaats een vliegtuig in de scene. Verplaats de camera zodat deze naar het vlak kijkt, zodat we de wijzigingen kunnen zien die we zullen aanbrengen. Wanneer u het uitvoert, ziet dit er zo uit:

Als u op een knop drukt, moet de kleur van het vlak veranderen. Je kunt het uitproberen in deze build: DOWNLOAD SOURCE PROJECT 1.

De if (Application.loadedLevel == 0) -bracket schakelt de knop uit als een ander niveau behalve het menu (niveau 0) is geladen. Dit is handig voor het beheren van gui-systemen.


Het volgende niveau laden

Zet in je "levelGame" een ander vliegtuig en laat de camera ernaar kijken. Als je het uitprobeert, zou er nog niets gebeuren, omdat we de aanpassing aan de opgeslagen gegevens nog niet hebben toegevoegd. Terwijl je daarbinnen bent, maak je de scène anders dan het "levelMenu" -scene, zodat het gemakkelijker is om beide uit elkaar te houden. Een andere achtergrondkleur geven in de hoofdcamera zou voldoende moeten zijn.

Ga nu terug naar het "levelMenu" -niveau, alles zal vanaf daar worden gedaan. Open het plane-script en voeg de volgende regels toe, direct onder de code voor de knoppen:

function OnGUI () if (GUI.Button (Rect (120, 10, 100, 50), "Load Level")) Application.LoadLevel (1); 

Probeer het! Er zou een nieuwe knop moeten verschijnen en als u erop drukt, wordt het nieuwe niveau geladen. Het vliegtuig op het andere niveau heeft echter de "standaard" uitstraling. De volgende stap is om het aan te passen zodra het niveau is geladen.


De avatargegevens opslaan

Unity wordt geleverd met "PlayerPrefs" -functies. Hiermee kunt u gegevens opslaan en laden op elk apparaat dat wordt gebruikt. Eerst slaan we de kleur van het vlak op en zien we vervolgens hoe we het opnieuw kunnen maken op het tweede geladen niveau.

Pas de laadniveauknop aan om er als volgt uit te zien:

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

Wanneer u op de knop "belastingsniveau" klikt, slaat het spel nu de rode, groene en blauwe componenten van de kleuren op als drie afzonderlijke waarden. Rood wordt opgeslagen als "planeColorR", groen wordt opgeslagen als "planeColorG" en blauw wordt opgeslagen als "planeColorB". Deze waarden worden opgeslagen buiten het spel op de computer (of elk apparaat waarop dit wordt uitgevoerd, zoals een iOS-apparaat, Android of Ouya) en kunnen op elk gewenst moment en op elk gewenst moment worden opgehaald.


De Avatar van de speler aanpassen aan de opgeslagen gegevens

Voeg deze code niet toe aan het script:

function Start () renderer.material.color.r = PlayerPrefs.GetFloat ("planeColorR"); renderer.material.color.g = PlayerPrefs.GetFloat ("planeColorG"); renderer.material.color.b = PlayerPrefs.GetFloat ("planeColorB"); 

Wanneer het niveau wordt gestart, krijgt het vliegtuig de opgeslagen kleurgegevens en past het het toe op het vliegtuig. Als je het nu uitprobeert en het zwart lijkt, is dat omdat er nog geen gegevens zijn opgeslagen! Om dit te voorkomen, kunt u instellen dat het alleen wordt aangepast in het tweede niveau:

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

Accessoires

Laten we wat andere dingen doen om het vliegtuig aan te passen! In de 3d-bestanden vindt u ook enkele bommen. We zullen het zo maken dat ze onder het vliegtuig kunnen worden geplaatst en ook kunnen worden opgeslagen.

Begin met het maken van een bom-object. Maak een kubus en verwissel de mesh voor de bom-mesh. Voeg een grijze kleur toe en vervolgens de raket naar het vlak en centreer het onder de raket. Het zou er zo uit moeten zien:

Als je op "toepassen" drukt terwijl het vliegtuig zich in de inspecteur bevindt, worden de nieuwe bommen toegevoegd aan de prefab en wordt het vliegtuig op het level-level automatisch bijgewerkt.

Voeg deze regels nu toe aan het script:

var bommen: GameObject; functie Start () bombs.SetActive (false); if (PlayerPrefs.GetInt ("bombs") == 1) bombs.SetActive (true);  function OnGUI () if (GUI.Button (Rect (10, 190, 100, 50), "Bombs")) bombs.SetActive (! bombs.activeSelf);  functie LoadLevel () if (bombs.ActiveSelf ()) PlayerPrefs.SetInt ("planeBombs", 1);  Else PlayerPrefs.SetInt ("planeBombs", 0); 

Probeer voordat je het uitprobeert het "bom" -object in de scène naar het "bommen" -slot in het vliegtuig te slepen, anders werkt het niet.

Het volledige script zou er als volgt uit moeten zien:

#pragma strikte var-bommen: 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);  functie 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); 

Wanneer u nu op de knop "laadniveau" drukt, wordt de toestand van de bommen opgeslagen. Bij het starten van het nieuwe niveau worden de bommen vervolgens gedeactiveerd of geactiveerd, afhankelijk van de opgeslagen status. Je kunt het uitproberen in deze build: DOWNLOAD SOURCE PROJECT 2.


Conclusie

Werden gedaan! Nu weet je hoe

  • pas een "karakter" aan
  • bewaar de gegevens op elk apparaat waarop het spel draait
  • maak het personage opnieuw met de opgeslagen gegevens

Dit "karakter" van de speler op maat is dan op elk moment tijdens het spel beschikbaar.

We hebben alleen een eenvoudig vliegtuig als ons "karakter" gebruikt, maar het kan van alles zijn. Boten, auto's, mensen, dieren, zelfs eenvoudige dingen, zoals kubussen of bollen, kunnen worden gebruikt om je spelers in je games te vertegenwoordigen. Dit kan ook worden gebruikt om andere items aan te passen, zoals wapens, voertuigen, gebruiksmethoden, kapsels of zelfs decaraties in een enorm hardnekkig huis. Ga wild!