2020年2月23日日曜日

[Unity]2DのUIにおいてRect Transformをスクリプトで操作して回転する方法


はい、こんにちは。
@CortanMathです。


今回は、UnityでuGUIのオブジェクトに付与されている「Rect Transform」を操作し、オブジェクトを回転させてみたいと思います。




一般的にUnityのオブジェクト(3Dモデルなど)には、Transformコンポーネントが追加されていて、これをスクリプトからいじることで、 移動、回転、拡大縮小などの動きを実現できます。



一方、UIから追加できるオブジェクト(Canvasに乗せるオブジェクト)には、「Transform」ではなく、「Rect Transform」がついています。





おそらくこれは、UI系の座標はTransformの座標と区別する必要があるからなんでしょうね。
詳しいことはわかりませんが。






しかし、この「Rect Transform」というのがかなり複雑で厄介です。


アンカーだの、ピボットだの、いろいろ概念があって、僕もまだよく理解しきれていません。





でも、とりあえず、このオブジェクトたちを回転させることに成功したので、ここに書いておきます。



Rect Transform の移動



回転について書くといいましたが、まずは、少し移動についてみてみましょう。

あくまで、僕のメモ代わりなので、読み飛ばしていただいて構いません。




Rect Transformの付いたオブジェクトは次のように移動できます。


[SerializeField] GameObject obj;

private void moveObj(){

 Vector3 pos = obj.GetComponent<RectTransform>().anchoredPosition;
 pos.x += 550.0f;
 pos.y += 100.0f;
 obj.GetComponent<RectTransform>().anchoredPosition = pos;

}


まず、objを取得したあと、RectTransformコンポーネントからanchoredPositionを変数に代入します。

そこに、x方向、y方向にそれぞれ指定した移動量を足し引きし、最後、オブジェクトの位置座標に戻してやります。



少し回りくどいですね。

しかし、あるオブジェクトを現在の位置から相対的に動かしたい場合、こうしないといけないみたいです。
(もっと簡単な方法があるのかもしれませんが、いくら調べてもRect Transformに関する情報が少ない)


一方、ある絶対的な座標に移動させたい場合は、直接その座標を代入すればよいので、簡潔に済みます。




では、本題の回転に入ります。



Rect Transform の回転



Rect Transformに回転は、次のようになります。



[SerializeField] GameObject obj;

private void moveObj(){

 obj.GetComponent<RectTransform>().Rotate(0, 0, 7.0f);

}
  


たしか、これで左回転ができます。


これも、相対的な回転量、つまり、現在の状態からどれくらい回転させるかを指定できます。




とりあえず以上になります。



Rect Transformに関しては、まだ情報が少なく、少し苦労しました。


メモ的な記事でしたけど、お役に立てれば光栄です。



ではさようなら。
またお会いしましょう。

もしよければ、LINEスタンプの方もよろしくお願いします。


https://line.me/S/sticker/7072968

無言で何かを伝えよう とする白男くん - LINE スタンプ | LINE STORE

白男くんが何もしゃべらずに、何か大事なことを伝えようとするスタンプです。


お そらくいつでも使えるLINEスタンプ集


人気の記事