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 的时候注销事件监听,在事件发生的时候,计算血量百分比,并修改血条
实现血条延迟的效果
我们有两个血条,一个是绿色的,一个是红色的。绿色的血条会瞬间减少,而红色的血条会一点点减少,这样就会有比较好的动画效果
具体代码实现如下
每一帧,当红色血条比绿色血条多的时候,就慢慢较少