Files
5.24BuYu/Assets/MyGame/Scripts/Turret/ZhanShenLaserLoopSMB.cs
T
2026-09-08 17:34:49 +08:00

44 lines
1.8 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using UnityEngine;
/// <summary>
/// 战神激光 loop 状态通知(Animator 状态机行为)。
/// 用法:打开战神的 Animator Controller → 选中激光状态(Fire1) → Inspector 底部
/// Add Behaviour → ZhanShenLaserLoopSMB。
/// 激光剪辑(如 fire1)没有准备姿势,进入 Fire1 状态即 loop 开始:
/// 默认 prepPortion=0,OnStateEnter 瞬间通知 SitPosData 放行激光特效
/// (提前结束 laserFXDelay 兜底等待)。若某控制器动画确实带准备段,
/// 可把 prepPortion 设为准备段占一圈的比例。
/// 重新进入状态(停火再开火 / Fire0-Fire1 切换)会重新通知一遍。
/// </summary>
public class ZhanShenLaserLoopSMB : StateMachineBehaviour
{
[Tooltip("0=进入状态立即显示(默认,激光剪辑无准备段);若动画带准备段,填准备段占一圈的比例")]
[Range(0f, 1f)]
public float prepPortion = 0f;
private bool _notified;
public override void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
{
// 每次重新进入状态都重新等待;prepPortion=0 视为进入即显示
_notified = prepPortion <= 0f;
if (_notified)
{
NotifyLaserLoopBegin(animator);
}
}
public override void OnStateUpdate(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
{
if (_notified || stateInfo.normalizedTime < prepPortion) return;
_notified = true;
NotifyLaserLoopBegin(animator);
}
private void NotifyLaserLoopBegin(Animator animator)
{
// 战神实例上的 TurretData(向上查找,Animator 挂根/子物体都能找到)→ 通知座位
animator.GetComponentInParent<TurretData>()?.NotifyZhanShenLaserLoopAnim();
}
}