Unity C# インターフェイス初心者ガイド
C# のインターフェイスは、クラスが実装する必要があるメソッド、プロパティ、イベントのセットを定義するコントラクトです。これは、複数のクラスに機能を実装するための青写真として機能します。インターフェイスはポリモーフィズムを実現する方法を提供し、異なるクラスが共通の動作を共有できるようにします。
Unity C#インターフェース
Unity でインターフェイスを使用するには、以下の手順に従います。
- 新しいスクリプトを作成し、任意の名前を付けます (私の場合は、InterfaceContainer という名前を付けます)。
- 中身をすべて削除して、以下のコードを貼り付けます。
public interface IEntity
{
void Initialize(); //Function without any arguments
float health { get; set; } //A variable
void ApplyDamage(float points); //Function with one argument
}
インターフェイスの名前は IEntity です (注: 先頭の大文字の i は必要ありませんが、便宜上、すべてのインターフェイスの名前を先頭に 'I' と付けてください)そうすることで、クラスがいつインターフェイスを使用するかを知ることができます)。
C# スクリプトでインターフェイスを使用するには、次の手順に従います。
- という新しいスクリプトを作成し、任意の名前を付けます (私の場合は EntityScript という名前を付けます)。
- MonoBehaviour の後にインターフェイス名を追加します。この場合は IEntity です (カンマで区切ります)。
public class EntityScript : MonoBehaviour, IEntity
インターフェイス メソッドが実装されていないため、スクリプトでエラーが発生することがわかります。それでは、IEntity メソッドを実装しましょう。
using UnityEngine;
public class EntityScript : MonoBehaviour, IEntity
{
public float health { get; set; }
public void Initialize()
{
health = 100;
}
public void ApplyDamage(float points)
{
health -= points;
}
}
インターフェイス メソッドが実装されました。
インターフェースはプログラミングのワークフローをどのように簡素化するのでしょうか?
C# インターフェイスの主な利点は、複数の classes で使用できることです。そのため、スクリプトごとに GetComponent を呼び出す代わりに、インターフェイス名を使用してすべてのスクリプト参照を取得できます。
複数のスクリプトで同じメソッドを実装する必要がある場合、または同じコンテキストで未知のクラスを参照する必要がある場合は、C# インターフェイスを使用します。
以下の例を確認してください。
//Get the script that uses IEntity interface
IEntity interfaceEntity = gameObject.GetComponent<IEntity>();
interfaceEntity.Initialize(); //Initializing the entity
interfaceEntity.ApplyDamage(10); //Applying the damage
interfaceEntity.health += 10; //Healing the entity
上記のスクリプトは、IEntity インターフェイスを持つコンポーネントを取得し、そのメソッドを呼び出します。
ボーナス
インターフェイスは、次のようなカスタム データ型も受け入れることができます。
public interface IHealable<T>
{
void Heal(T type);
}
データ型は、インターフェイスをクラスに実装するときに提供されます (float や int などの標準型、または Class などのより複雑な型、または別の型にすることもできます)インターフェース):
using UnityEngine;
public class EntityScript : MonoBehaviour, IEntity, IHealable<int>
{
public float health { get; set; }
public void Initialize()
{
//health = 100;
Heal(100);
}
public void ApplyDamage(float points)
{
health -= points;
}
public void Heal(int points)
{
health = points;
}
}