3Dゲームを作成していますが、プレーヤーメッシュが常にカメラの背面を向いている必要があります。2D速度ベクトル(xz平面に沿った方向)を取得する方法はすでに理解しましたが、メッシュを速度ベクトルの方向に回転させる必要があります...
基本的に、すべてのメッシュには.rotation
プロパティがあり、そのプロパティは3Dベクトルです。表面(xz)平面に垂直なy軸を中心とした回転にのみ関心があります。
回転は度ではなくラジアンを使用するので、次のようになると思いました。
mesh.rotation.y = (mesh.direction.x - mesh.direction.z)*Math.PI*2;
しかし、これはそれをカットしていないようです...
方向/速度は、前述のように2Dベクトルであり、-1から1までの実数で構成されます。常にsqrt(x*x + y*y) == 1
、「円」を形成します。これは、速度がすべての方向で等しくなければならないためです。明らかに。
速度ベクトルは、マウスを画面上にドラッグしたときにのみ変化し、回転も変化するはずです。これは次のように計算されます。
var c = Math.sqrt(cameraPos.x*cameraPos.x + cameraPos.z*cameraPos.z); //This is the distance from the camera to the mesh, which is at (0, 0) for simplicity of this presentation.
var rat = 1/c;
mesh.direction.x = cameraPos.x*rat; //Direction vector = the speed vector
mesh.direction.z = cameraPos.z*rat;