Przewodnik dla początkujących dotyczący interfejsu Unity C#

Interfejs w języku C# to kontrakt definiujący zestaw metod, właściwości i zdarzeń, które klasa musi zaimplementować. Działa jako plan implementacji funkcjonalności w wielu klasach. Interfejsy umożliwiają osiągnięcie polimorfizmu, umożliwiając różnym klasom wspólne zachowania.

Unity Interfejs C#

Aby użyć interfejsów w Unity, wykonaj poniższe kroki:

  • Utwórz nowy skrypt i nadaj mu dowolną nazwę (w moim przypadku nazwę go InterfaceContainer)
  • Usuń wszystko z niego, a następnie wklej poniższy kod:
public interface IEntity
{
    void Initialize(); //Function without any arguments
    float health { get; set; } //A variable
    void ApplyDamage(float points); //Function with one argument
}

Interfejs nazywa się IEntity (Uwaga: wielka litera i na początku nie jest konieczna, ale dla wygody nazwij wszystkie interfejsy ciągiem „I” na końcu start, dzięki czemu będziesz wiedzieć, kiedy klasa korzysta z interfejsu).

Aby użyć interfejsu w skrypcie C#, wykonaj poniższe kroki:

  • Utwórz nowy skrypt i nadaj mu dowolną nazwę (w moim przypadku nazwę go EntityScript)
  • Dodaj nazwę interfejsu po MonoBehaviour, czyli w tym przypadku IEntity (oddzielone przecinkiem)
public class EntityScript : MonoBehaviour, IEntity

Zauważysz, że skrypt wyświetla błąd, ponieważ metody interfejsu nie są zaimplementowane. Zaimplementujmy więc metody 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;
    }
}

Metody interfejsu są teraz zaimplementowane.

W jaki sposób interfejsy upraszczają proces programowania?

Główną zaletą interfejsów C# jest to, że mogą być używane przez wiele klas, więc zamiast wywoływać GetComponent dla każdego skryptu, możesz uzyskać wszystkie odniesienia do skryptów, używając nazwy interfejsu.

Użyj interfejsów C#, jeśli chcesz zaimplementować te same metody w więcej niż jednym skrypcie lub gdy musisz odwołać się do nieznanej klasy w tym samym kontekście.

Sprawdź poniższy przykład:

        //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

Powyższy skrypt pobiera komponent z interfejsem IEntity, a następnie wywołuje jego metody.

Premia

Interfejsy mogą również akceptować niestandardowe typy danych, na przykład:

public interface IHealable<T>
{
    void Heal(T type);
}

Typ danych jest następnie podawany podczas implementowania interfejsu w klasie (może to być typ standardowy, taki jak float lub int, lub typ bardziej złożony, taki jak Class lub nawet inny Interfejs):

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;
    }
}
Sugerowane artykuły
Wprowadzenie do maszyny stanowej w Unity
Przewodnik po ładowaniu scen w Unity
Kompleksowy przewodnik dotyczący przekształcania rotacji w jedność
Kodowanie prostego systemu inwentaryzacji za pomocą przeciągania i upuszczania interfejsu użytkownika w Unity
Implementacja sterowania goglami VR w Unity
Przewodnik po integracji kontrolera Nintendo z Unity
Najbardziej przydatne fragmenty kodu dla programistów Unity