iT邦幫忙

2024 iThome 鐵人賽

DAY 14
0
生成式 AI

生成式AI輔助電子遊戲製作系列 第 14

Day 14/寫一些簡單的數據結構

  • 分享至 

  • xImage
  •  

今天要做玩家的生命魔力、敵人的生命魔力等等的屬性數值的數據結構的程式。
我們先請ChatGPT幫我們生一個數據結構的程式

幫我依據玩家和AI對手的數據結構(生命值、法力值、法術選項),寫一個gameManger控制遊戲中數值

GameManager.cs 例子

/// <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執行看看。
https://ithelp.ithome.com.tw/upload/images/20240928/20169512h4Nf1U9S36.png

發現有錯誤訊息,這裡的錯誤是因為要引用的物件沒放進inspector裡,但程式碼裡的生命、魔力的屬性是用text寫的,我們場景中卻是用圖片的方式呈現,所以這裡我們可以修改一下。
先在HP物件的下面複製一個一樣的物件,把複製的HPImage裡的color換成一個你喜歡的顏色,我這裡是用白色。
https://ithelp.ithome.com.tw/upload/images/20240928/20169512FJXqh48TJw.png
然後在HPinspector新增一個Slider,把TransitionNavigation都調整成NoneFill Rect放上剛剛複製的HP(1),試試看拉動下面的Vlue可以看看效果。
https://ithelp.ithome.com.tw/upload/images/20240928/201695125mq4uQ6EVJ.png
再把原本程式碼的地方替換成Slider的寫法,其他的屬性也一樣。

    void UpdateUI()
    {
        playerHealthSlider.value=playerHealth/100;
    }

https://ithelp.ithome.com.tw/upload/images/20240928/20169512EfyUOY3Pic.png
結果發現我們一調整數值,血條就會通通不見,這裡的錯誤是因為我們的playerHealthint,
把它換成float或其他浮點數的類型就可以了。這裡我們可以再測試一下就是。
https://ithelp.ithome.com.tw/upload/images/20240928/20169512N1OQj8P7Yh.png


上一篇
Day13 / 利用git進行unity專案的版本管理
下一篇
Day 15 / 角色頁面&遊戲方式
系列文
生成式AI輔助電子遊戲製作30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言