Unityで外積と内積を使って回転させる

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
チール

Unityで外積と内積を使って回転させる

#1

投稿記事 by チール » 5年前

normalVectorの指している方向に回転させたいのですが、妙に遅れて回転してしまいます
aaaとaaa2という球形objectの座標がまったく重なることが期待値なのですが、なぜ遅れているのかわかりません
回転自体はしていて、任意のタイミングでカウントをやめると座標が重なります

コード:

//上方向でくるくる旋回させる
count++;
Vector3 normalVector = new Vector3(Mathf.Sin(count / 10.0f), 1, Mathf.Cos(count/10.0f));
normalVector.Normalize();
 
//normalVectorの方向に回転させるための軸と量
//キャラクターの頭上方向
Vector cross = Vector3.Cross(transform.rotation * Vector3.up, normalVector).normalized;
float dot = Vector3.Dot(transform.rotation * Vector3.up, normalVector);
 
//内積から角度に治す(1.0f~-1.0f)→0~180
dot = (dot - 1.0f)*-90;
 
//適用
//これでnormalVectorの方向に向いているはず
transform.Rotate(cross, dot);
 
//結果を見る
//normalVectorを示すSphereゲームオブジェクト
aaa.transform.position = transform.position + normalVector * 5;
//実際に向いている方向を示すSphereゲームオブジェクト
aaa2.transform.position = transform.position + transform.rotation * Vector3.up * 5;

“C言語何でも質問掲示板” へ戻る