今天要做玩家的生命魔力、敵人的生命魔力等等的屬性數值的數據結構的程式。
我們先請ChatGPT幫我們生一個數據結構的程式
幫我依據玩家和AI對手的數據結構(生命值、法力值、法術選項),寫一個gameManger控制遊戲中數值
/// <summary>
/// 為了控制玩家和AI的數據結構(如生命值、法力值、法術選項),我們可以使用GameManager來管理這些核心數據。以下是Unity中一個簡單的GameManager範例,這個腳本負責初始化玩家和AI的生命值、法力值,並提供簡單的UI界面來顯示這些數值。
/// </summary>
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class GameManager : MonoBehaviour
{
// 玩家和AI的數據
public int playerHealth = 100;
public int playerMana = 50;
public int aiHealth = 100;
public int aiMana = 50;
// 連接到UI元件的引用
public Text playerHealthText;
public Text playerManaText;
public Text aiHealthText;
public Text aiManaText;
// 初始化玩家和AI的生命值與法力值
void Start()
{
UpdateUI(); // 初始化UI
}
// 更新UI顯示玩家和AI的生命值、法力值
void UpdateUI()
{
playerHealthText.text = "Player Health: " + playerHealth;
playerManaText.text = "Player Mana: " + playerMana;
aiHealthText.text = "AI Health: " + aiHealth;
aiManaText.text = "AI Mana: " + aiMana;
}
// 玩家和AI受到傷害時調用這個函數
public void PlayerTakesDamage(int damage)
{
playerHealth -= damage;
if (playerHealth < 0) playerHealth = 0;
UpdateUI();
}
public void AITakesDamage(int damage)
{
aiHealth -= damage;
if (aiHealth < 0) aiHealth = 0;
UpdateUI();
}
// 使用法術時減少法力值
public void PlayerUsesMana(int manaCost)
{
playerMana -= manaCost;
if (playerMana < 0) playerMana = 0;
UpdateUI();
}
public void AIUsesMana(int manaCost)
{
aiMana -= manaCost;
if (aiMana < 0) aiMana = 0;
UpdateUI();
}
// 恢復玩家和AI的法力或生命值
public void PlayerHeal(int healAmount)
{
playerHealth += healAmount;
if (playerHealth > 100) playerHealth = 100;
UpdateUI();
}
public void AIHeal(int healAmount)
{
aiHealth += healAmount;
if (aiHealth > 100) aiHealth = 100;
UpdateUI();
}
}
然後把它放到Unty執行看看。
發現有錯誤訊息,這裡的錯誤是因為要引用的物件沒放進inspector
裡,但程式碼裡的生命、魔力的屬性是用text
寫的,我們場景中卻是用圖片的方式呈現,所以這裡我們可以修改一下。
先在HP
物件的下面複製一個一樣的物件,把複製的HP
的Image
裡的color
換成一個你喜歡的顏色,我這裡是用白色。
然後在HP
的inspector
新增一個Slider
,把Transition
和Navigation
都調整成None
,Fill Rect
放上剛剛複製的HP(1)
,試試看拉動下面的Vlue
可以看看效果。
再把原本程式碼的地方替換成Slider
的寫法,其他的屬性也一樣。
void UpdateUI()
{
playerHealthSlider.value=playerHealth/100;
}
結果發現我們一調整數值,血條就會通通不見,這裡的錯誤是因為我們的playerHealth
是int
,
把它換成float
或其他浮點數的類型就可以了。這裡我們可以再測試一下就是。