オブジェクトの向きを操作する時,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; } </font> これで,向き変更方法の切り替えが可能となりました。 <figure class="figure-image figure-image-fotolife" title="向き変更方法の切り替えを Inspector 上で行っている例">[f:id:tsu_games:20191210225201p:plain:alt=Inspector 上の setRotationMethod 列挙型が Inspector に表示されている画像]<figcaption>向き変更方法の切り替えを Inspector 上で行っている例</figcaption></figure> --- #おわりに この拡張メソッドは,飽くまで製作中の補助機能として考えました。 `Rotate()`と`rotation`のどちらが適切か分かった部分から,それぞれの命令に書き換えた方が良いと思います。 以上,移動を`Rotate()`で行うか`rotation`で行うか切り替える拡張メソッドの紹介でした。 Unity における似た処理を切り替える拡張メソッドは,他にも提案しております。 [https://tsu-games.hatenablog.com/entry/set-active-or-enabled:embed:cite] [https://tsu-games.hatenablog.com/entry/translate-or-position:embed:cite]