-
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);
}
На заметку:
При создании объекта вышеуказанными способами идет проверка на наличие компонента Актора у префаба. Если компонента нет, то актор будет динамически добавлен на созданный объект. Старайтесь избегать таких ситуаций, так как проверка на наличие компонента дешевле чем динамическое добавление. Хорошим тоном будет добавить актора на префаб.
Добавьте Actor-компонент(Класс Actor или его наследник) на gameobject в сцене (или на префаб этого go), воспользовавшись кнопкой Add Component. Инициализация актора произойдет автоматически из Layer.
В этом варианте создается новый класс, который наследуется от класса 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()
{
// добавит компонент
entity.Set(componetCollider);
entity.Set(componentObject);
// создаст и добавит компонент по типу
entity.Set<ComponentMotion>();
// добавит тэг
entity.Set(Tag.Alpaca);
}
}
Вернет нового актора и назначит ему новый игровой объект (gameobject). Объект будет получен из папки Resources по имени.
Настройки для актора будут взяты из Model.Bunny
Actor.Create("Obj Unit", Model.Bunny);
Actor.Create("Obj Sprite", Model.Bunny);
Ознакомьтесь с настройкой через модели.
На заметку:
Для полноценной работы актора необязательно наследоваться. Если вы будете использовать вариант через модели, то на объекте достаточно иметь базовый компонент Актора.
Для обращения к сущности используйте публичное поле Actor.entity
:
public GameObject prefabFluffyUnicorn;
public void Setup()
{
ref ent e = ref Actor.Create(prefabFluffyUnicorn).entity;
}
Напрямую уничтожение актора, как go или компонента, не потребуется. Как правило в фреймворке вы будете иметь дело с сущностями. Для уничтожения вам нужно вызвать entity.Release()
метод:
Actor a = Actor.Create(prefabFluffyUnicorn);
a.entity.Release();
На заметку
Любое логические действие уничтожения и удаления в фреймворке идет через методы
Release()
- если видите этот метод, то он 100% связан с уничтожением.
- С уничтожением актора его сущность сбрасывается в область зарезервированных сущностей. Все новые сущности сначала попытаются получить индекс оттуда.
- Все компоненты уничтоженной сущности помечаются как неактивные. Сущность выходит из обращения всех групп. При этом отрабатываются все события выхода из групп если такие присутствуют.
- Если актор был использован в пуле объектов, то его GameObject будет деактивирован для последующего использования.
Уничтожение является отложенным действием и произойдет на следующий кадр.
Rider
Код шаблона:
using Pixeye.Actors;
namespace $NAMESPACE$
{
public class $CLASS$ : Actor
{
$END$
protected override void Setup()
{
}
}
}
Настройки macro
для перменных:
CLASS
- Current file name without extension with all non-alphanumeric replaced with underscores
NAMESPACE
- Default namespace for current file