今日まなび010:Quadの中心点を変えて回転させたい

「今日まなび」は最低1日1h、ゲーム作るために学びたいことなんでもいいから学んでいくコーナー。
完全自分用でまとめることは考えなくてOK.1記事1h。(1hでどんだけ学べるかのスピード感もみていきたいので)
1hのうちに次回学ぶことも決定しておくこと

環境:unity2021.3.40f


今日の学び

今回はQuadなど3Dモデルの回転についてです。Quadでやってて2DみたいになってますがUIの話ではないよ!

前提:Transfrom.localEulerAngles を変えるとモデルの中心を基準に回転する

単純にTransfrom.localEulerAnglesを変えると、モデルの中心を基準に回転します。
わかりやすいように赤い四角はQuadの中心=基準点の位置に配置しています。

方法1:Transfrom.RotateAround を使ってみる

この基準点を別の位置に変えたい場合、Transfrom.RotateAroundを使う。
Transfrom.RotateAroundには以下の引数で渡す。

・中心となる位置のワールド座標 →今回は赤い四角のワールド位置
・回転軸 →XYZ軸で回転させたい軸のフラグを立てればいいみたい。今回はZ軸回転させたいので、(0,0,1)を渡している
・回転度数の加算値 →加算値だということに注意

以下のコードを実行してみると足元を中心に回ってくれる。

using UnityEngine;

public class Test010 : MonoBehaviour
{
    public Transform centerPosition;

    private void Update()
    {
        this.transform.RotateAround(centerPosition.transform.position, new Vector3(0, 0, 1), Time.deltaTime * 30);
    }
}

方法2:基準点を親にして親を回転させる方法

回転の起点となるオブジェクトを回転したいオブジェクトの親にして親を回転させるという方法もある。
親子関係はこのような感じ。CenterPointが中心点となる赤い四角です。

そして作った親のオブジェクトのTransform.localEulerAnglesを変更して回転させます。

using UnityEngine;

public class Test010_2 : MonoBehaviour
{
    private void Update()
    {
        this.transform.localEulerAngles += new Vector3(0, 0, Time.deltaTime * 30);
    }
}