Files
Cielonos/Assets/Scripts/SLSUtilities/FunctionalAnimation/FuncAnimInteractionsGuideWindow.cs

66 lines
2.9 KiB
C#
Raw Normal View History

2026-07-18 03:16:20 -04:00
#if UNITY_EDITOR
using System.Text;
using UnityEditor;
using UnityEngine;
namespace SLSUtilities.FunctionalAnimation
{
public class FuncAnimInteractionsGuideWindow : EditorWindow
{
private Vector2 scrollPosition;
public static void ShowWindow()
{
FuncAnimInteractionsGuideWindow window =
GetWindow<FuncAnimInteractionsGuideWindow>(true, "FuncAnim Interactions 使用说明");
window.minSize = new Vector2(560f, 360f);
window.Show();
}
private void OnGUI()
{
scrollPosition = EditorGUILayout.BeginScrollView(scrollPosition);
EditorGUILayout.LabelField("FuncAnim Interactions 使用说明", EditorStyles.boldLabel);
EditorGUILayout.Space(8f);
DrawSection(
FuncAnimInteractionKeys.SpecifiedActionDisruption,
"用途:限制当前动作只能在指定的 Custom Interval 内被特定动作打断。",
"配置:在当前 FuncAnimData 的 intervals 中添加 Custom intervalintervalName 必须为 SpecifiedActionDisruption然后在 interactions 中添加 Key = SpecifiedActionDisruption。",
"Values填写允许打断当前动作的新动作 animationName。",
"运行时效果:如果新动作在 Values 中,只有当前时间处于 SpecifiedActionDisruption interval 时才能播放。");
DrawSection(
FuncAnimInteractionKeys.ExemptedPayloadAnimPairOnSelfOverrideDisruption,
"用途:当前动作被 SelfOverride 切换到指定动作时,跳过指定的 disruption payload。",
"Values 格式PayloadEventName:TargetAnimationName。",
"PayloadEventName 是当前动作 disruptionEvents 中要跳过的 payload eventName。如果 payload 没有 eventName也可以填写 payload 类型显示名TargetAnimationName 是即将播放的新动作 animationName。",
"可以使用 *:TargetAnimationName 跳过切换到该动作时的全部 disruption payload。",
"典型用法FutureWand 的 HoldAttackStart -> HoldAttackLoop 是正常蓄力链路,不应清理蓄力 VFX但 HoldAttackStart -> Dash/Dodge 仍应清理。");
EditorGUILayout.EndScrollView();
}
private static void DrawSection(string title, params string[] lines)
{
EditorGUILayout.LabelField(title, EditorStyles.boldLabel);
StringBuilder description = new StringBuilder();
for (int i = 0; i < lines.Length; i++)
{
if (i > 0)
{
description.AppendLine();
}
description.Append(lines[i]);
}
EditorGUILayout.HelpBox(description.ToString(), MessageType.None);
EditorGUILayout.Space(10f);
}
}
}
#endif