Help us understand the problem. What is going on with this article?

UnityのQuaternionでよく使う処理まとめ

Quaternionについて

Quaternionたまに使うといつもよくわからなくなるので、
備忘録的にまとめてみました。
よく使う書き方だけメモ。

資料はこちら

よく使う回転系の処理

  • transform.Rotateである軸を中心に指定角度分回転できる
    this.transform.Rotate(new Vector3(0,1,0),10); // Y軸を回転軸にして10度ずつ回転

  • transform.Rotateでワールド座標基準で、現在の回転量へ加算する
    this.transform.Rotate(1.0f,1.0f,1.0f,Space.World);

  • ゲームオブジェクトが向いている方向のベクトルを取得する
    this.transform.forward
    これは以下と同じ意味になる
    this.transform.rotation * Vector3.up

    また、ワールド座標の指定した方向の単位ベクトルを取得したいときは以下のように書く

   var angles = new Vector3(0f, 45f, 0f); // Y軸を回転軸として45度回転した方向
   var direction = Quaternion.Euler(angles) * Vector3.forward;  
  • Rotation同士をかけると2つの回転を加算したQuaternionを取得できる

今対象としているゲームオブジェクト(this)の向きに、上記で定義したdirectionの方向の角度を加算したい場合は以下のようにQuaternionをかけてあげるだけで方向を変えることができる。

this.transform.rotation = Quaternion.LookRotation(direction) * this.transform.rotation; // directionは上記で作成した単位方向ベクトル

また、上記の方向を回転させる処理を一文で書くと以下のようになる。

  this.transform.rotation = Quaternion.Euler(new Vector3(0f, 45f, 0f)) * this.transform.rotation;
  • 時間をかけてゆっくりとゲームオブジェクトを指定の方向へ向かせる

Slerpまたはlerpを使うことでゆっくり回転できる。

transform.rotation = Quaternion.Slerp(startPosition.rotation, targetDir, step); // 現在のゲームオブジェクトの角度から目標の角度までゆっくりと回転させる

startPosition.rotation : 初期の回転角度(だいたい対象のゲームオブジェクトの現在の角度)
targetDir : 目標の回転角度
step : 補完率(0~1) つまり0なら初期の角度 0.5なら初期と目標の角度の中間の角度まで回転

サンプルプロジェクト内のデバッグキー操作

  • Aキー Y軸を回転軸にして10度ずつ回転(Rotate関数)
  • Bキー ワールド座標基準で、現在の角度にRotation[1,1,1]を加算する(Rotate関数)
  • Cキー Y軸を回転軸にして90度回転した方向へゲームオブジェクトを回転
  • Dキー 現在のゲームオブジェクトの角度にY軸を回転軸にして45度回転を追加する
  • Eキー ゲームオブジェクトをY軸を回転軸にして45度回転させる(Lerp関数)
  • Xキー ゆっくりゲームオブジェクトを指定の角度まで回転(Slerp関数)

参考資料

taroyan
Unityで何か作りたい。Blender使いたい。
https://taroyan3rd.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした