【Unity】回転を Rotate で行うか rotation で行うか切り替える【拡張メソッド】
オブジェクトの向きを操作する時,Rotate() を実行するか rotation を書き換えるかで悩む事は無いでしょうか。
今回は,どちらの方法で操作するかを簡単に切り替えられる拡張メソッドを作りました。
本稿では,Cube を使って御説明いたします。
(Unity 2019.4.17f1)
--
はじめに
オブジェクトの回転にRotate()とrotationのどちらを採るか,悩ましい問題だと思います。
Rotate()は,GameObjectの回転量を指定する関数です。
対してrotationは,GameObjectの向きを司る変数です。
オブジェクトの向きを操作するたびに,両方を試すのは大変ですよね。
そこで今回,これらを簡単に切り替える方法を考えました。
スクリプトの用意
まずは,拡張メソッド用のスクリプトを用意します。
これで,Unity 独自クラスであるTransformにRotateOrRotation()というメソッドを追加できました。
次に,この拡張メソッドの使用例を挙げます。
NewBehaviourScript.cs
using UnityEngine; // 拡張メソッドを使用するため using static TsuGames.SetRotation; public class NewBehaviourScript : MonoBehaviour { // Cube [SerializeField] Transform cube = null; // 向き変更方法の切り替え [SerializeField] SetRotationMethod setRotationMethod = default; // 向き変更速度 [SerializeField, Range(0, 1000)] float speed = 500f; void OnValidate() { // 向き変更方法の切り替えを反映 ExtensionShowHideMethod = showHideMethod; } void Start() { // Cube を取得 cube = GameObject.Find("Cube").transform; } void Update() { // ワールド座標のX軸で回転 cube.RotateOrRotation(Vector3.right, Time.deltaTime * speed, Space.World); } }
解説
まずは拡張メソッドクラスであるSetRotationを,using staticディレクティブで指定します。
これはSetRotationを拡張クラスとするうえで,静的(static)にする必要があったためです。
public static class SetRotation
次に向き変更方法を Inspector 上で切り替えるため,setRotationMethodを宣言します。
// 向き変更方法の切り替え [SerializeField] SetRotationMethod setRotationMethod = default;
Inspector 上の変更を反映させるため,OnValidate()メソッドを使用します。
void OnValidate() { // 向き変更方法の切り替えを反映 ExtensionShowHideMethod = showHideMethod; }
これで,向き変更方法の切り替えが可能となりました。

おわりに
この拡張メソッドは,飽くまで製作中の補助機能として考えました。
Rotate()とrotationのどちらが適切か分かった部分から,それぞれの命令に書き換えた方が良いと思います。
以上,移動をRotate()で行うかrotationで行うか切り替える拡張メソッドの紹介でした。
Unity における似た処理を切り替える拡張メソッドは,他にも提案しております。