Läsare som du hjälper till att stödja MUO. När du gör ett köp med hjälp av länkar på vår webbplats kan vi tjäna en affiliate-provision. Läs mer.

Hälsa är en pionjär inom några av världens tidigaste videospel och är en vanlig mekaniker som finns kvar i många av dagens mest populära titlar. Hälsa gör det möjligt att använda komplex kampmekanik, skapa spelarprogression och göra ditt spel mer intuitivt. Men hur lägger man till ett hälsosystem till sina egna spel?

Unity3D gör det enkelt att lägga till 2D UI-element i 3D-spel, så det är ett bra ställe att börja utforska hälsobarer för första gången.

Vad du kommer att lära dig

På ytan kanske det här projektet inte verkar komplicerat. Trots detta måste du förstå flera viktiga Unity3D-kodningskoncept för att skapa en fungerande hälsobar. Det betyder att det finns mycket att lära när du går igenom det här projektet, inklusive:

  • Hur man skapar 2D UI-element/sprites i Unity3D.
  • Hur man redigerar spelobjektkomponenter med kod.
  • Hur man delar variabler mellan skript i Unity3D.

Steg 1: Konfigurera din scen

Innan du kan börja koda ditt hälsofält behöver du en scen med en spelarmodell som den kan tillämpas på. För att komma igång kan du följa vår fysikbaserad Unity3D-teckenkontrollerguide för att skapa en spelarmodell med grundläggande kontroller.

Med en scen och spelarmodell på plats är det dags att lägga till ett UI-element. Högerklicka i hierarkifönstret och välj UI > Bild. Detta kommer att skapa två nya objekt i din hierarki: ett Canvas överordnat objekt och ett underordnat bildobjekt. Ändra namnet på det underordnade objektet till Healthbar. Välj en bredd, höjd och position för din hälsostång med hjälp av inspektören.

Du kan lägga till en något större UI-bild med färgen inställd på svart för att fungera som bakgrund/kant för hälsofältet. Se bara till att det är ovanför hälsofältet i hierarkin så att det visas bakom det.

Detta UI-element fungerar som grunden för din hälsobar, men du behöver också en sprite på plats för att animera den. Gå till projektrutan, högerklicka och välj Skapa > 2D > Sprites > Fyrkant.

Välj Healthbar från hierarkin och dra spriten du nyss skapade till valrutan Källbild i inspektören. Du kan också ändra Bildtyp att fylla, Fyllningsmetod till Horisontell, och Fyll Ursprung till vänster. Om du nu kör ditt spel och använder Fyllningsmängd skjutreglaget bör du se din hälsobar krympa och växa.

Om du inte kan se UI-komponentmenyn, gå till Fönster > Pakethanterare, och se till att du har 2D-paketet installerat.

Steg 2: Lägg till en hälsovariabel

Det skulle inte vara mycket meningsfullt att skapa en hälsobar utan en hälsovariabel på plats för att diktera dess tillstånd. Andra skript måste kunna komma åt denna variabel, och det är vettigt att placera den någonstans centralt. Lägg till det i Character Control-skriptet som ett offentligt flytande:

offentligflyta playerHealth = 1.0f;

Att använda en flytande för denna variabel innebär att du enkelt kan representera vilken procent som helst från 0 till 100, för att matcha hälsofältets UI-bild Fill Amount-variabeln. Till exempel är en spelares hälsa på 0,5f 50 % av hälsofältets bredd.

Steg 3: Dela variabler mellan skript i Unity

Variabler fungerar vanligtvis inom sina egna funktioner och skript. Detta gör dem oåtkomliga från andra funktioner och skript såvida du inte vidtar åtgärder för att tala om för koden var den ska hitta variablerna du vill arbeta med.

Börja med att skapa en ny skriptfil som heter Health för att innehålla koden. Du kan dra och släppa det här skriptet till Healthbar UI-elementet som skapades i det första steget. Följande kod går in i void Update()-funktionen.

Denna process börjar med att hitta spelobjektet som äger variabeln. I det här fallet är det Character_Model-objektet:

GameObject Character_Model = GameObject. Hitta("Character_Model");

Därefter är det dags att hitta skriptkomponenten som innehåller variabeln du behöver arbeta med.

Character_Control character_Control = Character_Model. GetComponent();

Och slutligen kan du extrahera den specifika variabeln du letar efter. I det här fallet är det playerHealth-variabeln du lagt till i din karaktärskontroller. Tilldela detta till en flytande variabel i det aktuella skriptet som heter currentHealth.

