Камеры
Камера решает, что видит посетитель и как он перемещается по сцене. Задайте ей режим управления, объектив и дополнительные виды, например мини-карту.
Режимы управления
| Режим | Посетитель… |
|---|---|
none | не может двигать камеру; её двигаете вы сами |
orbit | вращает камеру вокруг цели перетаскиванием и приближает колёсиком |
fly | свободно летает с помощью клавиш и мыши |
firstPerson | осматривается с того места, где стоит; указатель захвачен |
lock | работает с захваченным указателем, а камера продолжает следовать за своим объектом |
lockfirstPerson отцепляет камеру от объекта. Для того, кто ходит вокруг модели, это нормально.
А для персонажа не подходит: камера перестаёт следовать за телом.
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.
Если камерой управляет игровое управление, собственный режим управления этой камеры не учитывается. Иначе они мешали бы друг другу в каждом кадре.
Дальше: Префабы — как использовать группы объектов повторно и рисовать тысячи копий.