クラスメンバーの配置についての技術資料
この資料では、C#およびUnityにおけるクラスメンバー(フィールド、プロパティ、メソッド)の配置に関する基本的なルールとその違いについて解説します。特に、Unityの特性を活かしたクラス設計について学びます。
目次
C#のクラスメンバーの配置
C#のクラスは、以下のようなメンバーで構成されます。
- フィールド (Fields): クラス内部のデータを保持するメンバー。
- コンストラクタ (Constructors): クラスのインスタンス生成時に呼ばれるメソッド。
- プロパティ (Properties): データの取得や設定の際にロジックを追加できるメンバー。
- メソッド (Methods): クラスの機能を定義するメンバー。
- デリゲート (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のライフサイクルに関連する特定のメソッドが追加されます。
- フィールド (Fields): インスペクターで設定可能なパラメータを持ちます。
[SerializeField]
を使用してプライベートフィールドもインスペクターで設定できるようにします。 - Unityメソッド (Unity Methods): Unityライフサイクルに基づくメソッド(
Awake
,Start
,Update
など)が使用されます。 - プロパティ (Properties): フィールドのアクセスを制御するために使用します。
- メソッド (Methods): クラス固有の処理を定義します。
- デリゲートとイベント (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#のクラスメンバーの配置について理解し、ゲーム開発におけるスクリプト設計に役立ててください。
ディスカッション
コメント一覧
まだ、コメントがありません