This commit is contained in:
2026-10-11 18:30:19 +08:00
parent fa64d44db5
commit d35c47deea
3 changed files with 901 additions and 10 deletions
+22 -8
View File
@@ -2,17 +2,25 @@ using System;
using UnityEngine;
/// <summary>
/// 起飞炮台(TurretData 子类):
/// 平时是一门正常炮台(照常手动瞄准开火/自动开火/锁定瞄准);
/// 额外支持起飞模式:轻点空白处 → 炮台飞到该点(点到哪飞到哪)→ 到达后持续向上发射子弹,
/// upFireDuration 到时自动降落回原位恢复正常开火;起飞时播放特殊 spine 动画
/// (takeoffAnim 播一次,flyLoopAnim 循环衔接)。
/// 起飞炮台(TurretData 子类):炮台模式 / 起飞模式 两态分离。
/// 【炮台模式(IsFlying=false,默认形态)】就是一门正常炮台:手动瞄准开火/自动开火/锁定瞄准照常,
/// 与普通 TurretData 行为完全一致(轻点屏幕只走正常开火流程,不会起飞)。
/// 【起飞模式(IsFlying=true)】点"起飞按钮"进入(按钮逻辑待完善;默认 allowTapTakeoff=false
/// 时轻点屏幕不触发起飞):炮台飞到目标点 → 到达后持续向上发射子弹,upFireDuration
/// 到时自动降落回原炮台位;起飞时播放特殊 spine 动画(takeoffAnim 播一次,flyLoopAnim 循环衔接);
/// 期间炮口固定朝上、状态切换/开火/按住输入均被拦截(见 ChangeState/各开火入口)。
/// 起飞入口:TakeoffToScreenPos(当前轻点路径,受 allowTapTakeoff 控制);
/// 将来"起飞按钮"接入后走同一入口即可(或在面板上打开 allowTapTakeoff 恢复轻点起飞)。
/// 交互判定在 GameMainPanel_FishBase.HandleInput(轻点=按下短+几乎没移动;按住扫射不触发起飞)。
/// 挂在 XJMH 座位炮台(xjmhTurretList 中的子对象)上即可,无需改预制体结构。
/// 挂载:XJMH 座位炮台(xjmhTurretList 中的子对象),飞机预制体挂在炮台节点下面(PW_Plane_x,默认隐藏)。
/// 注意:不要在本类定义 Awake/OnEnable,会隐藏基类的同名私有初始化逻辑。
/// </summary>
public class FlyTurretData : TurretData
{
[Header("起飞入口")]
[Tooltip("允许轻点屏幕起飞(默认关=false:没点起飞按钮就不起飞)。\n将来\"起飞按钮\"逻辑接入后走专门入口,不受本开关限制")]
public bool allowTapTakeoff = false;
[Header("起飞(点哪飞哪)")]
[Tooltip("起飞特殊 spine 动画名(起飞时播一次;为空则直接播飞行循环动画)")]
public string takeoffAnim;
@@ -85,11 +93,17 @@ public class FlyTurretData : TurretData
/// <summary>
/// 起飞/移动到目标屏幕点(点到哪飞到哪)。
/// 首次调用=起飞;飞行中再次调用=改目标点;降落中调用=取消降落改飞新目标。
/// 返回 false 表示未起飞(节点不是 UGUI 或画布引用缺失)。
/// 首次调用=进入起飞模式;飞行中再次调用=改目标点;降落中调用=取消降落改飞新目标。
/// ⭐ 轻点起飞总开关:未进入起飞模式时受 allowTapTakeoff 控制——默认 false,
/// 即"没点起飞按钮就不起飞"(轻点松开只会走正常 Idle/开火流程);飞行中改目标不受此限制。
/// 返回 false 表示未起飞(开关未开 / 节点不是 UGUI / 画布引用缺失)。
/// </summary>
public bool TakeoffToScreenPos(Vector2 screenPos)
{
// ⭐ 默认不响应轻点起飞("起飞先不做",起飞按钮逻辑待完善):进入起飞模式前先过开关。
// 已在飞行=起飞模式内部行为(改目标点),不受开关限制
if (!IsFlying && !allowTapTakeoff) return false;
EnsureRefs();
if (_rect == null || _parentRect == null || _canvasRect == null) return false;
File diff suppressed because it is too large Load Diff