はい、こんにちは。
@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

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