今回は、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」で作成したほうが良いと言われてたりしますが、使い方次第で便利になりますね。