C# Unity Interfejsy

Interfejs jest klasą w pełni abstrakcyjną (nie można z niego stworzyć obiektu), dlatego też nie może posiadać konstruktora.
Wewnątrz interfejsu mogą znaleźć się tylko właściwości i puste metody.
Przed nazwą interfejsu dodaje się wielką literę I.
Elementy interfejsu są domyślnie abstrakcyjne i publiczne.

Interfejsy implementuje się za pomocą znaku :
Można implementować wiele interfejsów, które oddziela się przecinkami.
W przypadku interfejsów (w odróżnieniu od zwykłej klasy abstract) nie trzeba używać słowa kluczowego override.
Klasy implementujące interfejs muszą zawierać jego wszystkie metody i właściwości.

Poniżej przykład stworzenia i implementacji interfejsu odpowiedzialnego za zbieranie itemków w grze. Każdy taki item powinien zawierać typ, ilość oraz posiadać metodą, dzięki której go pobierzemy. Chcąc wymusić takie zachowanie na każdym obiekcie, tworzy się i implementuje interfejs.

public enum CollectableType { 
    hp, 
    ammo
}


public interface ICollectable
{
    public CollectableType CollectItemType { get; set; }
    public int Quantity { get; set; }
    public (CollectableType, int) Collect();
}
using UnityEngine;

public class CollectItem : MonoBehaviour, ICollectable
{
    [field: SerializeField]
    public CollectableType CollectItemType { get; set; }

    [field: SerializeField]
    public int Quantity { get; set; }

    public (CollectableType, int) Collect()
    {
        return (CollectItemType, Quantity);
    }

}
using UnityEngine;

public class PlayerStats : MonoBehaviour
{
    public int hp { get; set; }
    public int ammo { get; set; }

    private void OnTriggerEnter2D(Collider2D collision)
    {
        if(collision.GetComponent<ICollectable>() != null)
        {
            (CollectableType, int) item = collision.GetComponent<ICollectable>().Collect();

            switch (item.Item1)
            {
                case CollectableType.ammo:

                    ammo += item.Item2; 
                    break;
                case CollectableType.hp:
                    hp += item.Item2;
                    break;
                default: 
                    break;
            }

        }
    }

}
Scroll to Top