23. 人物基类代码

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

posted @ 2024-03-05 20:35  hellozjf  阅读(41)  评论(0编辑  收藏  举报