You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Three.js中对象按世界/本地坐标移动的技术实现问题

问题2:让playerBody按playerCtl的局部坐标方向移动

直接修改position.x/y/z是基于世界坐标系的,要实现跟随playerCtl旋转方向的局部空间移动,可通过playerCtl的四元数将局部位移转为世界空间位移:

const deltaPosition = playerVelocity.clone().multiplyScalar(delta)
// 定义局部空间移动向量(x对应左右,z对应前后,可根据控制逻辑调整正负)
const localMove = new THREE.Vector3(-deltaPosition.x, deltaPosition.y, deltaPosition.z)

// 用playerCtl的旋转四元数,将局部向量转为世界空间方向
localMove.applyQuaternion(playerCtl.quaternion)

// 更新playerBody位置
playerBody.position.add(localMove)

也可以用localToWorld方法实现:

const deltaPosition = playerVelocity.clone().multiplyScalar(delta)
const localMove = new THREE.Vector3(-deltaPosition.x, deltaPosition.y, deltaPosition.z)
const worldMove = playerCtl.localToWorld(localMove.clone())

// 计算相对位移并更新位置
playerBody.position.add(worldMove.sub(playerCtl.position))

内容的提问来源于stack exchange,提问作者Victor Pudeyev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 15:05:18