ユーザがAとunity3dにおけるCへ移動するものの(VIA)B(画面上のサンプル点)から開始するサンプル点を注文するかどうかを決定します。この時点で、私は両方の画像でほぼ45度(ほぼ)である計算された角度(シータ)を持っています。問題は左の画像のユーザがCounterClockWiseの動きを意図し、右の画像のユーザが時計回りの回転を意図していると結論したいと思います。 ああ、私の想像よりも本当に複雑です、お勧めします。
現在、統一コードは
protected void calcAngles(){
v1 = go2.position - go1.position;
v2 = go3.position - go1.position;
v3 = go3.position - go2.position;
float angle = Vector3.Angle (v2, v1);
Debug.Log ("angle:" + angle.ToString());
//float atan = Mathf.Atan2 (Vector3.Dot (v3, Vector3.Cross (v1, v2)), Vector3.Dot (v1, v2)) * Mathf.Rad2Deg;
//Debug.Log ("atan2:" + atan.ToString());
}
任意のアイデアのようなものですか。?擬似コード。あらかじめ大変感謝しています。歓声、ララ
群衆シミュレータを構築しない場合(少し重くなるので)、Aヘルパーの子として2ヘルパー変換を使用することができます彼らはローカル空間の0,0,0の位置にあります。 1つは** LookAt(B)を使用している**もう1つは** LookAt(C)**を使用しています。それでYユーラー角度の差を取ることができます。時計回りまたは反時計回りに回転する必要があるかどうかがわかります。 –
"群衆シミュレータ"あなたは何を紹介していますか、ニカ? – Fattie
赤から緑への方向を得るのは簡単です。それは単に赤からマイナスの緑です。 LookAtは関係ありません。 *実際に変換するために使用されています*。単純に方向を取得するには、単に位置を減算し、おそらく.normalize – Fattie