MCBE 偏航角到坐标移动向量的计算

现在,我们有一个偏航角(yaw),和移动速度(speed),需要计算在按下 WASD Space Shift 后的移动向量
以 JavaScript 为例

转换为弧度

在 JavaScript 中,三角函数使用的是弧度制而不是角度制

1
const rad = yaw * (Math.PI / 180)

读取输入

假设输入状态由 input 变量管理

1
2
3
const moveF = input.up - input.down
const moveS = input.right - input.left
const moveY = input.above - input.below

up: W
left: A
down: S
right: D
above: Space
below: Shift

处理水平零值

1
2
3
if (moveF === 0 && moveS === 0) {
return { x: 0, y: moveY * speed, z: 0 }
}

水平归一化

防止斜向移动时速度为√2倍

1
2
3
const mag = Math.sqrt(moveF * moveF + moveS * moveS)
const nf = moveF / mag
const ns = moveS / mag

计算向量

1
2
3
4
5
6
7
8
9
10
11
12
13
14
const cos = Math.cos(rad)
const sin = Math.sin(rad)

const forwardX = -sin
const forwardZ = cos

const rightX = -cos
const rightZ = -sin

const vec3 = {
x: (nf * forwardX + ns * rightX) * speed,
y: moveY * speed,
z: (nf * forwardZ + ns * rightZ) * speed
}