Skip to content
Dimitry edited this page Jun 29, 2019 · 18 revisions

Акторы

Актор (Actor) служит мостом между фреймворком и физическим объектом в Unity. Задача актора визуально настроить базовые компоненты сущности, инициализировать сущность.

Как создавать?

Акторы самостоятельно создают сущность.

Вариант 1

Вернет нового актора и назначит ему новый игровой объект (gameobject). Объект будет получен из папки Resources по имени.

public void Setup()
{
   Actor a = Actor.Create("Obj Alpaca");
}

Вариант 2

Вернет нового актора и назначит ему новый игровой объект (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 будет деактивирован для последующего использования.

Уничтожение является отложенным действием и произойдет на следующий кадр.

Настройка актора

Вариант 1 - наследование от актора

В этом варианте создается новый класс который наследуется от класса 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);
  }
 
}

Вариант 2 - модели

Cпособ 1

Вернет нового актора и назначит ему новый игровой объект (gameobject). Объект будет получен из папки Resources по имени. Настройки для актора будут взяты из Model.Bunny

Actor.Create("Obj Unit", Model.Bunny);
Actor.Create("Obj Sprite", Model.Bunny);
Cпособ 2

Вернет актора и назначит ему игровой объект найденный на сцене.
Настройки для актора будут взяты из Model.Bunny

var obj = GameObject.Find("Hollow Soul");
Actor.CreateFor(obj, Model.Bunny);

Настройка моделей

На заметку:

Для полноценной работы актора необязательно наследоваться. Если вы будете использовать вариант через модели то на объекте достаточно иметь базовый компонент Актора.