hololens setParent меняет положение объектива камеры

Я работаю над использованием Hololens Lens Toolkit Master. Проблема в том, что когда вы устанавливаете SetParent камеры объектива, положение объектива камеры становится таким же, как положение родительского элемента.

Например, если позиция A равна 0, 0, 0, а позиция B равна 0, 0, 4, то A.SetParent(B.Transform) сделает позицию А 0, 0, -4.

Это также верно для Unity Editor.

Тем не менее, если вы основываетесь на hololens и запускаете A.SetParent(B.Transform), позиция А будет 0, 0, 4.

Я понятия не имею, почему это происходит...

Я хочу 0, 0, -4!!

2 ответа

Решение

Вообще говоря, родительский объект основной камеры - это сама сцена, вы не можете подняться выше, поэтому родительский объект - это камера, если ваша камера не находится внутри другого игрового объекта. Также помните, что с Hololens камера находится в устойчивом положении, все остальное необходимо перемещать относительно камеры, а не наоборот.

Обновление: Таким образом, основная камера в приложениях hololens похожа на камеру персонажа в шутере от первого лица, однако это не камера, которая перемещает мир, и приложение не управляет основной камерой, в FPS вы управляете персонажем либо с контроллером, либо с клавиатурой. Разница здесь в том, что основная камера управляется гололинзой, 0,0,0,0 является фиксированной точкой основной камеры и никогда не изменяется, что происходит в том случае, если камеры обнаружения в гололинзе обновляют положение на основе процедур пространственного отображения в устройство, поэтому изменения в положении основной камеры будут иметь неожиданные результаты. Если вы хотите изменить точку зрения, я бы порекомендовал вам создать новую камеру и перенести вид на новую камеру и переместить эту камеру, а затем вернуться к основной камере, когда вы захотите переключить ее обратно. Эта новая камера не может быть дочерней по отношению к основной камере. Одно предостережение: я никогда не пробовал этого и предлагается в качестве возможного решения, я не знаю, сработает ли это или нет.

Есть две перегрузки для SetParent функция:

SetParent(Transform parent)

SetParent(Transform parent, bool worldPositionStays);

Первый использует true для параметра по умолчанию. Используйте вторую функцию и передайте false чтобы заставить объект использовать его положение местоположения при установке его родителя.

A.SetParent(B.Transform, false);
Другие вопросы по тегам