hololens setParent position изменяет объектив камеры

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

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

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

Однако, если вы построите гололены и запустите A.SetParent(B.Transform), позиция A будет 0, 0, 4.

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

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


person Bert Hu    schedule 17.10.2017    source источник


Ответы (2)


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

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

person Kelso Sharp    schedule 08.11.2017
comment
Спасибо за ваш ответ. Я не ставил камеру в детстве, я создал манекен, поставил манекен в детстве, а манекен как ориентир на расположение камеры. - person Bert Hu; 09.11.2017
comment
Но я все еще не понимаю. Это та же самая логика, но она отлично работает на камере Asus Zhenphone AR, но я не знаю, из-за чего она не работает должным образом на гололенс-камере. - person Bert Hu; 09.11.2017
comment
Hololens - совершенно другое животное, потому что ваше зрение при использовании не закрывается, поэтому камеры работают по-другому. По сути, это тот же ответ: основная камера всегда 0,0,0,0 - это мир, который движется, а не камера. Когда вы начинаете изменять положение основной камеры, вы фактически меняете положение точки обзора человека, которая, как ожидается, будет фиксированной точкой в ​​пространстве, вы не хотите перемещать ее при использовании гололены. - person Kelso Sharp; 22.11.2017

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

SetParent(Transform parent)

SetParent(Transform parent, bool worldPositionStays);

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

A.SetParent(B.Transform, false);
person Programmer    schedule 17.10.2017
comment
Спасибо за ответ. Но я сделал так, а результат был тот же. Он изменился на ту же позицию, что и родитель. - person Bert Hu; 17.10.2017
comment
Печально, что у меня нет гололенов, и я не могу воспроизвести эту проблему. Обычно проблема положения после вызова функции SetParent решается путем предоставления второго параметра. Измените свой вопрос, добавив снимок экрана с постоянно меняющимся значением камеры, возможно, кто-то сможет выяснить проблему. - person Programmer; 17.10.2017