Интерфейс — это контракт, который гарантирует, что класс умеет делать определённые действия. Неважно, кто его подписал — игрок, враг или бочка. Главное — они все могут выполнить условия контракта.
В интерфейсах в c# не принято делать реализацию функций, свойств, только объявление.
🔥 Зачем это в играх?
Допустим, у тебя есть меч, который может бить врагов и ломать бочки. Без интерфейсов — это ад из
if (collider.GetComponent<Enemy>() != null)... С интерфейсами — чисто и гибко.Можно наследовать от любого количества интерфейсов, в отличии от наследования от классов.
Если мы хотим сделать приватное свойство для реализующего интерфейс класса, мы можем не указывать set в свойстве интерфейса
🎯 Реальный пример: взаимодействие с объектами
public class Bullet : MonoBehaviour
{
private const int _damage = 10;
private void CheckHit()
{
//проверка столкновений с IHealth
hitObj.TakeDamage(_damage);
}
}
public class Player : MonoBehaviour, IHealth
{
// Реализация свойства
public int Health { get; private set; }
// Прочие поля
// Прочии свойства
// Прочии функции
// Реализация функции
public void TakeDamage(int damage) =>
Health -= damage;
}
public interface IHealth
{
// Обьявление свойства Health
int Health { get; }
// Обьявление функции TakeDamage
void TakeDamage(int damage);
}
💡 Два главных плюса:
🔸 Гибкость — добавляй новые разрушаемые объекты без изменения кода меча
🔸 Чистота — избавляешься от гигантских цепочек проверок через GetComponent
🚀 Где ещё использовать?
•
IInteractable для взаимодействия с NPC, дверями, предметами•
ICollectable для сбора монет, аптечек, боеприпасов•
ISaveable для системы сохранений💬 Используешь интерфейсы в своих проектах? Делися в комментах!
🔔 Подпишись — ещё больше C# фишек для геймдева
Пост помог написать @Nokskiy
👉Akrus Games | Unity