2015年7月9日木曜日

[Unity] transform.Rotateとtransform.rotationの違いについて


こんにちは。


今回は、Unityでtransform.Rotateとtransform.rotationを使用した際、

厳密にどのような違いがあるのかよくごっちゃになってしまうので

備忘録を兼ねて記載。




まず、transformというのはどのような場合に使うのかというと、

主にオブジェクトを動かす時に使用します。




例:transform.Rotate(new Vector3(0, 10, 0));
//y軸を10°回転させる。




positionを変更したりRotateを変更するとオブジェクトを操作できるのですが、

その中のRotateとrotationについて触れていきます。





一見どちらも同じように見えるのですが、実は間違って使ってしまうと

大変な事になってしまいます。




ざっくり言うとRotateはオブジェクトを回転させ、rotationもオブジェクトを回転させます。



同じじゃん...。




と思ってしまいがちですが、実際に使ってみるとよくわかります。




Update内でRotateを1にすると1ずつ回転し続けます。

rotationでおかしな動きになったかと思います。




それはなぜなのか。コードが間違えているのではないか。




それ以前の問題です。



rotationを使った際に注意しなければならない事があります。

それは、rotationの場合 1°~360°という割り当てはできず、



0 ~ 1の範囲で値を割り当てなければいけない

らしいです。



間違えて30という風に割り当てても、正しい動作はできません。




このように、Rotateは1~360という値なのに対して

rotationは0~1で180°までの値を設定します。

※備忘録ではあるのですが、正直詳しい事はあまりよくわかっていません...。






ですので私の場合回転処理を行う時は基本的にRotateを使うようにしています。

もしくは、オイラー角で値を設定するeulerAnglesを使いましょう。
(eulerAnglesに関してはまた次回お話しします。)






私は、「ボタンを押し続けている間は回転する」と言った処理にはRotate

「ボタンを押した時に回転する」といった処理にはeulerAnglesと

使い分けをしています。





みなさんも自分が思った通りの動きに合わせて処理を使い分けてみては

いかがでしょうか。



ではまた。

 開発者のアプリを見る 

SteepStep ←iOSの方はこちら
SteepStep←Androidの方はこちら

 関連するブログを探す 

>SteepStep攻略動画作りました。