Как получить расстояние от контроллера мечты до заостренного игрового объекта в единстве?

Следуя примеру google-vr, мне удается добавить камеру и контроллер в свою сцену. Следующее, что мне нужно, это получить расстояние между моим контроллером и любым заостренным игровым объектом в сцене. После некоторого поиска я не могу найти ни учебника, ни информации о том, как получить расстояние.

Итак, есть ли какой-нибудь новейший рабочий учебник о том, как это сделать? (Многие учебники в Интернете устарели, поскольку Google так часто обновляет свой API) Или это на самом деле простая задача, т. Е. Я могу получить значение из GvrPointerInputModule.Pointer / GvrLaserPointer / какого-либо другого класса GVR? Заранее спасибо~


person Chlind    schedule 16.09.2018    source источник
comment
Насколько я помню, контроллер — это не объект в трехмерном пространстве, а больше похожий на курсор мыши, существующий в пространстве экрана. Таким образом, расстояние будет просто расстоянием от основной камеры до... всего, что пересекает ScreenPointToRay.   -  person Draco18s no longer trusts SE    schedule 17.09.2018


Ответы (2)


Вам нужно делать рейкасты с контроллера и измерять разницу между местом попадания и источником луча. Я думаю, что рейкасты Unity могут вернуть это встроенное расстояние.

person Adam B    schedule 17.09.2018

Как я и подозревал, ответ GvrLaserPointer. Если его CurrentRaycastResult.gameObject не равен нулю, то лазер с чем-то пересекается. Затем мы можем получить точку пересечения из CurrentRaycastResult.worldPosition. Используя эту точку, мы можем легко вычислить расстояние.

Примечание: на всякий случай, если у кого-то не получится с этим методом, как я раньше. Проверьте свою группу raycasting. Убедитесь, что ваши Raycaster Event Mask в GVRPointerPhysicsRaycaster включают только нужные слои. И если у вас есть холст в пространстве экрана, проверьте его Blocking Mask в Graphic Raycaster. По умолчанию это Everything, и ваш указатель может продолжать пересекаться с холстом, что приводит к «странной» точке пересечения. Это причина моей проблемы, и чтобы исправить это, я выбираю Nothing вместо Blocking Mask и вуаля.

person Chlind    schedule 26.09.2018