67 lines
2.0 KiB
C#
67 lines
2.0 KiB
C#
using System;
|
||
using Sirenix.OdinInspector;
|
||
using UnityEngine;
|
||
|
||
namespace SLSUtilities.Feedback
|
||
{
|
||
/// <summary>
|
||
/// 轨道上的一个时间片段,包含一个 FeedbackAction 及其时间参数。
|
||
/// 曲线控制完全下放到具体 Action 中,Clip 只负责时间调度。
|
||
/// </summary>
|
||
[Serializable]
|
||
public class FeedbackClip
|
||
{
|
||
public string clipName;
|
||
|
||
/// <summary>
|
||
/// 片段开始时间(秒)。
|
||
/// </summary>
|
||
[MinValue(0f)]
|
||
[HorizontalGroup("Time"), LabelWidth(60)]
|
||
public float startTime;
|
||
|
||
/// <summary>
|
||
/// 片段持续时间(秒)。
|
||
/// </summary>
|
||
[MinValue(0.01f)]
|
||
[HorizontalGroup("Time"), LabelWidth(60)]
|
||
public float duration = 0.2f;
|
||
|
||
/// <summary>
|
||
/// 片段结束时间(秒)。
|
||
/// </summary>
|
||
public float EndTime => startTime + duration;
|
||
|
||
/// <summary>
|
||
/// 是否覆盖 FeedbackData 的时间设置。
|
||
/// </summary>
|
||
[LabelWidth(150)]
|
||
public bool overrideTimeSettings;
|
||
|
||
/// <summary>
|
||
/// 覆盖用的时间设置,仅在 overrideTimeSettings 为 true 时生效。
|
||
/// </summary>
|
||
[ShowIf("overrideTimeSettings")]
|
||
public FeedbackTimeSettings timeSettings = new FeedbackTimeSettings();
|
||
|
||
/// <summary>
|
||
/// 具体反馈动作,Odin 自动显示多态类型选择器。
|
||
/// </summary>
|
||
[SerializeReference]
|
||
public FeedbackActionBase action;
|
||
|
||
public FeedbackClip CreateRuntimeCopy()
|
||
{
|
||
return new FeedbackClip
|
||
{
|
||
clipName = clipName,
|
||
startTime = startTime,
|
||
duration = duration,
|
||
overrideTimeSettings = overrideTimeSettings,
|
||
timeSettings = FeedbackRuntimeCloneUtility.CloneSerialized(timeSettings),
|
||
action = action?.CreateRuntimeCopy()
|
||
};
|
||
}
|
||
}
|
||
}
|