This commit is contained in:
2026-09-06 19:49:25 +08:00
parent 0887d61c5e
commit c2279de46b
13 changed files with 643 additions and 121 deletions
+36 -3
View File
@@ -141,6 +141,10 @@ public class SitPosData : MonoBehaviour, IPointerDownHandler, IPointerUpHandler
private readonly List<GameObject> _laserStartFx = new List<GameObject>();
/// <summary>激光命中特效实例(与 _laserFx 一一对应,世界空间 Z=-50 层,跟随锁定目标)</summary>
private readonly List<GameObject> _laserHitFx = new List<GameObject>();
/// <summary>激光准备等待剩余秒数:锁定刚建立时读 ZhanShenTurretData.laserFXDelay,>0 期间激光及特效隐藏(等准备动画播完)</summary>
private float _laserPrepWait;
/// <summary>上一帧是否有锁定点(检测锁定建立沿,触发准备等待)</summary>
private bool _laserLockActive;
/// <summary>预制体形态激光的基准缩放(重建时取自 laserPrefab.transform.localScale)</summary>
private Vector3 _laserFxBaseScale = Vector3.one;
/// <summary>预制体形态激光的角度偏移:激光预制体自带的 Z 轴旋转(重建时缓存,绕世界 Z 叠加在计算朝向上)</summary>
@@ -429,17 +433,33 @@ public class SitPosData : MonoBehaviour, IPointerDownHandler, IPointerUpHandler
}
}
// ⭐ 准备动画等待:锁定刚建立时读 ZhanShenTurretData.laserFXDelay,等待期间激光及全部特效
// (光束/起点球/起点特效/命中特效)先不显示,等战神摆姿势动画播完再出现;锁定丢失后重新锁定会重新等待
bool lockActive = _laserTargets.Count > 0;
if (lockActive && !_laserLockActive)
{
var zsDelay = currentZhanShenData as ZhanShenTurretData;
_laserPrepWait = zsDelay != null ? zsDelay.laserFXDelay : 0f;
}
_laserLockActive = lockActive;
if (_laserPrepWait > 0f)
{
_laserPrepWait -= Time.deltaTime;
lockActive = false; // 等待期间当作未锁定:激光和特效全部隐藏
}
// ⭐ 散射激光使用中就激活左右起点父对象显示起点球:
// isScatterLaserOn=三发+锁定开着(面板每帧刷新,本地座位);锁定点>1=三发目标已凑满(远程/bot座位)
// 两个条件满足其一即激活——散射模式开着但目标不足时也要显示起点球
UpdateJGFXParentsActive(currentZhanShenData != null && (_laserTargets.Count > 1 || isScatterLaserOn));
UpdateJGFXParentsActive(lockActive && (_laserTargets.Count > 1 || isScatterLaserOn));
#if UNITY_EDITOR
DebugJGFXState();
#endif
// 没有锁定点:隐藏所有激光
if (_laserTargets.Count == 0)
// 没有锁定点(或准备动画等待中):隐藏所有激光
if (!lockActive)
{
HideZhanShenLasers();
return;
@@ -452,6 +472,15 @@ public class SitPosData : MonoBehaviour, IPointerDownHandler, IPointerUpHandler
UpdateZhanShenLaserLine();
}
/// <summary>
/// 战神 loop 动画开始通知(TurretData 转发:ZhanShenLaserLoopSMB 状态机行为 / 剪辑动画事件):
/// 立即放行激光及全部特效显示(提前结束 laserFXDelay 等待;未在等待中则无副作用)。
/// </summary>
public void NotifyZhanShenLaserLoopAnim()
{
_laserPrepWait = 0f;
}
/// <summary>隐藏全部战神激光(两种形态都处理)</summary>
private void HideZhanShenLasers()
{
@@ -613,6 +642,10 @@ public class SitPosData : MonoBehaviour, IPointerDownHandler, IPointerUpHandler
// 起点/命中特效一并销毁
ClearZhanShenLaserPointFx();
// 准备动画等待状态复位(下次锁定重新计时)
_laserPrepWait = 0f;
_laserLockActive = false;
}
// ==================== 激光起点/命中特效(三发+锁定) ====================