C# regionディレクティブ
振り返ってみると前の記事からおよそ1年・・・
全然更新していませんでした。すみません
ここからが本題です。
UnityなどでC#スクリプトを書いているときにメソッドを探す時いちいちスクロールするの面倒くさいなぁ~メソッドや変数の宣言を折りたたむことができればなぁ
と思い調べてみればregionディレクティブという良い機能がありましたので使ってみました。
はじめにディレクティブを使用しているスクリプトと使用していないスクリプトでエディタ内の表示比較してみます。
※今回サンプルとしてUnityちゃんに付属している「IdelChanger.cs」を使わせていただきました。
■スクリプトファイルの比較
・regionディレクティブを使用していないスクリプト
public class IdleChanger : MonoBehaviour { private Animator anim; // Animatorへの参照 private AnimatorStateInfo currentState; // 現在のステート状態を保存する参照 private AnimatorStateInfo previousState; // ひとつ前のステート状態を保存する参照 public bool _random = false; // ランダム判定スタートスイッチ public float _threshold = 0.5f; // ランダム判定の閾値 public float _interval = 10f; // ランダム判定のインターバル //private float _seed = 0.0f; // ランダム判定用シード // Use this for initialization void Start () { // 各参照の初期化 anim = GetComponent<Animator> (); currentState = anim.GetCurrentAnimatorStateInfo (0); previousState = currentState; // ランダム判定用関数をスタートする StartCoroutine ("RandomChange"); } // Update is called once per frame void Update () { // ↑キー/スペースが押されたら、ステートを次に送る処理 if (Input.GetKeyDown ("up") || Input.GetButton ("Jump")) { // ブーリアンNextをtrueにする anim.SetBool ("Next", true); } // ↓キーが押されたら、ステートを前に戻す処理 if (Input.GetKeyDown ("down")) { // ブーリアンBackをtrueにする anim.SetBool ("Back", true); } // "Next"フラグがtrueの時の処理 if (anim.GetBool ("Next")) { // 現在のステートをチェックし、ステート名が違っていたらブーリアンをfalseに戻す currentState = anim.GetCurrentAnimatorStateInfo (0); if (previousState.nameHash != currentState.nameHash) { anim.SetBool ("Next", false); previousState = currentState; } } // "Back"フラグがtrueの時の処理 if (anim.GetBool ("Back")) { // 現在のステートをチェックし、ステート名が違っていたらブーリアンをfalseに戻す currentState = anim.GetCurrentAnimatorStateInfo (0); if (previousState.nameHash != currentState.nameHash) { anim.SetBool ("Back", false); previousState = currentState; } } } void OnGUI () { GUI.Box (new Rect (Screen.width - 110, 10, 100, 90), "Change Motion"); if (GUI.Button (new Rect (Screen.width - 100, 40, 80, 20), "Next")) anim.SetBool ("Next", true); if (GUI.Button (new Rect (Screen.width - 100, 70, 80, 20), "Back")) anim.SetBool ("Back", true); } // ランダム判定用関数 IEnumerator RandomChange () { // 無限ループ開始 while (true) { //ランダム判定スイッチオンの場合 if (_random) { // ランダムシードを取り出し、その大きさによってフラグ設定をする float _seed = Random.Range (0.0f, 1.0f); if (_seed < _threshold) { anim.SetBool ("Back", true); } else if (_seed >= _threshold) { anim.SetBool ("Next", true); } } // 次の判定までインターバルを置く yield return new WaitForSeconds (_interval); } } }
使用方法
使用するには折りたたむ最初の箇所に「#region」、最後の箇所に「#endregion」と記入します。
さらに「#region」のあとに任意の言葉を記入することができます
使用例
最後に
今回はスクリプトが膨大になった際に役立つディレクティブ機能を紹介しました。
スクリプトが膨大になって、いちいちメソッドを探すのが面倒で困っている人などのお力になれたら幸いです。
この作品はユニティちゃんライセンス条項の元に提供されています
unity-chan.com