のにっき

【C#6】別スクリプトの関数・定数を簡潔に呼び出す方法

今回は、スプリクトファイルを跨いで定数などを呼び出すときの
コードを簡潔に書けるようになる方法を書いていきます。

目次

参照部分の簡潔化

例えば、「Test_A.cs」と「Test_B.cs」の2つがあり、
Test_Aに定義された定数を取得する時にどうするでしょうか?

  • Test_A.csの中身
    public class Test_A: MonoBehaviour
    {
        public const int Df_Prm = 10;
    }
  • Test_B.csの中身
    public class Test_B: MonoBehaviour
    {
        public void SetCaliculateText()
        {
            string str_Set="";
            //        ↓この部分に注目!!!
            str_Set = Test_A.Df_Prm ; 
        }
    }

このように取得すると思います。
今回の方法を使えば、「この部分に注目」と書かれている部分。
スプリクトをまたいだ時に記入する必要がある
参照部分を書かずに定数を取得することができます!
例でいえば、

            str_Set = Test_A.Df_Prm ; 

            str_Set = Df_Prm ; 

このように簡潔化できます。

いちいち全ての定数や関数に参照部分を書くのは
とても面倒くさくて見づらくなるので、とってもすっきりすると思います。

事前準備【C#6.0導入手順】

今回の方法を行うには、C#6.0のバージョンをUnityで使用できるようにしないといけません。
なので、たぶん「Unity2017以降」にしか実行できません・・・

設定方法を下図に記入しておきます。
「Fileタブ」→「Build Settings...項目クリック」→下図参照

f:id:apuridasuo:20190426184705p:plain
図:C#6.0導入方法
上記手順で準備完了です。
ちょっと古いと余計なエラーを生んでしまうので、
できれば最新のUnityに更新してから行ってください。

参照簡潔化方法

まずは呼ばれる側のスプリクトです。※上記の例でいえば「Test_A.cs」

f:id:apuridasuo:20190426185240p:plain
図:呼ばれる側スプリクト組み込み方法

// *-*-*-*-**-****-*-*-*-*-*-*-*-*-*-**-**-***-
//	NameSpace定義
// *-*-*-*-**-****-*-*-*-*-*-*-*-*-*-**-**-***-
namespace Common
{
    public class Common_Function : MonoBehaviour
    {
        // ■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□
        //
        //			関数
        //
        // ■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□
        /*************************************************************
           モジュール名: GetCaliculateTest
           概要        : 10加算して文字列にして返す
           引数        : int i_GetVal:計算する値
           戻り値      : string:計算後、文字列型にした値
        **************************************************************/
        public static string GetCaliculateTest(int i_GetVal)
        {
            //========================================================
            // 引数に10加算して文字列に変換
            //========================================================
            string str_Ret = "";
            str_Ret = (i_GetVal+10).ToString();
            return str_Ret;
        }
    }
}
// *-*-*-*-**-****-*-*-*-*-*-*-*-*-*-**-**-***-
//	NameSpace定義
// *-*-*-*-**-****-*-*-*-*-*-*-*-*-*-**-**-***-
namespace Common
{
    public class Common_Value : MonoBehaviour
    {
        // ■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□
        //
        //			変数定義
        //
        // ■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□
        //=====================================
        // 定数
        //=====================================
        public const string Df_Msg = "「Common_Function」で定義してます";
        public const int Df_Prm = 10;
    }
}

今回は、定数・変数をまとめるファイルと関数をまとめるファイルの
2種類のファイルを用意しました。
手順としては、class全体を「namespace 名前区間名」で囲むだけです。


次に、呼ぶ側の組み込み方法になります。

f:id:apuridasuo:20190426185842p:plain
図:呼ぶ側のスプリクトの記入方法

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using static Common.Common_Function;
using static Common.Common_Value;

public class SetText : MonoBehaviour
{
    //**********************************************
    // テキストオブジェクト
    //**********************************************
    public static Text Obj_Text;

    //**********************************************
    // シーン起動時
    //**********************************************
    void Start ()
    {
        //=========================================
        // オブジェクト初期設定
        //=========================================
        Obj_Text = GameObject.Find("Panel/Text").GetComponent<Text>();
        Obj_Text.text = Df_Msg; // 余分な文字を書かずに定数を取得できてる!
    }

    //**********************************************
    // ボタン押下時
    //**********************************************
    public void SetCaliculateText()
    {
        //=========================================
        // 別スクリプトの関数で計算!
        //=========================================
        Obj_Text.text = GetCaliculateTest(Df_Prm); 
        // ↑ 余分な文字を書かずに定数、関数を取得できてる!
    }
}

手順は簡単。
using static 名前空間名.クラス名(スプリクトファイル名);
この定義を記入するだけです。
これで、呼ばれる側のファイルで定義した関数や定数は
参照部分を簡略化して記入することができます!

通化したクラスを取得する時など、
参照部分を書かないといけないからクラス名を短めの名前にしよう!
なんて心配をしなくてもいいようになります。

UnityでC#6.0が使えるなんて知らなかった・・・

ぜひご活用ください!