介紹一下 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