Перейти к основному содержимому

Камеры

Камера решает, что видит посетитель и как он перемещается по сцене. Задайте ей режим управления, объектив и дополнительные виды, например мини-карту.

Режимы управления​

РежимПосетитель…
noneне может двигать камеру; её двигаете вы сами
orbitвращает камеру вокруг цели перетаскиванием и приближает колёсиком
flyсвободно летает с помощью клавиш и мыши
firstPersonосматривается с того места, где стоит; указатель захвачен
lockработает с захваченным указателем, а камера продолжает следовать за своим объектом
Для персонажа используйте lock

firstPerson отцепляет камеру от объекта. Для того, кто ходит вокруг модели, это нормально. А для персонажа не подходит: камера перестаёт следовать за телом.

lock тоже захватывает указатель, но оставляет камеру прикреплённой. Движение мыши получает ваш скрипт. Используйте этот режим для игры от первого лица.

Настройки орбиты​

orbit — режим по умолчанию, потому что он подходит для просмотра товаров. Настроек у него больше всего:

НастройкаЧто делает
targetточка, вокруг которой вращается камера
enableRotate · enablePan · enableZoomкакие жесты разрешены
minDistance · maxDistanceнасколько близко и далеко может подойти посетитель
minPolarAngle · maxPolarAngleнасколько высоко и низко можно отклониться
enableDamping · dampingFactorсколько камера скользит по инерции, когда её отпустили
autoRotate · autoRotateSpeedмедленное автоматическое вращение

Ограничивайте наклон почти в каждом просмотрщике товаров. Иначе посетитель может уйти под пол и увидеть сцену снизу, а это никогда не выглядит хорошо, какое бы ни было освещение.

Объектив​

  • fov — угол обзора в градусах. При 50 картинка выглядит естественно. Меньшие значения приближают и делают картинку более плоской. Большие показывают больше и выглядят эффектнее.
  • near и far задают диапазон, который рисуется. Всё, что ближе near или дальше far, обрезается.
Мерцающие поверхности

Когда far намного больше near, поверхности, стоящие близко друг к другу, начинают мерцать. Это называется z-fighting. Чтобы это исправить, сначала увеличьте near. Это помогает гораздо лучше, чем уменьшение far.

Настройки полёта​

В режиме fly посетитель двигается клавишами. Клавиши можно поменять или взять одну из именованных раскладок проекта. Скорость и множитель ускорения задают, как быстро движется камера. По умолчанию ускорение работает, пока зажат Shift.

Дополнительные виды​

Доп. вид камеры рисует вторую картинку с камеры поверх основной. Подходит для мини-карты, зеркала заднего вида или монитора наблюдения.

Добавьте его объекту, у которого уже есть камера, и выберите, куда рисовать:

  • screen — прямоугольник на экране. Его положение и размер задаются долями экрана.
  • texture — картинка, которую может показывать материал.

С texture можно собрать работающий монитор. Нарисуйте вид камеры в текстуру и положите эту текстуру на объект-экран в сцене. Экран будет показывать другую часть вашего мира.

Дополнительные виды рисуются после основной картинки, в том порядке, в котором вы их перечислили.

Каждый дополнительный вид рисует всю сцену заново

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

Переключение камер из скрипта​

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

ctx.camera.entity();
ctx.camera.setActive(securityCam);
ctx.camera.pose();

Где стоит камера, всегда решает её трансформация. Чтобы сдвинуть камеру, запишите в неё новое значение. В режимах orbit и firstPerson поворот задаёт сам режим управления, поэтому записанный вами поворот будет перезаписан. А записанное положение сохранится. Подробнее — в API ctx.

Если камерой управляет игровое управление, собственный режим управления этой камеры не учитывается. Иначе они мешали бы друг другу в каждом кадре.


Дальше: Префабы — как использовать группы объектов повторно и рисовать тысячи копий.