Руководство для начинающих по интерфейсу Unity C#
Интерфейс в C# — это контракт, определяющий набор методов, свойств и событий, которые должен реализовать класс. Он действует как образец для реализации функциональности в нескольких классах. Интерфейсы предоставляют способ достижения полиморфизма, позволяя различным классам иметь общее поведение.
Unity Интерфейс С#
Чтобы использовать интерфейсы в 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» в начале). start, чтобы вы знали, когда класс использует интерфейс).
Чтобы использовать интерфейс в сценарии 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# заключается в том, что они могут использоваться несколькими классами, поэтому вместо вызова 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;
}
}