所以我一直在这里筛选帖子和文档,试图弄清楚如何让 BoxMesh 基本上跟随鼠标。最终我会做操纵杆触摸控制,类似于《战利品英雄》或其他使用触摸操纵杆的游戏。但现在我想确保我可以让定向速度正常工作。
所以这就是我在鼠标按下事件中的内容:
if (scene.mouseControls.isDown) {
var coords = scene.mouseControls.screenCoords;
var vector = new THREE.Vector3();
vector.set(
( scene.mouseControls.screenCoords.x / window.innerWidth ) * 2 - 1,
0.5,
- ( scene.mouseControls.screenCoords.y / window.innerHeight ) * 2 + 1
);
vector.unproject(scene.camera);
var p1 = this.mesh.position;
var p2 = vector;
var angle = Math.atan2(p2.x - p1.x, p2.z - p1.z);
var velX = Math.sin(angle) * 20;
var velZ = Math.cos(angle) * 20;
console.log(vector.x, vector.z);
this.mesh.setLinearVelocity(new THREE.Vector3(velX, 0, velZ));
}
else {
this.mesh.setLinearVelocity(notMovingVector);
}
但是会发生的是确定的速度似乎来回翻转,所以玩家非常非常紧张。
这是我设置鼠标坐标的方法:
window.addEventListener(activeEventList[POINTER_MOVE], function (e) {
if (e.touches) {
var t = e.touches[0];
_this.screenCoords.x = t.clientX;
_this.screenCoords.y = t.clientY;
}
else {
_this.screenCoords.x = e.clientX;
_this.screenCoords.y = e.clientY;
}
});
不使用滚动偏移或任何东西,因为场景是全屏的。
编辑
删除了以前的方向代码。使用 atan2 计算角度,然后应用它。类似于我在 2d 游戏中如何做到这一点。