クラスメンバーの配置についての技術資料

この資料では、C#およびUnityにおけるクラスメンバー(フィールド、プロパティ、メソッド)の配置に関する基本的なルールとその違いについて解説します。特に、Unityの特性を活かしたクラス設計について学びます。

C#のクラスメンバーの配置

C#のクラスは、以下のようなメンバーで構成されます。

  1. フィールド (Fields): クラス内部のデータを保持するメンバー。
  2. コンストラクタ (Constructors): クラスのインスタンス生成時に呼ばれるメソッド。
  3. プロパティ (Properties): データの取得や設定の際にロジックを追加できるメンバー。
  4. メソッド (Methods): クラスの機能を定義するメンバー。
  5. デリゲート (Delegates) とイベント (Events): 特定のアクションを定義するために使用されるメンバー。

C#クラスの例

class MyClass
{
    // フィールド
    private int myField;

    // コンストラクタ
    public MyClass()
    {
        myField = 0;
    }

    // プロパティ
    public int MyProperty
    {
        get { return myField; }
        set { myField = value; }
    }

    // メソッド
    public void MyMethod()
    {
        // 処理
    }

    // デリゲートとイベント
    public delegate void MyDelegate();
    public event MyDelegate MyEvent;
}

配置のポイント

  • フィールドはクラスの先頭に配置し、プライベートデータを保持します。
  • プロパティは外部に公開されるデータを制御するために使用され、フィールドの後に配置します。
  • メソッドはプロパティの後に配置され、クラスのロジックを定義します。

Unityのクラスメンバーの配置

Unityのクラスは、基本的にC#のルールをベースにしていますが、MonoBehaviourを継承することで、Unityのライフサイクルに関連する特定のメソッドが追加されます。

  1. フィールド (Fields): インスペクターで設定可能なパラメータを持ちます。[SerializeField]を使用してプライベートフィールドもインスペクターで設定できるようにします。
  2. Unityメソッド (Unity Methods): Unityライフサイクルに基づくメソッド(Awake, Start, Updateなど)が使用されます。
  3. プロパティ (Properties): フィールドのアクセスを制御するために使用します。
  4. メソッド (Methods): クラス固有の処理を定義します。
  5. デリゲートとイベント (Delegates and Events): C#と同様に使用します。

Unityクラスの例

using UnityEngine;

public class MyUnityClass : MonoBehaviour
{
    // フィールド
    [SerializeField] private int myField;

    // プロパティ
    public int MyField
    {
        get { return myField; }
        set 
        { 
            if (value > 0)
            {
                myField = value;
            }
        }
    }

    // Unityメソッド
    void Awake()
    {
        // 初期化処理
    }

    void Start()
    {
        // ゲーム開始時の処理
        MyField = 10;
        Debug.Log(MyField);
    }

    void Update()
    {
        // 毎フレームの更新処理
    }

    // ユーザー定義メソッド
    public void MyCustomMethod()
    {
        // カスタム処理
    }

    // デリゲートとイベント
    public delegate void MyDelegate();
    public event MyDelegate MyEvent;
}

配置のポイント

  • フィールド[SerializeField]を使ってインスペクターから設定できるようにします。
  • UnityメソッドはUnityのライフサイクルに基づき、Awake, Start, Updateの順に配置します。
  • プロパティはフィールドにアクセスするために使いますが、Unityエディターのインスペクターとの連携も考慮します。

C#とUnityのクラスメンバー配置の違い

  • Unity特有のメソッド: Unityでは、Awake, Start, Updateといったライフサイクルメソッドが使われます。C#標準クラスにはこうしたメソッドは存在せず、手動で処理を呼び出す必要があります。
  • インスペクターとの連携: Unityでは、[SerializeField]を使ってフィールドをインスペクターで編集できるようにすることが一般的です。C#標準クラスでは、直接フィールドを外部公開することは避けられます。
  • ゲームループとの関係: UnityのUpdateメソッドはフレームごとに実行されるメソッドであり、クラスメンバーの一部として重要な役割を果たします。C#標準クラスではそのような自動実行の仕組みはありません。

この資料を基に、UnityおよびC#のクラスメンバーの配置について理解し、ゲーム開発におけるスクリプト設計に役立ててください。

C#,Unity

Posted by hidepon