如何在 Unity3D 中設計和編寫健康欄

如何在 Unity3D 中設計和編寫健康欄

作為世界上一些最早的視頻遊戲的先驅,健康是一種常見的機制,在當今許多最流行的遊戲中仍然存在。Health 使使用複雜的戰鬥機制、創建玩家進程並使您的遊戲更加直觀成為可能。但是如何為自己的遊戲添加健康系統呢?

Unity3D 可以輕鬆地將 2D UI 元素添加到 3D 遊戲中,因此它是第一次開始探索健康欄的好地方。

你會學到什麼

從表面上看,這個項目似乎並不復雜。儘管如此,您仍需要了解幾個關鍵的 Unity3D 編碼概念才能創建有效的健康欄。這意味著您在完成此項目時可以學到很多東西,包括:

  • 如何在 Unity3D 中創建 2D UI 元素/精靈。
  • 如何使用代碼編輯遊戲對象組件。
  • 如何在 Unity3D 中的腳本之間共享變量。

第 1 步:設置場景

在開始編寫健康條代碼之前,您需要一個帶有玩家模型的場景以應用它。首先,您可以按照我們基於物理的 Unity3D 角色控制器指南來創建具有基本控件的玩家模型。

場景和播放器模型就位後,就可以添加 UI 元素了。在 Hierarchy 窗口內右鍵單擊並選擇UI > Image。這將在您的層次結構中創建兩個新項目:一個 Canvas 父對象和一個 Image 子對象。將子對象的名稱更改為 Healthbar。使用檢查器為您的健康欄選擇寬度、高度和位置。

unity 添加一個ui圖片

您可以添加一個稍大的 UI 圖像,並將其顏色設置為黑色,以充當健康欄的背景/邊框。只需確保它在層次結構中位於健康欄上方,以便它顯示在它後面。

這個 UI 元素作為健康欄的基礎,但您還需要一個 sprite 來為其設置動畫。轉到“項目”窗格,單擊鼠標右鍵,然後選擇“創建” > “ 2D ” > “精靈” > “方形” 。

unity 添加一個新的精靈

從層次結構中選擇 Healthbar,然後將您剛剛創建的 sprite 拖到檢查器內的 Source Image 選擇框中。您還可以將圖像類型更改為填充,將填充方法更改為水平,將填充原點更改為左側。現在,如果您運行遊戲並使用Fill Amount滑塊,您應該會看到您的健康欄收縮和增長。

添加精靈作為對象組件

第 2 步:添加健康變量

如果沒有適當的健康變量來指示其狀態,創建健康欄就沒有多大意義。其他腳本需要能夠訪問這個變量,將它放在中央的某個地方是有意義的。將其作為公共浮點數添加到角色控制腳本中:

public float playerHealth = 1.0f;

對此變量使用浮點數意味著您可以輕鬆表示 0 到 100 之間的任何百分比,以匹配健康欄 UI 圖像填充量變量。例如,0.5f 的 playerHealth 是健康欄寬度的 50%。

第 3 步:在 Unity 中的腳本之間共享變量

變量通常在它們自己的函數和腳本中運行。這使得它們無法從其他函數和腳本訪問,除非您採取措施告訴代碼在哪裡可以找到您想要使用的變量。

首先創建一個名為 Health 的新腳本文件來存放代碼。您可以將此腳本拖放到第一步中創建的 Healthbar UI 元素上。以下代碼進入 void Update() 函數。

此過程從查找擁有該變量的遊戲對像開始。在這種情況下,它是 Character_Model 對象:

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

接下來,是時候找到包含您需要使用的變量的腳本組件了。

Character_Control character_Control = Character_Model.GetComponent();

最後,您可以提取要查找的特定變量。在本例中,它是您添加到角色控制器的 playerHealth 變量。將其分配給當前腳本中名為 currentHealth 的浮點變量。

currentHealth = character_Control.playerHealth;

只需幾行代碼即可獲取您需要的變量,並且您可以在需要訪問玩家的健康狀況時應用此方法。完成後,您的代碼應如下所示:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class Health: MonoBehaviour
{
    public float currentHealth;

    void Start()
    {
    }

    void Update()
    {
        GameObject Character_Model = GameObject.Find("Character_Model");
        Character_Control character_Control = Character_Model.GetComponent();
        currentHealth = character_Control.playerHealth;
    }
}

第 4 步:對 UI Health Bar 遊戲對象進行編程

現在您已經創建了健康欄 UI 元素並可以訪問玩家健康變量,是時候讓它們協同工作了。首先,添加一個私有靜態變量,它將包含健康欄的圖像組件:

private static Image Healthbar;

然後,您可以在 void Start() 函數中將圖像組件分配給此變量,該函數只運行一次。

Healthbar = GetComponent();

現在您已準備好所有變量,您可以使用上一步中的代碼來設置健康欄 UI 對象的填充寬度。您不需要在這裡進行任何轉換;玩家健康和健康欄填充量都是浮動變量。

Healthbar.fillAmount = currentHealth;

有了這段代碼,您的健康欄將根據在 Character_Control 代碼中找到的健康變量上下填充。不過,這有點無聊,而且它肯定可以用一些顏色來處理。

首先添加一種新顏色,當玩家的生命值很高時,生命值欄會變成淺綠色。

Color greenHealth = new Color(0.6f, 1, 0.6f, 1);

接下來,添加一個 if 語句來檢查玩家的生命值是否在 0.3f 以上,即 30% 或更多。如果高於 0.3f,請將健康欄設置為與您剛剛添加的顏色相匹配。如果低於 0.3f,則將健康欄變為紅色。

if (currentHealth >= 0.3f) {
    Healthbar.color = greenHealth;
} else {
    Healthbar.color = Color.red;
}

第 5 步:測試代碼

從下面的完整代碼可以看出,這個項目放在一起時非常簡單。當然,您需要一種方法來測試您的代碼。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class Health: MonoBehaviour
{
    private static Image Healthbar;
    public float currentHealth;

    void Start()
    {
        Healthbar = GetComponent();
    }

    void Update()
    {
        GameObject Character_Model = GameObject.Find("Character_Model");
        Character_Control character_Control = Character_Model.GetComponent();
        currentHealth = character_Control.playerHealth;
        Healthbar.fillAmount = currentHealth;

        Color greenHealth = new Color(0.6f, 1, 0.6f, 1);

        if (currentHealth >= 0.3f) {
            Healthbar.color = greenHealth;
        } else {
           Healthbar.color = Color.red;
       }
    }
}

您可以將單行代碼添加到 Character_Control 腳本以進行測試。每當玩家按下 W 鍵向前移動時,移除少量生命值。您可以將相同的代碼添加到任何可以訪問 playerHealth 變量的腳本以獲得相同的結果:

playerHealth -= 0.001f;

您還可以考慮向您的 Unity 項目添加獨特的資產。您可以在網絡上找到免費的 Unity 資產,讓您有機會在不花錢的情況下讓您的項目充滿活力。

在 Unity3D 中構建健康欄

既然您已經為您的角色設置了健康欄,您的遊戲就開始成形了。仍有許多工作要做,但您現在應該具備開始取得真正進步所需的一些關鍵技能。當然,閱讀更多指南永遠不會有壞處。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *