This commit is contained in:
2026-09-24 08:49:24 +08:00
parent 29ce608348
commit bb11d58f7b
9 changed files with 79 additions and 67 deletions
+45 -5
View File
@@ -132,6 +132,8 @@ public class SitPosData : MonoBehaviour, IPointerDownHandler, IPointerUpHandler
/// <summary>当前运行中的战神实例(null=未显示)。炮台/战神显示二选一:有战神时 turretParent 隐藏</summary>
[System.NonSerialized]
public GameObject currentZhanShen;
/// <summary>特殊炮台(钻头/激光)期间切换翅膀的暂存引用:只切换不显示,等 RestoreTurretVisual 恢复显示</summary>
private GameObject _pendingShowWing;
/// <summary>战神实例上的 TurretData/ZhanShenTurretData(开火时优先取战神的子弹预制体,null=无战神或未挂组件)</summary>
[System.NonSerialized]
@@ -1468,9 +1470,11 @@ public class SitPosData : MonoBehaviour, IPointerDownHandler, IPointerUpHandler
// 克隆到 wingParent,保持预制体原始位置/旋转/缩放
GameObject instance = Instantiate(prefab, wingParent, false);
instance.SetActive(true);
// ⭐ 特殊鱼炮台(钻头/激光)使用中:只切换不显示,等爆奖流程结束由 RestoreTurretVisual 恢复显示
instance.SetActive(!isDrillActive);
if (isDrillActive) _pendingShowWing = instance;
Debug.Log($"[SitPosData] 翅膀已加载: #{turretNumber}");
Debug.Log($"[SitPosData] 翅膀已加载: #{turretNumber}{(isDrillActive ? "(特殊炮台使用中,暂缓显示)" : "")}");
}
/// <summary>卸下翅膀:清空 wingParent 下的翅膀模型(保留预设的 Camera,它是用来渲染翅膀到 RawImage 的)。</summary>
@@ -1520,7 +1524,8 @@ public class SitPosData : MonoBehaviour, IPointerDownHandler, IPointerUpHandler
// 克隆到 zhanShenParent,保持预制体原始位置/旋转/缩放
GameObject instance = Instantiate(prefab, zhanShenParent, false);
instance.SetActive(true);
// ⭐ 特殊鱼炮台(钻头/激光)使用中:只切换不显示,等爆奖流程结束由 RestoreTurretVisual 恢复显示
instance.SetActive(!isDrillActive);
// 绑定状态机入口:战神接管开火/待机动画(PlayFire 约定,见 TurretData.PlayWarGodAnimator)
// 同时缓存 TurretData:开火时优先用战神的子弹预制体(bulletPrefab/bulletPrefab_Two)
@@ -1569,8 +1574,8 @@ public class SitPosData : MonoBehaviour, IPointerDownHandler, IPointerUpHandler
ClearZhanShenInstance();
currentZhanShenNumber = 0;
// 恢复普通炮台显示
if (turretParent != null)
// 恢复普通炮台显示(特殊鱼炮台使用中不显示:等 RestoreTurretVisual 统一恢复)
if (turretParent != null && !isDrillActive)
turretParent.gameObject.SetActive(true);
// 状态机入口还给普通炮台(若已加载)
@@ -1598,6 +1603,41 @@ public class SitPosData : MonoBehaviour, IPointerDownHandler, IPointerUpHandler
// 散射起点球也清掉(下次出场/换战神时重建)
ClearJGFXParents();
}
/// <summary>
/// 特殊鱼炮台(钻头/激光)爆奖结束后的统一显示恢复入口(ZuanTouXie_DieEvent 调用)。
/// ⭐ 炮台/战神二选一按"当前装备"恢复,不依赖爆奖前的记录:
/// 1. 爆奖期间切换的翅膀(_pendingShowWing) → 恢复显示;
/// 2. 有战神(含爆奖期间新切的,currentZhanShen!=null) → 显示战神,普通炮台保持隐藏;
/// 3. 无战神 → 显示普通炮台 turretParent。
/// 显示后强制 None→Idle 归位:炮台/战神被隐藏期间 Animator 状态会丢失,
/// 若停在 Attack 状态,下次开火 ChangeState(Attack) 会被同状态短路 → 动画定格不播。
/// </summary>
public void RestoreTurretVisual()
{
// 挂起的翅膀:恢复显示(引用可能已被 ClearWing/再次切换销毁,Unity 判空天然处理)
if (_pendingShowWing != null)
{
_pendingShowWing.SetActive(true);
_pendingShowWing = null;
}
if (currentZhanShen != null)
{
// 战神出战:普通炮台保持隐藏(炮台/战神二选一)
if (turretParent != null)
turretParent.gameObject.SetActive(false);
currentZhanShen.SetActive(true);
}
else if (turretParent != null)
{
turretParent.gameObject.SetActive(true);
}
// 动画归位:先 None 再 Idle,强制重进 Idle(避免 Attack 定格)
ChangeState(TurretState.None);
ChangeState(TurretState.Idle);
}
// -------------------------
// 切换状态(GameMainPanel 调用)
// -------------------------