切换深浅主题
旋转、停滞与工具
旋转会改变炮口看向模型的几何关系;一时没有开火不会立刻失败。 普通射击、停滞扫描和吸尘器都使用可达性概念,但它们的观察范围、时机和后续动作不同。
本页依据 2026-10-30 当前源码核对,未在本次文档整理中执行 Unity 运行测试。普通攻击细节见攻击、子弹与可达范围。
三种“看得见”分别用于什么
| 场景 | 从哪里检查 | 什么时候检查 | 检查后做什么 |
|---|---|---|---|
| 普通射击 | 当前这门炮的真实炮口 | 当前帧寻敌和瞄准时 | 符合门槛才发射并预占伤害 |
| 停滞扫描 | 各已上阵炮台当前的炮口 | 扫描条件持续满足时 | 累计自动旋转覆盖范围,之后进入警告 |
| 吸尘器 | 正式普通/Pilot 炮位的一整圈采样位置 | 道具使用时先收集快照 | 一次清除快照中可见的选定颜色目标 |
自动旋转与手动拖动
共用配置默认绕世界向上轴自动旋转,速度为 8°/秒;轴配置无效时使用世界向上方向。
在未冻结、允许输入、没有按住指针,且距上次拖动超过默认 2.5 秒后,才继续自动旋转。Editor 的运行时调参可单独停止自转,射击仍可继续。
手动拖动根据相机的上、右方向旋转模型。拖动改变 ModelRoot 姿态,并记录本次玩家交互。方块仍保留其模型局部坐标,后续真实炮口转换到该局部空间后重新寻敌。
旋转怎样影响已发出的子弹
在途弹保留原目标,终点随模型变换更新;它不会因为模型旋转而换目标,也不重新检查沿途遮挡。新发射的子弹则必须按当前姿态重新通过直线可达性和瞄准门槛。
满槽停滞的完整判定
LevelSession.CanScanForStall 要求:
- 关卡未结束,未暂停、交互冻结或处于玩家交互中。
- 没有在途子弹。
- 普通炮位全部占满。
- 没有当前可合法上阵的队首 Pilot 炮手。
- 已上阵炮台的正式起点有效,且都通过就位等准备门控。
- 所有已上阵普通/Pilot 炮台都找不到当前颜色的可达目标。
满足后进入 Scanning。只有表现层报告的自动旋转角度会计入扫描,手动转动不帮助完成失败扫描。
扫描覆盖达到 360° 后进入 Warning,默认给予 4 秒操作宽限。宽限结束时再次确认仍满足停滞条件,才失败。
因此,不能仅凭“炮位满了”“几秒没打”或“模型转过一次”判断失败时刻;整个过程中还要考虑在途弹、玩家操作、可达目标和其他状态变化。
一圈怎样累计
代码记录扫描相对角度走到过的最小值和最大值,以 最大角度 − 最小角度 表示覆盖,最多记 360°。它不是把所有正反向移动的绝对值相加;来回摆动同一小段不会凭空累计成一整圈。
哪些动作会改变扫描
发射、目标状态变化、上阵等动作会重置扫描。玩家交互也会重置;暂停和交互冻结期间不推进规则及警告倒计时。存在在途子弹时,先让其结算,再判断是否可以开始扫描。
几何可达与瞄准门槛仍要分开
扫描会查询是否存在几何可达目标,同时使用炮台准备门控;它不把每个候选完整地走一次正式发射事务。因此,“几何能看见但炮口始终转不到位”不能直接视为“没有目标”。排查长期不射且不判停滞时,应同时查看目标几何和瞄准姿态。
吸尘器为什么不会一口气挖穿内部
吸尘器通过 CubeLandGame.GetFullTurnOrigins 获取普通与 Pilot 正式炮位沿一整圈的采样位置,默认取 360 个旋转角度。它不是只检查当前相机朝向,也不是只检查已经有炮台的单个槽位。
已经就位的炮台使用真实炮口;空槽或仍在入槽的炮台使用正式炮位的预计炮口,避免把入槽动画中的空中位置当作正常攻击起点。
随后 BoardState.ClearVisibleColor:
- 检查当前存活、可攻击且颜色匹配的目标。
- 如果它能从任一完整旋转采样位置被直接触及,就加入本次列表。
- 先完成整个列表收集,再统一施加伤害。
所以,本次吸尘器清掉外层后,新露出的内部方块不会加入同一次使用。下一次使用会在新的棋盘状态重新采集。
它与普通攻击有哪些区别
- 不等待每颗普通炮弹飞行,而是统一执行清除事务。
- 不要求目标仍有未预占 HP;已经有子弹飞向它,也可以被吸尘器提前移除,相关在途弹随后取消。
- 对普通体素有六邻居完全包围的预筛,快速跳过不可能从外部直接接触到的方块;这个预筛不用于普通射击。
- 检查完整旋转范围的有限采样位置,不代表遍历所有可能的三维观看角度。
工具与普通炮的边界
普通炮进入发射冷却循环;工具由 LevelSession.TickUtilities 等专用入口处理,不应当作普通炮解释。
当前工具入口包括按颜色或类型处理锁、礼物、墙和体素等行为。各自规则以已恢复的工具类型为准;不支持的行为会明确拒绝或记录未恢复项,不会静默降级成“当普通枪开火”。
开发快捷键 D 的一键清除也是独立的测试事务,不等同于吸尘器或正常射击。快捷键和恢复测试条件要求见玩法快捷键与 GM。
源码与验证入口
以下路径相对 Assets/SGame/CubeLand/:
| 入口 | 负责内容 |
|---|---|
Runtime/Presentation/CubeLandGame.cs | Advance 自动旋转、RotateModel 拖动、GetFullTurnOrigins 正式炮位采样 |
Runtime/Presentation/CubeLandComposition.cs | 自转轴、速度、恢复延迟和拖动倍率 |
Art/Gameplay/Composition.asset | 当前共用旋转配置 |
Runtime/Gameplay/LevelSession.cs | CanScanForStall、ReportAutoRotation、UpdateStall、TryClearColor、TickUtilities |
Runtime/Gameplay/BoardState.cs | ClearVisibleColor、IsEnclosedVoxel、CanReach |
Runtime/Integration/CubeLand/CubeLandGameController.cs | 正式吸尘器选择、交互冻结与外围道具接入 |
Tests/Editor/GameplayContractsTests.cs | 停滞覆盖、警告冻结、交互重置、在途等待及吸尘器快照的契约测试 |
如需修改旋转外观或测试观察角度,先使用运行时模型调参;如需修改失败或工具规则,先检查会话与棋盘层。