- определить контракт взаимодействия между классами
- определяем поведение, которое впоследствии будет реализовано в каком-то классе
- как будут вести себя наследники без каких-либо деталей
- нет ни какой реализации
- абстрактные методы
- не может быть конструкторов
- не может содержать поля классов
- описывается сигнатура методов
- публичный контракт взаимодействия
по умолчанию все члены интерфейса имеют модификатор public - Полиморфизм
Передаётся тип данных — это тип интерфейса
в качестве параметра будет принимать объект класса, который у нас будет реализовывать интерфейс. - интерфейс может содержать свойство
свойство — это методы, которые маскируются
общий класс создаётся благодаря наследованию
базовый класс класс, который наследуется
Характерные Особенности
присущие множеству связанных элементов
BadShooting.cs
не эффиктивность без использования пула объектов
в каждом Update
инстализируется объект «пуля»
назначается объекту родитель
вызывает метод, который устанавливает начальную позицию и поворот
public class BadShooting:MonoBehaviour;
{
[SerializableField]
private GameObject bullet;
[SerializableField]
private Transform bulletParent;
[SerializableField]
private Vector3 bulletSpawnPosition;
private void Update()
{
var bullet=GetBullet();
bullet.transform.SetParent(bulletParent);
bullet.GetComponent<BadBullet>().OnCreate(bulletSpawnPosition,transform.rotation);
}
private GameObject GetBullet()
{
return Instantiate(bullet);
}
}
BadBullet.cs
пуля летит прямо и через 3 секунды уничтожается
public class BadBullet:MonoBehaviour;
{
private float lifeTime=3;
private float currentLifeTime;
private float speed=10;
public void OnCreate(Vector3 position, Quaternion rotation)
{
transform.position=position;
transfor.rotation=rotation;
currentLifeTime=lifeTime;
}
void Update()
{
transform.Translate(Vector3.forward*Time.deltaTime*speed);
if ((currentLifeTime-=Time.deltaTime)<0)
Destroy(gameObject);
}
}

Геометрический шейдер [maxvertexcount(3)] void geo(triangle float4 IN[3]:SV_POSITION, inout TriangleStream<geometryOutput> triStream) { код }