Работа с реакторами¶
Реактор это любой объект взаимодействия в проекте, будь то модель, метка, текст и т.д. Все реакторы проекта добавляются в глобальный объект reactorController
,
с помощью которого можно получить доступ к любому реактору проекта. Ниже рассмотрены основные методы этого объекта.
Объект reactorController¶
Метод | Описание |
---|---|
getNumReactors() |
Возвращает кол-во реакторов в проекте. Вызов эквивалентен значению поля size объекта reactorController . |
getReactorById(id) |
Возвращает реактор по уникальному идентификатору. Идентификатор можно узнать в EV Toolbox, нажав на объект правой кнопкой мыши в панели реакторов. |
getReactorByName(name) |
Самый частоиспользуемый метод объекта reactorController , позволяет получить реактор по имени, которое отображается в панели объектов. |
addReactor(reactor) |
Добавляет созданный реактор в проект. |
removeReactor(reactorOrId, destroy) |
Удаляет указанный реактор из проекта. Параметры: reactorOrId - реактор, который вы хотите удалить, или его идентификатор. destroy - флаг, если установлен, то реактор будет также уничтожен. |
hasReactor(reactorOrId) |
Позволяет узнать есть ли указанный ректор в проекте. Параметры: reactorOrId - реактор или его идентификатор. |
Создание реакторов¶
Любой реактор может быть создан в скриптах вручную. Для этого используется глобальный объект reactorFactory
и его метод create
,
в который передаются два параметра - тип реактора и контекст реактора. Контекст реактора един для всех создаваемых реакторов и
представлен глобальной переменной reactorContext
, типы реакторов приведены ниже:
Реактор | Тип |
---|---|
AudioReactor | audio |
CameraManipulatorBaseReactor | camera_manipulator.multitouch |
CounterReactor | counter |
DistanceReactor | distance |
GroupNodeReactor | node.group |
HudReactor | node.hud |
ImageReactor | rect.image |
InteractiveDeviceBaseReactor | interactive_device_base |
IntersectorNodeReactor | node.intersector |
MarkerReactor | node.marker |
ModelReactor | node.model |
MouseReactor | mouse_device |
NodeReactor | node |
RectReactor | node.rect |
ScenarioChunkReactor | scenario.chunk |
SceneReactor | node.scene |
SwitchReactor | switch |
SystemReactor | system |
Text3dReactor | node.text3d |
TextReactor | rect.text |
TimerReactor | timer |
TrackingSystemReactor | trackingsystem |
TransformNodeReactor | node.transform |
VideoCaptureReactor | rect.vcap |
VideoReactor | rect.video |
ViewerReactor | viewer |
VRControllerReactor | vr_controller |
Рассмотрим пример создания реактора модели:
reactor = reactorFactory:create("node.model", reactorContext) -- создание реактора типа "Модель"
reactorController:addReactor(reactor) -- добавление реактора в объект reactorController, управляющий всеми реакторами
reactor:freeze() -- заморозка реактора для настройки его параметров
reactor.name = "model_logo"
reactor.model = resourceRepository:getResourceByName("ev_model.fbx") -- получения ресурса по имени
reactor.nodeMask = NodeReactor.Mask.VISIBLE -- маска узла, в данном случае видимая
reactor.rotate = osg.Vec3(90, 0, 0) -- вращение модели, в данном случае 90 градусов по оси X
reactor.trans = osg.Vec3(0, 0, 0) -- перемещение модели, в метрах
reactor:thaw()
reactor:configure() -- завершение конфигурации реактора
Как уже было описано ранее, глобальный объект reactorFactory
позволяет создать реактор указанного типа (в данном случае node.model
для реактора модели).
Вторым параметром идет глобальный объект reactorContext
, представляющий собой общий для всех реакторов контекст. Для настройки реактора используются методы
freeze()
, thaw()
и configure()
, обозначающие начало и конец настройки параметров реактора соотвественно. Между вызовами этих методов идет непосредственно
настройка параметров реактора. В данном случае мы устанавливаем имя реактора, Модель.Ресурс модели (ModelReactor.model), маску узла, Система координат.Вращение (TransformNodeReactor.rotate) и
Система координат.Перемещение (TransformNodeReactor.trans). Для установки модели используется еще один глобальный объект resourceRepository
и его метод
getReactorByName
, позволяющий получить любой ресурс проекта по его имени(подробнее см. работа с ресурсами).