Skip to content

(RU) Scene organization

Dimitry edited this page Dec 9, 2018 · 1 revision

Мультисцены

Работа фреймворка основана на мультисценах.

Есть два вида сцен :

  • Основные
  • Второстепенные

Основными сценами считаются все сцены на которых будет присутствовать компонент Starter или наследуемый от Starter компонент.

Структура основной сцены всегда одинакова:

  • [SETUP] - к этому объекту добавляется компонент Starter, допускается использовать SETUP для других компонентов настроек.
  • [SCENE] - это "корень" уровня.
    • Dynamic - сюда будут загружаться все созданные GO ( GameObject ) во время игровой сессии.

Сцены по умолчанию не содержат камеры так как предполагается использование отдельной сцены с камерой.

Стартер

Стартер

Стартер - необходимый компонент. При загрузке/смены сцен стартер отрабатывается первым. В его функции входит инициализация обработчиков для текущего уровня, менеджемент дополнительных сцен на старте, стартер отвечает за то какие сцены могут остаться после закрытия основной сцены.

Стартер выполняет роль единой точки входа в программу ( уровень ) - все компоненты наследуемые от Actor или Monocached будут инициализированы после стартера.

Публичные переменные отвечающие за работу со сценами:

  • Scenes To Keep - какие сцены должны остаться после перехода с этой сцены?
  • Scenes Depends On - какие сцены должны быть добавлены с переходом на эту сцену?

На картинке я хочу чтобы к сцене Игровой уровень 1 добавились Scene Kernel, Scene Camera и сцена с комнатой.

Стартер 2

Как работать на сцене если на ней нет камеры а очень нужно? Вы можете легко перетащить сцену камеры в Hierarchy. При запуске игры из редактора фреймворк увидит, что такая сцена уже есть и не будет ее повторно добавлять.

Создание новых сцен

Tools->Actors->Add->Scene

Создание новых сцен

Укажите путь и название сцены в появившемся окошке.

Создание новый сцен 2

Для регистрации обработчиков используйте метод Setup. Если вам нужен аналог Start метода используйте PostSetup.

public class StarterLevel1 : Starter 
{
    protected override void Setup()
    {
        Add<ProcessingCamera>();
        Add<ProcessingPlayers>();
        Add<ProcessingInputConnect>();
    }

   protected override void PostSetup()
    {
        var player = FindObjectOfType<ActorPlayer>();   
    }

Когда мы переходим с одной основной сцены на другую то все обработчики добавленные на сцену выгружаются из системы.

Building Settings

Не забудьте указывать/проверять ваши сцены в Building Settings. Порядок сцен не важен, просто убедитесь, что первой идет сцена с которой вы хотите начать игру.

Scene Kernel

Отдельно стоит упомянуть Scene Kernel. Это корневая сцена. Из нее идет инициализация фреймворка, плагинов, шаблонов. Без этой сцены ничего работать не будет и она всегда должна присутствовать как в Scenes Depends On так и в Scenes To Keep на основных сценах.

В Scene Kernel лучше ничего не класть, особенно связанное с игрой.

Из книги рецептов

Методы для работы со сценами