iOS RealityKit : получите мировое положение размещенного объекта из центра экрана raycast

#swift #arkit #realitykit

Вопрос:

Используя raycast и жест касания, я успешно разместил несколько объектов (сущность и якоря) в своем arview .

Теперь я пытаюсь получить entity то, что ближе всего к США, используя центр экрана, чтобы разместить объект рядом с ним. Таким образом, мы можем представить, что каждый раз, когда якорь находится близко к центру экрана телефона, «появляется»новый объект

Для этого я пытаюсь использовать raycast , но мой код :

 
    func session(_ session: ARSession, didUpdate frame: ARFrame) {
     // 
        if let hitEntity = arView.entity(
                at: self.arView.center
        ) {
            print("hitEntity IS FOUND !")
            print(hitEntity.name) // this is the object I previously placed

            guard let result = arView.raycast(from: self.arView.center, allowing: .estimatedPlane, alignment: .any).first else { return }

           // here result is the surface behind/below the object, and not the object I want 
            return;

         }
     
    }

 

result триггер на поверхности, но мне не удается получить преобразование мира объекта (сущности), а не поверхности позади.

У тебя есть идея ?

Спасибо

Ответ №1:

Чтобы получить мировую форму сущности, вы можете позвонить hitEntity.position(relativeTo: nil) .

Если я неправильно понимаю ваш вопрос, это тоже может помочь:

Чтобы получить положение result относительно локального пространства объекта, вы можете позвонить hitEntity.convert(position: result.worldTransform, from: nil)

Преобразование-это очень полезный метод в RealityKit. Существует несколько различных методов, но вот документация для того, который я добавил выше:
https://developer.apple.com/documentation/realitykit/hastransform/3244194-convert/


Я надеюсь, что один из них поможет вам!