介绍一下 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
标签:ScriptableObject,23,int,代码,public,基类,hp,CurrentHP From: https://www.cnblogs.com/hellozjf/p/18054891