2点間の角度


9

Unityの部屋でランダムなポイントまで歩くキャラクターがいます。問題は、彼が常に一方向を向いていることです。C#で、キャラクターが現在向いている方向とターゲットの位置を取得するコードを書き、それらの間の角度を計算して、その量のキャラクターを回転させます。私はこのLookAt機能を試しましたが、キャラクターがターゲットに向かって円弧状に歩くようになり、常にターゲットを見ると非常に不自然に見えます。


4
正解は書けませんが、基本的なトリガーが必要です。Google極座標とatan2。
jcora

回答:


10

ルックアット機能はあなたのためにこれを行います。これを不適切に使用している可能性があります。または、これに問題がある場合、ステアリングに問題があります。次の方法でも試すことができます。

//find the vector pointing from our position to the target
dir = (Target.position - transform.position).normalized;

//create the rotation to look at the target
rotation = Quaternion.LookRotation(dir);

これで、その回転にスナップするか、時間をかけてゆっくりと回転させることができます。(時間の経過とともにゆっくりと、このすべてのコードが更新関数に入る必要があることを意味します)

//rotate over time
transform.rotation = Quaternion.Slerp(transform.rotation, rotation, Time.deltaTime * RotationSpeed);

//snap rotation
transform.rotation = rotation;

2Dの場合、別の代替方法はAtan2です。

angleBetween = Mathf.Atan2(point2Y - point1Y, point2X - point1X) * 180 / Math.PI))

void FixedUpdate(){//現在のステアリング方向を取得して目標位置に到達するVector3 walk =(this.mTargetPosition-this.transform.position).normalized; // 3d walk.y = 0.0f;を無視します walk.Normalize(); //目的の方向に移動しますthis.transform.LookAt(mTargetPosition); this.transform.Translate(-walk); これは、lookat関数をそのまま設定した方法です。fixedUpdateに含めてはいけないと想定している場合を除いて、何が問題なのかわかりません。
ダレン

よく分かりません。何してるの?ステアリングの作業をしていると、デバッグラインがいたるところに描かれています。ゴブリンが向いている方向を示す線、加速線と速度線があります。それらをすべて異なる色に設定して、どちらが正しいかを確認してください。これは、視覚的なデバッグに役立ちます。どちらが正しくないかを知ることができ、さらに詳しく調べることができます。
MichaelHouse
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.