【Unity】回転の方法が一目でわかる !transform.Rotateを極めよう!

sato
書いた人 sato

Unityの回転は初心者にとって鬼門なのではないでしょうか。

Quaternionなど新たな用語が登場してきて混乱したり、ワールド座標やローカル座標が絡んできたり…

なぜか思い通りの方向を、向いてくれなかったり…

回転については、私も苦労したものです。

とはいえUnityでの開発と回転は、切っても切り離せない関係です。

例えば動き回るキャラクターに、カメラの方向を向け続けるだけでも、回転の知識は必要になってきます。

ライトも回転の方向を間違えれば、画面が薄暗くなってしまうでしょう。

ゲームで魔法を飛ばすにしても、出す方向を間違えればお尻からでることになります。

今回はそんなUnityの回転についてです。

まずは以下のように、基本的な内容を学びましょう。

・transform.rotationとは?

続けて実際に動くサンプルを用意しておきました。

・transform.rotation の取得・変更
・Rotate関数による回転

実際に動かして挙動を確認してみてください!

それで一緒にUnityの回転について見ていきましょう。

transform.rotationとは?

まずは、transformが何者なのか見てみましょう!

まずはtransformとは

簡単に言ってしまうと、オブジェクトの位置回転サイズを保持しているクラスです。

早速公式のリファレンスを見てみましょう。

オブジェクトの位置、回転、スケールを扱うクラス

シーン内のすべてのオブジェクトは Transform を持ちます。
Transform はオブジェクトの位置、回転、スケールを格納し、操作するために使用されます。
すべての Transform は親を持ち、階層的に位置、回転、スケールを適用することができます。
これはヒエラルキーウインドウで階層を見ることができます。

参照元:https://docs.unity3d.com/ja/current/ScriptReference/Transform.html

「位置、回転、スケールを格納し、操作するために使用されます。」という部分です。

「transform」には位置、回転、スケールが保持されているんです。

そう、今回の主役となるオブジェクトの回転の情報が保持されているわけです!

またtransfromについてもっと詳しく知りたい方はこちらの記事を御覧ください。

transform.rotationとは?

「transform」には回転が保持されていることがわかりました。

どこに保持されているのかというとtransform.rotationです!

しかしこのtransform.rotationですが、実は角度などではなくQuaternion型で保持されています。

ですがQuaternionは少し難しいため、今回は簡単に角度で編集出来るVecrot3型を使用する回転方法について見ていくことにします。

ただ、自由自在な回転を行うためには、Quaternionも重要な機能なため、ぜひ合わせてマスターしましょう。

Quaternionについても、後日記事を追加予定なのでもうしばらくおまちください!

transform.rotation の取得・変更

では実際に、取得・変更する方法について見ていきましょう。

下準備

まずは今回使用するオブジェクトを準備しましょう。

何かオブジェクトを作成し、新たにスクリプトをAddComponentしてください。

unity-transform-12

上の画像は、以下の流れで作った例です。

①Hierarchy上で「右クリック→3DObject→Cube」とCubeオブジェクトを作り選択し。
②「AddComponent ボタンをクリック→NewScript→MainCharacterという名前でCreateAndAdd」

スクリプトがついたオブジェクトの作り方がわからない人は参考にしてみてください。

このあとは、紐付いたスクリプトをダブルクリックなどすればプログラムを開くことができます。

ワールド座標・ローカル座標について

ここから先の説明ではワールド座標・ローカル座標といった単語が出てきていますが、transformの記事にて説明をおこなっています。

わからない方はぜひこちらの記事もご覧下さい。

とはいえ、初心者の方は基本的には、まずは見た目通りに動いてくれるワールド座標を扱えば問題ないと思います。

まずはワールド座標を使い回転を行ってみましょう。

より難しいことを実現しようとした際には、ローカル座標にぶつかることがあると思いますので、その時改めて学んでみましょう!

transform.rotation の取得方法

以下の方法で、x軸を軸にした角度などを取得できます。

360度で一周する角度という形で、数字をとることができます。

ワールド座標を基準にした角度を取得

