【Unity/C#】アクセス修飾子(セキュリティゲート)の基本と使い方

Unityコード専用検索

コードの型

変数やメソッドの先頭に付けて、公開範囲を制限します。

C#

public int score;        // どこからでも見れる(公開)
private int timer;       // このスクリプトの中だけで使える(非公開)
[SerializeField] private GameObject player; // インスペクターには出すが、外部からは隠す(折衷案)

コードの仕組み

修飾子は、「情報の漏洩や誤操作を防ぐ」ために存在します。

  • public(公開): 「誰でもアクセスしてOK!」なオープンな状態。Unityのインスペクターからも見えるので、設定値の調整に便利です。
  • private(非公開): 「このスクリプトの中身だけを見て!」なクローズドな状態。他のスクリプトから勝手に値を書き換えられたくない時に使います。
  • デフォルト(何も書かない場合): 基本的に private と同じ扱いになります。

活用例(なぜprivateを使うのか?)

「スコアは AddScore メソッドを通さないと増やしてほしくない!」という場合に、private が力を発揮します。

C#

public class ScoreManager : MonoBehaviour
{
    // private にすることで、外部から直接書き換えられないように守る
    private int score = 0; 

    // public メソッドだけが、ルールを守ってスコアを更新できる
    public void AddScore()
    {
        score++; 
    }
}

その他(重要ポイント)

  • [SerializeField] の魔法: 「インスペクターで設定したいから public にするしかない」と悩む必要はありません。[SerializeField]private 変数の上に書くと、「隠したまま、インスペクターだけ表示する」という最強の使い方ができます。プロのコードではこれが基本です!
  • なぜ使い分けるの?:
    • 何でも public にすると、どこで値が変わったのか分からなくなり、バグ(不具合)の温床になります。
    • 「基本は private(または [SerializeField] private)にして、どうしても外から操作してほしいものだけ public にする」のが、安全なプログラムを書くコツです。

まとめ:修飾子のイメージ

修飾子は、「自分の持ち物に鍵をかけるかどうか」です。

  • public: 鍵なしのオープンな本棚。誰でも出し入れ自由。
  • private: 自分専用の金庫。自分しか開けられない。
  • [SerializeField] private: 中身は自分しか触れないけど、外から「何が入っているか」を覗けるガラス張りの金庫。

コメント

タイトルとURLをコピーしました