Форум

Gyroscope замораживает углы поворота character

01 февраля 2018 17:05
При активации HMD режима, или даже простого m_gyro.enable_camera_rotation(), у игрового персонажа углы поворота Эйлера становятся неизменяемыми, долго уже бьюсь над этой проблемой, не могу найти корень. Использовался FPS модуль, но даже при его отключении ситуация не меняется. Пробовал организовать loop_cb функцию чтобы принудительно менять углы чарактеру от положения камеры, но даже это не работает, углы не меняются и все, ни при каких условиях, стоит отключить m_gyro.disable_camera_rotation() и все становится нормально.

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

Поясню суть проекта - это обычная FPS бродилка по квартире с интерактивными элементами. Необходимо подключить возможность мобильного ВР с управлением через блютус джойстик. При включении ВР угол поворота персонажа замораживается и управление становится по сути ориентировано по сторонам света. Грубо говоря вместо вперед он идет всегда на север, вместо стрейфа в бок всегда на восток и так далее, не зависимо от угла поворота камеры игрока.

Подскажите как это исправить, возможно решение простое, но я его не могу увидеть.
05 февраля 2018 14:51
Здравствуйте!
В данный момент в движке существуют определенные архитектурные проблемы, связанные с установкой кватерниона поворота камеры на основе данных, полученных из различных устройств. Проще говоря, устройства могут конфликтовать. Мы обязательно займемся этой проблемой, но скорее всего фикс появится не к следующему релизу. А сейчас предлагаем вам локальный фикс в виде патча.
Александр (команда Blend4Web)
twitter
06 февраля 2018 13:02
Спасибо за фикс, попробую проверить его позже.

На данный момент смог решить проблему через следующую функцию:

                    function render_cb (){

                        var cam_rot = m_trans.get_rotation_euler(camera);           //Разворот персонажа в ВР режиме
                        m_phy.set_character_rotation_h(character, (cam_rot[2] - Math.PI));

                    };


То есть именно физический разворот персонажа в каждом кадре. Решение так себе, но пока работает.
 
Пожалуйста, зарегистрируйтесь или войдите под своей учетной записью , чтобы оставлять сообщения.