- 起手前锁定玩家 X 与方向(committed),终点改为身体整体越过锁定点(Body.HasPassed) - 终止条件:越过锁定点/撞墙(只判墙)/最大冲刺时长(SO 新增 maxDashDuration)/净位移卡死 - 冲锋期间经 EnemyMoveInput.AllowLedgeCross 放开悬崖夹紧,可冲下崖不悬停边缘 - 类与文件重命名(GUID 保留),脚手架与向导同步更新
47 lines
2.2 KiB
C#
47 lines
2.2 KiB
C#
using UnityEngine;
|
||
|
||
namespace BaseGames.Enemies
|
||
{
|
||
/// <summary>
|
||
/// 敌人移动意图信号。
|
||
/// <para><b>持久字段</b>(<see cref="MoveDir"/>/<see cref="MoveSpeed"/>):写入后持续生效,
|
||
/// 解决 FixedUpdate 频率快于 Update 时的空帧抖动;由 <see cref="WantStop"/> 显式清零。</para>
|
||
/// <para><b>一次性脉冲字段</b>(<see cref="WantStop"/>/<see cref="WantFace"/>):
|
||
/// EnemyMovement 消费后自动清零,无需 BD 任务每帧续写。</para>
|
||
/// </summary>
|
||
public struct EnemyMoveInput
|
||
{
|
||
/// <summary>
|
||
/// 水平移动方向:-1 左 / +1 右。<b>持久</b>——写入后保持,直到 WantStop 被置 true 或
|
||
/// 再次写 0。不写 = 维持上一次方向(不会自动停止)。
|
||
/// </summary>
|
||
public float MoveDir;
|
||
|
||
/// <summary>显式移动速度。0 = 使用配置中的 WalkSpeed。<b>持久</b>,随 MoveDir 同步清零。</summary>
|
||
public float MoveSpeed;
|
||
|
||
/// <summary>
|
||
/// 一次性脉冲:置 true 后 EnemyMovement 立即停止并将 MoveDir/MoveSpeed 清零,
|
||
/// 然后自动将本字段清零。BD 任务在 OnEnd() 中调用 StopMovement() 即可,无需每帧续写。
|
||
/// </summary>
|
||
public bool WantStop;
|
||
|
||
/// <summary>一次性脉冲:本 FixedUpdate 帧处理朝向对准后自动清零。</summary>
|
||
public bool WantFace;
|
||
|
||
/// <summary>朝向目标的世界坐标(WantFace 为 true 且 FaceDir == 0 时生效)。</summary>
|
||
public Vector2 FaceTargetPos;
|
||
|
||
/// <summary>直接指定朝向方向:+1 右 / -1 左 / 0 表示由 FaceTargetPos 计算。</summary>
|
||
public int FaceDir;
|
||
|
||
/// <summary>
|
||
/// 本次移动允许越过崖沿(committed 冲锋用):置 true 时 <see cref="EnemyMovement.MoveWithSpeed"/>
|
||
/// 不再做悬崖夹紧,敌人会冲出平台边缘并按重力下落,而非停在崖边。
|
||
/// <b>持久</b>——随 MoveDir/MoveSpeed 同步清零(WantStop 时复位),故 StopMovement() 即自动关闭,
|
||
/// 不会因能力被打断而残留。
|
||
/// </summary>
|
||
public bool AllowLedgeCross;
|
||
}
|
||
}
|