小さな Unity3D プロジェクトに取り組んでおり、別のツールからデータをインポートする必要があります。このツールは 2 つのベクトルを介してオブジェクトの向きを教えてくれるので、それを Unity に移植する必要があります。
例として、次の 2 つのベクトルがあります。
x = Vector( 0.707, 0.707, 0)
y = Vector(-0.707, 0.707, 0)
この情報だけで、オブジェクトを Z 軸上で 45 度回転させる必要があることを理解する必要があります。2 つのベクトルは、オブジェクトの上と右のベクトルを表し、出発点でも目的地でもありません。
編集
よし、単軸回転ができるようになった!うん!この機能を提供します。
function RotationMaster (vx : Vector3, vy : Vector3) {
var vz = Vector3.Cross(vx, vy);
var x = Mathf.Atan2(-vz.y, vz.z) * Mathf.Rad2Deg;
var y = Mathf.Atan2( vx.z, vx.x) * Mathf.Rad2Deg;
var z = Mathf.Atan2(-vx.y, vx.x) * Mathf.Rad2Deg;
Debug.Log("x : " + x + "; y : " + y + "; z : " + z);
transform.rotation = Quaternion.Euler(x,y,z);
}
そのような単純な回転を渡すことができるようになりました:
RotationMaster(Vector3(1,0,0), Vector3(0,0.707,0.707));
RotationMaster(Vector3(1,0,0), Vector3(0,-1,0));
そして、私が複数の軸で遊んでいない限り、それはうまくいきます。しかし、より複雑な回転を試みるとすぐに失敗します...例として;
RotationMaster(Vector3(-0.5,-0.5,0.707), Vector3(-0.707,0.707,0));
これは間違っています... :-(
どんな手掛かり?