currentHealth = character_Control.playerHealth;

Det tar bara några rader kod för att få den variabel du behöver, och du kan använda den här metoden när du behöver komma åt din spelares hälsa. Din kod bör se ut så här när du är klar:

använder sig av Systemet. Samlingar;
använder sig av Systemet. Samlingar. Generisk;
använder sig av UnityEngine;
använder sig av UnityEngine. UI;

offentligklassHälsa: MonoBehavior
{
offentligflyta aktuellHälsa;

tomhetStart()
{
}

tomhetUppdatering()
{
GameObject Character_Model = GameObject. Hitta("Character_Model");
Character_Control character_Control = Character_Model. GetComponent();
currentHealth = character_Control.playerHealth;
}
}

Steg 4: Programmera UI Health Bar Game Object

Nu när du har skapat ett hälsofälts UI-element och har tillgång till spelarens hälsovariabel är det dags att få dem att fungera tillsammans. För att börja, lägg till en privat statisk variabel som kommer att innehålla bildkomponenten i ditt hälsofält:

privatstatisk Bild Healthbar;

Du kan sedan tilldela bildkomponenten till denna variabel inom void Start()-funktionen, som bara körs en gång.

Healthbar = GetComponent();

Nu när du har alla dina variabler på plats kan du använda koden från föregående steg för att ställa in fyllningsbredden för hälsofältets UI-objekt. Du behöver inte utföra någon konvertering här; både spelarens hälsa och hälsofältets fyllningsmängd är flytvariabler.

Healthbar.fillAmount = currentHealth;

Med den här koden på plats kommer ditt hälsofält att fyllas upp och ner baserat på hälsovariabeln som finns i Character_Control-koden. Det här är dock lite tråkigt, och det kan definitivt göra med lite färg.

Börja med att lägga till en ny färg för att få hälsofältet till en ljusgrön färg när spelaren har mycket hälsa.

Färg grönHälsa = ny Färg(0,6f, 1, 0,6f, 1);

Lägg sedan till ett if-uttalande för att kontrollera om spelarens hälsa är över 0,3f, det vill säga 30 % eller mer. Om det är högre än 0,3f, ställ in hälsofältet så att det matchar färgen du just lagt till. Om det är under 0,3f, vänd hälsofältet rött.

om (nuvarande hälsa >= 0,3f) {
Healthbar.color = greenHealth;
} annan {
Healthbar.color = Color.red;
}

Steg 5: Testa koden

Som du kan se från den fullständiga koden nedan är detta projekt ganska enkelt när allt är tillsammans. Naturligtvis behöver du dock ett sätt att testa din kod.

använder sig av Systemet. Samlingar;
använder sig av Systemet. Samlingar. Generisk;
använder sig av UnityEngine;
använder sig av UnityEngine. UI;

offentligklassHälsa: MonoBehavior
{
privatstatisk Bild Healthbar;
offentligflyta aktuellHälsa;

tomhetStart()
{
Healthbar = GetComponent();
}

tomhetUppdatering()
{
GameObject Character_Model = GameObject. Hitta("Character_Model");
Character_Control character_Control = Character_Model. GetComponent();
currentHealth = character_Control.playerHealth;
Healthbar.fillAmount = currentHealth;

Färg grönHälsa = ny Färg(0,6f, 1, 0,6f, 1);

om (nuvarande hälsa >= 0,3f) {
Healthbar.color = greenHealth;
} annan {
Healthbar.color = Color.red;
}
}
}

Du kan lägga till en enda kodrad till Character_Control-skriptet för att göra testning möjlig. När spelaren trycker på W-tangenten för att gå framåt, ta bort en liten del av hälsan. Du kan lägga till samma kod till alla skript med tillgång till playerHealth-variabeln för samma resultat:

playerHealth -= 0,001f;

Du kan också överväga att lägga till unika tillgångar till ditt Unity-projekt. Du kan hitta gratis Unity-tillgångar på webben, vilket ger dig chansen att liva upp ditt projekt utan att behöva spendera några pengar.

Bygga hälsobarer i Unity3D

Ditt spel börjar ta form nu när du har en hälsobar på plats för din karaktär. Det finns fortfarande mycket arbete att göra, men du bör nu ha några av de nyckelfärdigheter du behöver för att börja göra verkliga framsteg. Men det skadar förstås aldrig att läsa fler guider.