Unityでベクトルを回転させる方法について説明しています。
ベクトルを回転させたい
2D・3Dゲーム問わずオブジェクトの移動や回転などに使うことになるベクトル。処理によってはすでに求めた任意のベクトルを特定の方向に回転させたい、という場合が出てくることがある。
例えばキーボードのWASDキーまたはゲームパッドのLスティックから移動方向を求めた後カメラの向きに合わせて修正する、といった場合に。
一から実装すると行列または複素数平面の知識が必要だがUnityではQuaternion.Eulerを使うと簡単にベクトルを回転させることができる。
Quaternion.Eulerで回転
回転させたいベクトルにQuaternion.Euler関数をかけてあげればベクトルを回転させることができる。
さっそくサンプルコードをペタリ。
var vec = new Vector3( 1.0f, 2.0f, 3.0f ); //Y軸方向に30度回転させる var result = Quaternion.Euler( 0f, 30.0f, 0f ) * vec;
Quaternion.Euler関数の引数について1つ目がX軸方向の回転角度、2つ目がY軸方向の回転角度、3つ目がZ軸方向の回転角度。
上に挙げた「カメラの向きに合わせてプレイヤーの移動方向ベクトルを修正したい」という場合はサンプルコードのように2つ目の引数(Y軸方向の回転角度)に角度を指定するとうまくいく。
3次元ベクトルを前提に書いているが2次元ベクトルでも同じように使うことが可能。
あと細かい話になるがQuaternion.Euler関数はZ軸→X軸→Y軸の順で回転させるようになっている。
数学的にはどうやってベクトルを回転させている?
以下は補足的な内容。
ベクトルの回転は数学上では行列を用いてベクトルの回転をさせている。10年以上前の高校課程では数学Cで行列があり、そこで一次変換というベクトルを回転させる行列を学ぶ機会があった。
現在高校の数学に行列はないが今のご時世ネットで検索すれば旧数学Cの行列を学べるサイトがたくさん出てくるので興味があれば学んでみるのもよし。
ベクトルの回転自体は行列の他にも複素数平面を用いて行うこともできる。現行課程だとこっちの方がわかりやすいかもしれない。ただゲームプログラミングでは行列の方を用いて回転させることが多い。
コメント