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);