23. 人物基類程式碼

hellozjf發表於2024-03-05

介紹一下 VSCode 快捷鍵

刪除檔案內容,然後輸入 ScriptableObject 就能快速新增一個 ScriptableObject 模板

刪除檔案內容,然後輸入 Editor 就能快速新增一個 Editor 模板

開始寫程式碼

資料 ScriptableObject

如上圖所示,首先是在 Scripts/Variable 下面建立一個 IntVariable 物件,它裡面儲存了 maxValue、currentValue,它還包含一個 ValueChangeEvent,噹噹前值發生變化的時候,就會傳送 ValueChangeEvent 事件

訊息 ScriptableObject

這個類繼承了 BaseEventSO,當事件產生的時候就會傳送一個 int

訊息監聽者

當 IntEvent 產生的時候,可以透過 IntEventListener 來監聽

建立 CharacterBase

using UnityEngine;

public class CharacterBase : MonoBehaviour
{
    public int maxHp;
    public IntVariable hp;
    public int CurrentHP {get => hp.currentValue; set => hp.SetValue(value);}
    public int MaxHp {get => hp.maxValue; }
    protected Animator animator;
    private bool isDead;

    protected virtual void Awake()
    {
        animator = GetComponentInChildren<Animator>();
    }

    protected virtual void Start() {
        hp.maxValue = maxHp;
        CurrentHP = MaxHp;
    }

    public virtual void TakeDamage(int damage)
    {
        if (CurrentHP > damage)
        {
            CurrentHP -= damage;
            Debug.Log($"CurrentHP: {CurrentHP}");
        }
        else
        {
            CurrentHP = 0;
            // 當前人物死亡
            isDead = true;
        }
    }
}

人物基類程式碼,裡面有最大HP,當前HP,動畫狀態機,是否死亡

在 Awake 的時候,將動畫狀態機賦初值

在 Start 的時候,將最大HP賦值

在 TakeDamage 的時候,就用當前血量減去傷害,如果不夠減就設定人物血量為0並標記為死亡

最終結果

可以看到我們給角色新增了 CharacterBase 和 Box Collider 2D 這兩個元件。人物的血量使用 IntVariable 來進行儲存。

專案相關程式碼

程式碼倉庫:https://gitee.com/nbda1121440/DreamOfTheKingdom.git

標籤:20240305_2022

相關文章