4-2. 血量更新逻辑的实现

使用 ScriptableObject 实现血量更新

创建 ScriptableObject

内容如下

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;

[CreateAssetMenu(menuName = "Event/CharacterEventSO")]
public class CharacterEventSO : ScriptableObject
{
    public UnityAction<Character> OnEventRaised;

    public void RaiseEvent(Character character)
    {
        OnEventRaised?.Invoke(character);
    }
}

上面这段代码会创建一个 Event/CharacterEventSO 菜单,这样可以来创建一个 Event

事件发布者可以通过 RaiseEvent 来发布事件

事件订阅者可以通过订阅 OnEventRaised 来监听事件发生

创建 Event

发布事件

Character 上面添加一个 UnityEvent

在 Character.Start 的时候调用一下

在受伤的时候调用一下

这个事件的目标就是刚才创建的 CharacterEventSO,OnHealthChange 触发的时候,就会调用 CharacterEventSO.RaiseEvent

订阅事件

新建一个 UIManager 用于监听事件

UIManager 的代码如下所示

在 OnEnable 的时候注册事件监听,在 OnDisable 的时候注销事件监听,在事件发生的时候,计算血量百分比,并修改血条

实现血条延迟的效果

我们有两个血条,一个是绿色的,一个是红色的。绿色的血条会瞬间减少,而红色的血条会一点点减少,这样就会有比较好的动画效果

具体代码实现如下

每一帧,当红色血条比绿色血条多的时候,就慢慢较少

项目相关代码

代码仓库:https://gitee.com/nbda1121440/2DAdventure.git

标签:20240226_1521

posted @ 2024-02-26 15:42  hellozjf  阅读(45)  评论(0编辑  收藏  举报