【Unity】オブジェクト指向の3要素をUnityで理解する:カプセル化、継承、ポリモーフィズム
オブジェクト指向プログラミング(OOP)の3要素である「カプセル化」、「継承」、「ポリモーフィズム」がどのようにこのUnityのサンプルに適用されているかを説明します。
サンプルコード
rendererComponentには、インスペクターでドラッグ&ドロップで登録します
登録されていないときは、自動的に取得できるように工夫されています
using UnityEngine;
public class ChangeColor : MonoBehaviour
{
public Color color; // この変数は、変更するための新しい色を保持します
public Renderer rendererComponent; // 汎用的なRenderer型を使用します
void Start()
{
// Rendererコンポーネントがアタッチされていない場合、自動で取得します
if (rendererComponent == null)
{
rendererComponent = GetComponent<Renderer>();
}
}
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
rendererComponent.material.color = color;
}
}
}
1. カプセル化(Encapsulation)
カプセル化は、データとそれを操作するメソッドを一つのオブジェクトとしてまとめることを指します。このサンプルでは、ChangeColor
クラスがカプセル化の例です。
public class ChangeColor : MonoBehaviour
{
public Color color; // データ(プロパティ)
public Renderer rendererComponent; // データ(プロパティ)
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
rendererComponent.material.color = color; // データを操作するメソッド
}
}
}
ここで使われている「プロパティ」は、Unityのインスペクターで公開されるフィールドを指しています。具体的には、color
とrendererComponent
です。
public
キーワードを使っているため、Unityエディターのインスペクターでこれらのフィールドを設定することができます。プロパティという言葉は、C#において通常、ゲッターとセッターを持つメンバーを指しますが、Unityの文脈では、インスペクターで設定できる公開フィールドも広義に「プロパティ」と呼ばれることがあります。
public Color color; // インスペクターで設定可能なフィールド
public Renderer rendererComponent; // インスペクターで設定可能なフィールド
color
とrendererComponent
は、ChangeColor
クラスの内部データです。Update
メソッドは、このデータにアクセスして操作します。- データと操作が一つのクラスにまとめられているため、これがカプセル化の例となります。
2. 継承(Inheritance)
継承は、あるクラスが他のクラスのプロパティやメソッドを引き継ぐことを指します。このサンプルでは、ChangeColor
クラスがMonoBehaviour
クラスを継承しています。
public class ChangeColor : MonoBehaviour
{
// MonoBehaviourクラスからメソッドやプロパティを継承しています
}
ChangeColor
クラスは、MonoBehaviour
クラスを継承しています。- これにより、
ChangeColor
クラスはMonoBehaviour
のメソッド(例えばStart
やUpdate
)やプロパティにアクセスできます。 MonoBehaviour
を継承することで、ChangeColor
はUnityのコンポーネントとして機能し、シーン内のオブジェクトにアタッチできます。
3. ポリモーフィズム(Polymorphism)
ポリモーフィズムは、異なるクラスが同じインターフェースや基本クラスを共有し、同じメソッドを異なる方法で実装できることを指します。このサンプルでは、Renderer
型がポリモーフィズムの例です。
public class ChangeColor : MonoBehaviour
{
public Renderer rendererComponent; // Renderer型のプロパティ
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
rendererComponent.material.color = color;
}
}
}
Renderer
は抽象クラスで、具体的な実装としてMeshRenderer
やSpriteRenderer
などのサブクラスがあります。ChangeColor
クラスでは、rendererComponent
がどの具体的なタイプのRenderer
であるかに関わらず、Renderer
型として操作します。- 実行時には、
rendererComponent
がMeshRenderer
であってもSpriteRenderer
であっても、同じコードで動作します。これはポリモーフィズムの一例です。
まとめ
このサンプルコードを通じて、オブジェクト指向プログラミングの3要素を以下のように学ぶことができます。
- カプセル化: データとそれを操作するメソッドを1つのクラスにまとめる。
- 継承: クラスが他のクラスのプロパティやメソッドを引き継ぐ。
- ポリモーフィズム: 同じ基本クラスやインターフェースを使って異なるクラスが同じメソッドを異なる方法で実装する。
これにより、オブジェクト指向プログラミングの基本概念が実際のコード例を通じて理解できるようになります。
ディスカッション
コメント一覧
まだ、コメントがありません