using System; using Sirenix.OdinInspector; using UnityEngine; namespace SLSUtilities.Feedback { /// /// 反馈播放上下文,传递给每个 FeedbackAction 的生命周期回调。 /// public struct FeedbackContext { /// /// 当前播放器实例。 /// public FeedbackPlayer player; /// /// 触发者的 Transform(可选)。 /// public Transform owner; /// /// 当前帧经过时间缩放处理后的 deltaTime。 /// public float deltaTime; /// /// Clip 已播放时间(秒)。 /// public float elapsedTime; /// /// Clip 总时长(秒)。 /// public float duration; } /// /// 所有反馈动作的抽象基类,定义生命周期回调。 /// 使用 Odin 的序列化路径实现多态序列化(SerializedScriptableObject)。 /// Odin 会自动为此抽象类型的字段显示多态类型选择器。 /// [Serializable] public abstract class FeedbackActionBase { /// /// Inspector 中显示的名称。 /// public virtual string DisplayName => GetType().Name; /// /// 初始化,FeedbackPlayer 开始播放此 Clip 时调用。 /// public virtual void OnStart(FeedbackContext context) { } /// /// 每帧更新,normalizedTime 为 Clip 内的归一化进度 [0,1]。 /// public virtual void OnUpdate(FeedbackContext context, float normalizedTime) { } /// /// Clip 自然结束时调用。 /// public virtual void OnEnd(FeedbackContext context) { } /// /// 被打断时调用,负责立即复位到初始状态。 /// public virtual void OnInterrupt(FeedbackContext context) { } /// /// 用于验证配置是否正确(Editor 环境)。 /// public virtual bool Validate(out string error) { error = null; return true; } /// /// 用于 Editor 预览(Runtime 也可用)。 /// public virtual void Preview() { } } }