понедельник, 16 июня 2014 г.

Unity3D - Scaleform - Render to Texture (Part 2)


В предыдущей статье, по теме Render to Texture, мы рассмотрели то как можно выводить в текстуру весь контент с загруженного SWF MovieClip-а. Этот метод позволяет размещать разную 2D анимацию на трехмерных объектах, при этом, анимация грузится из отдельных "флэш-клипов". Здесь мы рассмотрим альтернативный вариант вывода в текстуры множественных анимации, но только из одного MovieClip-а. Эту технику я буду называть "Анимационным атлассом" (Render To Texture Atlass), потому что здесь будет происходить похожая операция "вырезания" части текстуры по UV координатам.

Flash
Для начала скажу пару слов о Flash-контенте. Основной клип разбит на 4 квадратные области, в каждой отдельная анимация. В этот раз я использовал встроенную во Flash IDE систему "твин"-анимацию.


Все это управляется, вернее никак не управляется, основным файлом документа: RTTAtlassContent.as. Из которого, через ExternalInterface отравляется только одна команда в Scaleform о регистрации текущего "мувиклипа" - OnRegisterSWFCallback c ссылкой на текущий "флэш-документ".


Еще раз напомню, что все полученные swf-файлы должны лежать в папке Unity-проекта Assets/StreamingAssets

Unity
В первую очередь, на камеру необходимо повесить скрипт SFCamera, который инициализирует Scaleform, отлавливает и передает события взаимодействия пользователя (mouse, key, touch) из Unity в Scaleform (выделено красным на следующей картинке).


Теперь нужно создать простые Quad-ы и положить на них компонент RTTSprite, в котором определяются параметры отображаемой на них текстуры - через задание  UV-области копирования: Region (X,Y - это координаты верхнего левого угла копирования). При этом любой "спрайт" всегда имеет размер 1х1.


RTTAtlass также как и RTTDisplay имеет базовые параметры (наследуемые от класса SFRTT):

  • Swf Name - Имя подгружаемого "флэш клипа";
  • Movie Class Name - Имя класса "обертки"-обработчика в Unity "флэш" запросов через ExternalInterface;
  • Clear Color - Цвет очистки текстуры перед отображением SWF-контента;
  • Render Texture Width - Размер текстуры в ширину;
  • Render Texture Height - Размер текстуры в высоту;
  • Origin X/Y - Начальная точка;
  • Render Texture - Текстура которая получается в результате работы скрипта, если изначальное значение равно null;
  • Isinited - "датчик" инициализации компонента.
И свои собственные, уникальные параметры:
  • Remove After Init - Удаляет атласс со сцены после инициализации. Если не включена, то атласс скрывается;
  • Use Sprite UV - Этот триггер позволяет оптимизировать сцену за счет использования одного материала атласcа для всех спрайтов;
  • Sprite Regions (X/Y) - Количество спрайтов по вертикали и горизонтали;
  • Sprite - "Экземпляр" (Instance) спрайта при множественном копировании (см. ниже);
  • Sprite Count - Количество копий спрайтов из "экземпляра" выше. (для тестов);
  • Sprites - Массив спрайтов.
Пример действия Use Sprite UV:


Массив спрайтов (Sprites) нужно заполнить самостоятельно объектами на которых есть компонент RTTSprite с правильно заданными значениями Region (X/Y). После этого запускаем сцену и получаем результат копирования с одного большого анимационного атласа на отдельные спрайты из массива Sprites.

Весь проект можно скачать на github

Комментариев нет:

Отправить комментарий