私は 3D ゲームを作成しています。プレイヤーの背中は常にカメラの方を向いており、その方向に移動する必要があります。「後ろ向きカメラ」の部分まではまだ来ていませんが、プレイヤーを正しい方向に動かす方法がわかれば簡単になると思います...
これは 3D 座標系ですが、高さ (z 軸) は無視できます。これは、カメラがどれほど高くても、プレーヤーは常に同じ速度で移動する必要があるためです (カメラ システムは、ゲームの世界と同じように機能するように計画されています)。ウォークラフトの)。
今、私はこれに私の問題を要約しました...
- ポイント (0, 0) はプレイヤーの位置です。
- ポイント (x, y) はカメラの位置です。
- カメラはプレーヤーから (dx, dy) 単位離れています (また、プレーヤーは (0, 0) にあるため、(x, y) 単位離れていますが、これは位置ベクトルであり、移動ベクトルではありません)。
問題: 円 r = 1 上にあり、(0, 0) および (x, y) と同じ線上にあるこの 2D 空間内の点 (a, b) を取得するにはどうすればよいですか?
視覚化:
これを行うと、2D ベクトル (a, b) が得られます。これに -30 を掛けると、プレーヤーの速度として機能します。
私はこれを行う方法を知っていますが、非常に高価で非効率的な方法で、ピタゴラの定理、平方根、およびそれらすべてのあり得ないツール (Javascript で動作) を使用します。
基本的には、次のようなものです。
c = sqrt(dx*dx + dy*dy); //Get the length of the line
rat = 1/c; //How many times is the desired length (1) bigger than the actual length
a = x*rat;
b = y*rat;
もっといいものがあるに違いない!
参考までに、Three.js エンジンを使用して Javascript でゲームを作成しています。