2

ゲームには2つのオブジェクトがあり、この目的では2D平面上のポイントと見なすことができますが、ゲーム自体が3Dであるため、Vector3sを使用します。

2つのオブジェクトに対して垂直に(平面上でも)位置合わせして、両方がカメラから見えるようにするゲームカメラがあります。ゲームの性質上、オブジェクトは考えられる任意の位置構成にある可能性があるため、オブジェクト間の方向ベクトルは任意の方向になります。

パート1:2つの位置ベクトルから垂線角度を取得するにはどうすればよいですか?

私は持っています:

Vector3 object1Position; // x and z are relevant
Vector3 object2Position;

私は欲しい:

float cameraEulerAngleY;

パート2:ゲームのアセットのモデル化方法のため、カメラが180度の「円錐」内でのみ表示できるようにします。したがって、カメラが特定のポイントを通過する場合は、上記の計算で生成される可能性のある正反対の位置を使用する必要があります。

必要なものの画像が添付されています。円はオブジェクト、ボックスはカメラです。

事例例

この投稿が明確であり、ベクトル数学で完全なゴミであるためにあなたたちが私を生きたまま燃やさないことを願っています:P

あいさつ、ドラクニル

4

3 に答える 3

1

distanceオブジェクト行から、およびupベクトルを指定する必要があります。

Vector3 center = 0.5 * (object2position + object2position)
Vector3 vec12 = object2position - object1position

Vector3 normal = Cross(vec12, up)
normal.Normalize()
Vector3 offset = distance * normal

Vector3 cameraA = center + offset
Vector3 cameraB = center - offset
< choose which camera position you want >

オイラー角を使用する代わりに、おそらくLookAt()カメラの向きを決めるようなものを使用する必要があります。

于 2012-07-30T17:09:14.420 に答える
1

Yが常に0であると仮定すると(「XとZ」が関連するコンポーネントであると述べた)、これには2次元の計算を使用できます。

1.垂直ベクトルを見つけます(2つあります)。これは、2つのベクトルの差を計算し、コンポーネントを交換して、そのうちの1つを否定することで取得できます。

Vector3 difference = (object1Position - object2Position);
Vector3 perpendicular = new Vector3(difference.z, 0, -difference.x);

2.分離平面の法線を使用して、意図した方向と反対の方向を向いている場合は、新しいベクトルの方向を反転します。

Vector3 separatingPlaneNormal = ...; // down?
if(Vector3.Dot(separatingPlaneNormal, perpendicular ) < 0)
{
    perpendicular = -perpendicular ;
}

// done.
于 2012-07-30T17:26:59.580 に答える
0

さて、最初のビットについては、オブジェクトの位置を表す点(x1、y1)と(x2、y2)がある場合は、三角形の観点から考えてみてください。あなたが探している角度はによって記述されるべきです

arctan((y2-y1)/(x2-x1))+90

しかし、あなたが第二部で何をしたいのか完全には理解していません。

于 2012-07-30T15:40:34.397 に答える