移动模式
基本信息
| 属性 | 值 |
|---|---|
| 所属配置类 | MovementConfig |
| 字段 | public static MovementMode movementMode |
| 类型 | 枚举 MovementConfig.MovementMode |
| 默认值 | CREATIVE(@Config.DefaultEnum("CREATIVE")) |
| 服务端同步 | ❌ 无 @Config.Sync |
| 配置分类 | category = "movement" |
| 配置注释 | Movement mode: STATIC (instant stop) or CREATIVE (momentum/drift) |
取值穷举
| 取值 | 实现方法 | 速度系数 | 积分方式 |
|---|---|---|---|
STATIC |
tickDefaultMovement |
× DEFAULT_SPEED_SCALE = 0.5 |
无积分,本 tick 位移 = 方向向量 × 速度,松键立即停住 |
CREATIVE |
tickCreativeMovement |
× CREATIVE_SPEED_SCALE = 2.0 |
速度向目标逼近 + 摩擦衰减,松键滑行一段后停住 |
STATIC
先算方向向量(前进用 -sin(yaw), cos(yaw),平移用 cos(yaw), sin(yaw),
前进+平移同时进行时水平分量乘 DIAGONAL_FACTOR = sin(45°) 归一化,垂直方向 up != down 决定 ±1),
然后直接 cameraEntity.moveEntity(dx * speed, dy * speed, dz * speed)。无速度状态变量。
CREATIVE
额外维护三个字段 velocityX/Y/Z,每 tick 三步:
- 用与 STATIC 相同的规则算出目标速度
targetX/Y/Z(已乘speed); - 逼近:
velocityX += (targetX - velocityX) * CREATIVE_ACCELERATION,三个轴各一次,CREATIVE_ACCELERATION = 0.15; - 摩擦:
velocityX *= CREATIVE_FRICTION,三个轴各一次,CREATIVE_FRICTION = 0.6; - 死区:绝对值
< 0.001的轴直接置 0; cameraEntity.moveEntity(velocityX, velocityY, velocityZ)。
速度状态在每次 enable()、enableTripod()、switchTripod() 时被清零,因此换机位不会带上残余动量。
两种模式的实际差异
| 场景 | STATIC | CREATIVE |
|---|---|---|
| 相同 移动速度 下的有效速度 | 0.5 × 基值 | 2.0 × 基值(4 倍) |
| 起步手感 | 立即到位 | 有约 0.15 的响应延迟,逐渐加速 |
| 松键 | 立即停止 | 逐 tick × 0.6 衰减,低于 0.001 归零 |
| 转向 | 立即响应 | 转向时旧速度造成惯性漂移 |
生效条件
该分支在 tick() 中读取,且位于 playerControlled 早退之后:
开启 玩家控制 时 tick() 会在第 6 步直接返回,
两种模式都不会被求值。
其它配置项
MovementConfig 共 2 项:
| 字段 | 类型 | 默认值 | 服务端同步 |
|---|---|---|---|
| speed | float(0.2 ~ 10.0) |
1.0f |
❌ |
movementMode |
MovementMode |
CREATIVE |
❌ |