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;
}
}