Unity C#入門:アクセス修飾子の基本(privateとpublic)

1. はじめに

アクセス修飾子は、コードの安全性と保守性を高めるための重要な機能です。この記事では、最も基本的なprivatepublicの使い方について解説します。

2. アクセス修飾子の基本概念

2.1. アクセス修飾子とは

  • クラス、関数、変数へのアクセス範囲を制御する機能
  • コードの安全性を高めるための重要な要素
  • 意図しない変更を防ぐための仕組み

2.2. クラス間のアクセス制御

[code language="csharp"]
// クラスA
public class ClassA : MonoBehaviour
{
    void Start()
    {
        var classB = new ClassB();
        classB.Function1();  // public関数にはアクセス可能
        // classB.Function2();  // privateはアクセス不可(コンパイルエラー)
    }
}

// クラスB
public class ClassB
{
    public void Function1()  // 他のクラスからアクセス可能
    {
        // 処理
    }
    private void Function2() // このクラス内でのみアクセス可能
    {
        // 処理
    }
}
[/code]

3. privateとpublicの使い分け

3.1. private(デフォルト)

  • クラス内部でのみアクセス可能
  • 明示的に書かなくても自動的に適用
  • 変数や関数を外部から保護

3.2. public

  • どこからでもアクセス可能
  • Inspectorからの値の変更も可能
  • 外部からの操作が必要な場合に使用

4. 実践的な使用例

4.1. 基本的なスクリプト構造

[code language="csharp"]
public class TestScript : MonoBehaviour
{
    // クラス変数(フィールド)
    private int a = 0;      // private(明示的に記述)
    public int b = 100;     // public(Inspector表示)
    private void Start()    // クラス内からのみ呼び出し可能
    {
        int localVar = 10;  // ローカル変数(アクセス修飾子不要)
        Debug.Log(a);       // private変数にアクセス可能
        Function();         // private関数にアクセス可能
    }

    private void Function() // private関数
    {
        Debug.Log("Function called");
    }
}
[/code]

4.2. Inspectorでの表示

[code language="csharp"]
public class PlayerStatus : MonoBehaviour
{
    public int health = 100;     // Inspectorで編集可能
    private int score = 0;       // Inspectorには表示されない
    public float moveSpeed = 5f; // Inspectorで調整可能
    private bool isDead = false; // 内部管理用</code></pre>
}
[/code]

5. アクセス修飾子の使用指針

5.1. privateを使用する場合

  1. クラス内部でのみ使用する変数
  2. 外部から変更されたくない値
  3. クラス内部の実装詳細
[code language="csharp"]
public class Enemy : MonoBehaviour
{
    private int currentHealth;    // 内部状態
    private bool isAttacking;     // 状態管理
    private Vector3 spawnPoint;   // 初期位置
    private void UpdateHealth()   // 内部処理
    {
        // 処理
    }
}
[/code]

5.2. publicを使用する場合

  1. 他のクラスから参照/変更が必要な値
  2. Inspector上で調整したい値
  3. 外部から呼び出したい関数
[code language="csharp"]
public class Player : MonoBehaviour
{
    public int maxHealth = 100;   // Inspectorで設定可能
    public float attackPower = 10f; // バランス調整用
    public void TakeDamage(int damage) // 他のクラスから呼び出し可能
    {
        // ダメージ処理
    }
}
[/code]

6. アクセス修飾子の省略と明示

6.1. 省略可能なケース

  • private修飾子(デフォルトのため)
  • ローカル変数(アクセス修飾子の概念なし)

6.2. 明示的な記述を推奨するケース

[code language="csharp"]
public class GameManager : MonoBehaviour
{
    // 明示的なprivate(意図が明確)
    private int score;
    private bool isGameOver;
    // privateの省略(動作は同じだが意図が不明確)
    int highScore;
    bool isPaused;
}
[/code]

7. まとめ

アクセス修飾子の適切な使用により:

  • コードの安全性が向上
  • 意図しない変更を防止
  • 保守性が向上

基本的な方針:

  1. デフォルトはprivateを使用
  2. 必要に応じてpublicに変更
  3. 意図を明確にするため、できるだけ明示的に記述

コメント

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