Как реализовать взаимодействие с объектом в Unity Steam VR?

Хочу реализовать взаимодействие с телевизором в unity steam vr.
В interections_example взял кубик, который можно брать в руки и нельзя проходить с ним, держа в руке, сквозь стены. Захотел перенести все свойства с него на свой объект (телевизор), но появились проблемы с позой в который телевизор берется в руку (ее можно настроить передвигая объект throwable относительно телевизора) ,но она константная, а хотелось бы чтобы она соответствовала положению телевизора в данный момент времени.

Получилось реализовать телевизор, который не проходит сквозь стены с рукой, но меняет положение при взятии в руку, и который проходит сквозь стены с рукой, и при взятии в руку не меняет положение. Хочется совместить их вместе.
Вот ссылка на видео https://drive.google.com/file/d/1LWTu_JYxxnNXmXJF9...

Пожалуйста посоветуйте, статью или алгоритм действий.
  • Вопрос задан
  • 57 просмотров
Пригласить эксперта
Ответы на вопрос 1
DanceM
@DanceM Куратор тега Unity
Кто хочет -ищет способ, кто не хочет -ищет причину
Так а почему положение меняет? Что имеено происходит в тв при взятии в руку? Какие действия производит Steam VR, чтобы его двигать/взять? Ответив на этот вопрос будет ясно, как это обойти (никто ведь не запрещает править компоненты Steam VR).

Я со Steam VR давно работал, так что не знаю, как так сейчас всё устроено. Но скажем в Oculus в подобных ситуациях, я создаю свои, обходные пути.

Например, если при взятии в руку отключается физика объекта, игнорируется коллайдер объекта в руках, то его можно включить принудительно после своим скриптом. Но вероятно это поломает взаимодействие с другими компонентами, например, если на виртуальной руке есть коллайдеры, они начнут "бить" друг друга.

Тогда я вижу такой выход:
Cоздать вспомогательный объект для объекта (тв) в руках. Он будет родителем. У него будет свой коллайдер, что реагирует на физику окружения и на действие "взять".
Берем в руки - физика/коллайдер отключится SteamVR'ом, и в этот момент включаем другой, отключенный ранее коллайдер (и/или Rigidbody), на основном, дочерном объекте (на тв), что реагирует на физику окружения но НЕ на "руки" и команду "взять", не на SteamVR.
И включаем свой скрипт (или joint), что уберет родителя и будет двигать физикой объект (тв) за вспомогательным объектом (бывшим родителем) в руках. Тогда тв будет и на препятствия натыкаться, "уползать" из рук, и в тоже время следовать за позицией "в руках".
При отпускании объекта (тв) вспомогательный перемещается на позицию основного объекта (тв), копирует значения физики (ускорение), выключает у объекта (тв) его физику и становится родителем.
Как-то так. И я так делал когда-то в Окулусе, чтобы объект в руках оставался с физикой.

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

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы