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
相关产品推荐
相关产品推荐

