-
Notifications
You must be signed in to change notification settings - Fork 76
(RU) Actors
Актор (Actor) служит мостом между фреймворком и физическим объектом в Unity. Задача актора визуально настроить базовые компоненты сущности, инициализировать сущность.
Акторы самостоятельно создают сущность.
Вернет нового актора и назначит ей новый игровой объект (gameobject). Объект будет получен из папки Resources по имени.
public void Setup()
{
Actor a = Actor.Create("Obj Alpaca");
}
Вернет новую сущность и назначит ей новый игровой объект (gameobject). Объект будет получен из предоставленного разработчиком префаба (prefab).
public GameObject prefabFluffyUnicorn;
public void Setup()
{
Actor a = Actor.Create(prefabFluffyUnicorn);
}
public GameObject prefabFluffyUnicorn;
public void Setup()
{
ref ent e = ref Actor.Create(prefabFluffyUnicorn).entity;
}
Напрямую уничтожение актора не потребуется. Как правило в фреймворке вы будете иметь дело с сущностями. Для уничтожения вам нужно вызвать entity.Release()
метод.
Actor a = Actor.Create(prefabFluffyUnicorn);
a.entity.Release();
На заметку
Любое логические действие уничтожения и удаления в фреймворке идет через методы
Release()
- если видите этот метод то он 100% связан с уничтожением.
- С уничтожением актора его сущность сбрасывается в область зарезервированных сущностей. Все новые сущности сначала попытаются получить индекс оттуда.
- Все компоненты уничтоженной сущности помечаются как неактивные. Сущность выходит из обращения всех групп. При этом отрабатываются все события выхода из групп если такие присутстввуют.
- Если актор был использован в пуле объектов то его GameObject будет деактивирован для последующего использования.
Уничтожение является отложенным действием и произойдет на следующий кадр.
В этом варианте создается новый класс который наследуется от класса Actor. Это самый простой способ работы с акторами. Добавляются поля компонентов которые нужно передать сущности.
public class ActorUnit : Actor
{
[FoldoutGroup("Setup")]
public ComponentCollider componetCollider;
[FoldoutGroup("Setup")]
public ComponentObject componentObject;
}
Дальше используется метод Setup()
для передачи компонентов сущности.
public class ActorUnit : Actor
{
[FoldoutGroup("Setup")]
public ComponentCollider componetCollider;
[FoldoutGroup("Setup")]
public ComponentObject componentObject;
protected override void Setup()
{
// добавит компонент
Add(componetCollider);
// добавит компонент, но не инициализирует его в системах. Компонент будет оставаться невидимым пока его не добавят через Add
// Используется когда важно полностью настроить сущность, но работа некоторых компонентов ненужна на старте.
AddLater(componentObject);
// создаст/добавит компонент по типу
Add<ComponentMotion>();
// добавим тэг
Add(Tag.Alpaca);
}
}