各軸による回転角度をfloat型として取得しています。

ローカル座標を基準にした角度を取得

こちらはローカル座標を基準に取得しています。

transform.rotation の変更方法

では次に変更する方法です。

見ていただければ分かる通り、取得した変数を変更して、再度代入を行っています。

こうすることで現在の角度を変更することができます。

ワールド座標を基準にした角度の変更方法

取得した角度を10度に変更し、上書き変更しています。

ローカル座標を基準にした角度の変更方法

ローカル座標という違いはあれど、こちらもやっていることは同じですね!

Rotate関数による回転

先ほどまでは直接代入するようなプログラムを書きました。

次は、今回のタイトルにもなっているtransform.Rotateを使った角度変更の方法を見てみましょう。

Rotate関数を使用すると、現在の回転量から追加で回転を行うことができます。

単純に言ってしまえば、現在の角度へ、指定した角度を加算する処理となります。

非常にわかりやすいですね!

またこのRotate関数は、第4引数に「Space.World」を送ることで、ワールド座標基準で回転が可能であることを覚えておきましょう。

ワールド座標を基準にした角度の変更方法

こちらを実行すると、角度が加算されオブジェクトは回転し続けます。

ローカル座標を基準にした角度の変更方法

親に違いがなければ、ワールド座標でのRotateと同じ挙動をするはずです。

まとめ

今回は非常に簡単にですが、角度を指定してオブジェクトを回転させる方法について見てきました。

回転はUnityを扱う上でとても重要な機能です。

ぜひ、今回覚えた回転方法を活用してみてください。

またこの記事では省きましたが、Quaternionでのオブジェクトの回転方法も学んでみてください。

「例えばカメラをキャラクターに向ける」なんてことが非常に簡単に行えます!

Quaternionの記事は後日追加予定なので、もうしばらくお待ち下さい。

おすすめのコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

「何の言語から勉強すればいいかわからない・・・」そんなあなたに質問に答えていくだけで、何の言語を学べば良いのか診断いたします!未経験から6ヶ月でプログラミング習得に向けた学習プランが1分で分かる!

現役フリーランスエンジニアによる無料体験レッスン実施中!

もし、あなたが、

  • 経験、年齢、学歴に不安がある
  • 挫折しない学習方法が知りたい
  • アプリ開発で困っている
  • エンジニアの”生”の声が聞きたい!
  • 仕事獲得の仕方がわからない
  • エンジニアに転職したいが何をすればいいかわからない

など、プログラミング学習やキャリアのことでお困りであれば、まずは『無料体験レッスン』にお申し込み下さい。

あなたにとって、最適の解決策をご提案させていただきます。

詳しくは下の画像から詳しいサービス内容をご確認ください。

cta_mtm3

非常識な結果を出す卒業生多数!

エンジニアキャリア戦略

人気記事セレクション

3000名以上来場の人気セミナーが開催決定

18歳で時給6000円だった侍エンジニア塾代表の木内より、『プログラミングで人生を変える』ための学習方法をお教えます。

0からプログラミングを習得し、フリーランスエンジニアになる方法プログラミング学習の効率を劇的に上げる学習メソッドを解説しますので、奮ってご参加ください。

  • 日付:3/30(日)
  • 時間:14:00〜17:00終了予定
  • 場所:当社 道玄坂オフィス
  • 住所:〒150-0043 東京都渋谷区道玄坂2丁目11-1 Gスクエア渋谷道玄坂 4F *Googleマップでは「東京都渋谷区道玄坂2丁目11-1」で検索してください。近隣にスクエア渋谷という別のビルがあるためご留意ください。
  • 参加費:無料
  • URL:https://seminar.sejuku.net/
詳しくは下の画像をクリックして弊社セミナー内容をご確認ください。

LINEで送る
Pocket

この記事が気に入ったら
いいね!をしてフォローしよう

最新情報をお届けします

書いた人

sato

sato

学生時代を含めると、かれこれ10年以上プログラマーとして過ごしています。
様々な言語や環境、プロジェクトに関わってきましたので、より実践的な記事をみなさんにお届きるよう情報発信していきます!