Опыт от первого лица в RealityKit

Я новичок в Swift и только начал играть с RealityKit и ARKit. Я работаю над личным проектом, в котором я хотел бы, чтобы 3D-объект приклеился к камере от первого лица. Подобно AR Angry birds или любой другой игре FPS. Я видел несколько примеров в SceneKit или SpriteKit, я уверен, что это просто неправильное понимание того, как работает привязка сущностей.

Мой главный вопрос:

  • Как мне прикрепить объект реальности, созданный в Reality Composer, к камере от первого лица? Я хочу создать сцену реальности, в данном случае ручную пушку, и при нажатии на нее выстреливает.

Ниже приведен код моего ViewController.

extension ViewController: ARSessionDelegate
{
    func session(_ session: ARSession, didUpdate frame: ARFrame)
    {
          guard let arCamera = session.currentFrame?.camera else { return }
          // Probably where I update the location of my reality experience
    }
}

class ViewController: UIViewController
{
    @IBOutlet var arView: ARView!

    override func viewDidLoad()
    {
        super.viewDidLoad()
        arView.session.delegate = self

        // Load the "ArmCannon" scene from the "Experience" Reality File
        let armCannonAnim = try! Experience.loadArmcannon()

        // Create Anchor to anchor arm cannon to
        let anchor = AnchorEntity(.camera)
        anchor.transform = arView.cameraTransform

        // Add the anchor to the scene
        arView.scene.addAnchor(anchor)

        // Setup tap gesture on arm cannon
        let tapGesture = UITapGestureRecognizer(target: self, action:#selector(onTap))
        arView.addGestureRecognizer(tapGesture)

        // Add the the cannon animation to arView
        arView.scene.anchors.append(armCannonAnim)

    }

    @IBAction func onTap(_ sender: UITapGestureRecognizer)
    {

        let tapLocation = sender.location(in: arView)

        // Get the entity at the location we've tapped, if one exists
        if let cannonFiring = arView.entity(at: tapLocation)
        {
            print(cannonFiring.name)
            print("firing Cannon")
        }
    }
}

Я просмотрел и прочитал Отслеживание положения камеры с помощью RealityKit и Где находится AnchorEntity .camera?


person Jav Solo    schedule 29.03.2020    source источник
comment
Вы хотите исправить положение пушек как положение камеры?   -  person Abdul Karim Khan    schedule 29.03.2020
comment
Это правильно   -  person Jav Solo    schedule 29.03.2020


Ответы (1)


Вместо того:

arView.scene.anchors.append(armCannonAnim)

положил:

anchor.addChild(armCannonAnim)

Вам нужно, чтобы этот armCannonAnim был дочерним по отношению к камере, а объект anchor был якорем при преобразовании камеры. Это эквивалентно добавлению дочернего элемента в cameraNode в SceneKit.

person maxxfrazer    schedule 30.03.2020
comment
К сожалению, это не сработало. Реальная сцена вообще не загружается. - person Jav Solo; 31.03.2020