Unity_Lesson

インターフェースは、C#を含む多くのオブジェクト指向プログラミング言語における重要な概念で、クラスや構造体が実装すべきメソッド、プロパティ、イベントなどの契約(仕様)を定義します。インターフェースは、実装を持たないメソッドのシグネチャのみを定義し、実際の動作はそれを実装するクラスによって提供されます。

インターフェースの主な特徴

  1. 実装の分離: インターフェースは、実装を持たず、メソッドのシグネチャのみを定義します。これにより、実装と使用を分離できます。

  2. 多重継承: C#ではクラスの多重継承がサポートされていませんが、インターフェースは複数実装することができ、これにより異なる型の機能を統一的に扱うことができます。

  3. ポリモーフィズム: インターフェースを使用することで、異なるクラスが同じインターフェースを実装し、共通のメソッドを呼び出すことができるため、コードの柔軟性と再利用性が向上します。

  4. 依存性の逆転: インターフェースを使用することで、クラスは具体的な実装に依存せず、インターフェースに依存することができ、これにより変更に強い設計が可能になります。

インターフェースの定義と実装

インターフェースの定義

以下は、インターフェースを定義する例です。このインターフェースは、IDriveableという名前で、Driveメソッドを持っています。

public interface IDriveable
{
    void Drive(float distance);
}

インターフェースの実装

以下は、IDriveableインターフェースを実装するCarクラスの例です。

public class Car : IDriveable
{
    public void Drive(float distance)
    {
        Debug.Log("Driving " + distance + " kilometers.");
    }
}

public class Program
{
    public static void Main()
    {
        IDriveable myCar = new Car();
        myCar.Drive(10); // "Driving 10 kilometers."
    }
}

Unityにおけるインターフェースの使用

Unityでもインターフェースは非常に便利で、特に複数のコンポーネントやオブジェクトに共通の機能を持たせる場合に使用されます。以下は、Unityでのインターフェースの使用例です。

Unityでのインターフェースの例

using UnityEngine;

public interface IInteractable
{
    void Interact();
}

public class Door : MonoBehaviour, IInteractable
{
    public void Interact()
    {
        Debug.Log("Door opened!");
    }
}

public class Button : MonoBehaviour, IInteractable
{
    public void Interact()
    {
        Debug.Log("Button pressed!");
    }
}

public class Player : MonoBehaviour
{
    void Update()
    {
        if (Input.GetKeyDown(KeyCode.E))
        {
            // 近くのIInteractableオブジェクトを取得してInteractを呼び出す
            IInteractable interactable = GetInteractable();
            interactable?.Interact();
        }
    }

    IInteractable GetInteractable()
    {
        // 適当なロジックでIInteractableを取得
        // ここではダミーで返します
        return FindObjectOfType<Door>(); // 例としてDoorを取得
    }
}

まとめ

インターフェースを使用することで、柔軟で拡張性のあるコードを書くことが可能になります。