今回は、UnityのC#スクリプトで利用する「private変数」と「public変数」の違いについて、超基本を確認していきます。
はじめに
Unityでスクリプトを作成する時に出てくるprivateとpublicの基本について、実際に見ながら確認していきます。
簡単なスクリプトの例
まずは下記スクリプトを作成します。「num1」は「public」、「num2」は「private」で指定してあります。
using UnityEngine; public class ScriptTest : MonoBehaviour { public int num1; private int num2; private void Start() { num2 = 1; } private void Update() { num2 = num2++; } }
Inspector画面でセット
「public」で指定した「num1」はInspector画面でセットすることもできます。

ただし、「private」も「SerializeField」を付けることで同じようにInspector画面でセットすることが出来るようになります。
using UnityEngine; public class ScriptTest : MonoBehaviour { public int num1; [SerializeField] private int num2; }

「public」だけどInspector画面に表示したくない場合は「HideInInspector」を付けることで表示されなくなります。
using UnityEngine; public class ScriptTest : MonoBehaviour { [HideInInspector] public int num1; [SerializeField] private int num2; }

他スクリプトからpublic変数を利用
下記の別スクリプトを作成します。
using UnityEngine; public class ScriptTest2 : MonoBehaviour { [SerializeField] private ScriptTest sc; private void Start() { sc.num1 = 5; } }
下記のように先に作成したスクリプトをセットすることで、他のスクリプトの「public変数」を利用することが出来ます。

また、「public変数」を他スクリプトから取得することを許可して、書き換えるのは拒否するというのは下記のようにします。
using UnityEngine; public class ScriptTest : MonoBehaviour { [HideInInspector] public int num1 { get; private set; } [SerializeField] private int num2; }
出来るだけ「private」で作成したほうが良いと言われてたりしますが、使い方次第で便利になりますね。