Как преобразовать позицию в начальную точку для приложения, используя Unity и ARKit? - PullRequest
0 голосов
/ 14 ноября 2018

Попытка разработать приложение AR. Когда приложение открыто, в этот момент местоположение устройства составляет (0,0,0), то есть, если я печатаю или отображаю свои координаты, оно будет (0,0,0).Я хочу создать отправную точку, как при входе в дверь. Когда другие пользователи, использующие мое приложение, могут открыть приложение в любом месте.

Я пытаюсь сделать так, чтобы у меня уже был AR при входе вdoor.Users открывают приложение в случайном положении, которое становится их отправной точкой, все объекты AR появятся. Когда они проходят через объект AR, я хочу, чтобы координаты их устройства были (0,0,0). Но если я запускаю нижекод в редакторе единства переводит камеру в положение, в котором запущено приложение. Я хочу преобразовать позицию входа в начальную точку приложения.

            Camera.main.transform.position=new Vector3(0,0,0);

Из того, что я понимаю, если мыизменить положение камеры в приложении, оно может показывать глюки

1 Ответ

0 голосов
/ 14 ноября 2018

Ваш вопрос очень неясен -.-

но ЕСЛИ вы пытаетесь сбросить камеру на (0,0,0), сохраняя все игровые объекты в одном и том же относительном положении к ней , вы можете попробовать:

    var localToCamera = Camera.main.transform.worldToLocalMatrix;
    var obj = GameObject.FindSceneObjectsOfType(typeof(GameObject));
    foreach (var o in obj)
    {
        var go = (o as GameObject);
        go.transform.FromMatrix(localToCamera * go.transform.localToWorldMatrix);
    }

_

EDIT:

что должен делать код UGLY выше: он будет сканировать все объекты GameObject и перемещать их таким образом, что если вы установите камеру в положение (0,0,0) и в сторону (0,0,1), они останутся в том же положении и ориентации относительно камера.

обратите внимание, что после выполнения этого кода сама камера БУДЕТ переставлена ​​в положение (0,0,0) и направлена ​​в сторону (0,0,1), поскольку

Camera.main.transform.worldToLocalMatrix * localToWorldMatrix == идентичность

РЕДАКТИРОВАТЬ :

Я не могу поместить этот код в комментарии, потому что он слишком длинный.

попробуйте

// code from the top of my head here, syntax or function names might not be exact
var forward = arcamera.transform.forward;
forward.y = 0;
arcamera.transform.rotation = Quaternion.LookDirection(forward);
// now the camera forward should be in the (x,z) plane
UnityARSessionNativeInterface.GetARSessionNativeInterface().SetWorldOrigin(arcamera.transform);
// since you did not tilt the horizontal plane, hopefully the plane detection still detected vertical and horizontal planes
...