-
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()
{
// добавит компонент
Set(componetCollider);
Set(componentObject);
// создаст/добавит компонент по типу
Set<ComponentMotion>();
// добавит тэг
Set(Tag.Alpaca);
}
}
Вернет нового актора и назначит ему новый игровой объект (gameobject). Объект будет получен из папки Resources по имени.
Настройки для актора будут взяты из Model.Bunny
Actor.Create("Obj Unit", Model.Bunny);
Actor.Create("Obj Sprite", Model.Bunny);
Вернет актора и назначит ему игровой объект найденный на сцене.
Настройки для актора будут взяты из Model.Bunny
var obj = GameObject.Find("Hollow Soul");
Actor.CreateFor(obj, Model.Bunny);
На заметку:
Для полноценной работы актора необязательно наследоваться. Если вы будете использовать вариант через модели то на объекте достаточно иметь базовый компонент Актора.