Перемещение мяча в комплекте сцены - Swift 5 - PullRequest
0 голосов
/ 18 апреля 2020

Я много копал, но, похоже, ответа на этот вопрос не хватает, но простите, если бы я искал во всех неправильных местах.

Я играюсь с создание приложения, созданного с использованием комплекта сцены, с полом и мячом, которые я бы хотел передвигать пальцем или использовать гироскопы встроенного устройства для его перемещения. Тем не менее, каждый найденный мной видеоурок или курс использует код, который теперь считается устаревшим, а код не распознается XCode.

Приведенный ниже код заставляет шарик катиться и перемещаться вправо при нажатии. , Как я мог свободно перемещать его с помощью прикосновения или с помощью устройства?

   import UIKit
    import QuartzCore
    import SceneKit
    import CoreMotion

class GameViewController: UIViewController {

    var sceneView:SCNView!
    var scene:SCNScene!
    var ballNode:SCNNode!
    var selfieStickNode:SCNNode!

    var motionForce = SCNVector3(0,0,0)

    override func viewDidLoad() {
      setupScene()
      setupNodes()
    }

    func setupScene() {

        sceneView = self.view as? SCNView
        sceneView.delegate = self
        //sceneView.allowsCameraControl = true
        scene = SCNScene(named: "art.scnassets/main.scn")
        sceneView.scene = scene

        let tapRegcognizer = UITapGestureRecognizer()
        tapRegcognizer.numberOfTapsRequired = 1
        tapRegcognizer.numberOfTouchesRequired = 1
        tapRegcognizer.addTarget(self, action: #selector(GameViewController.sceneViewTapped(recognizer:)))
        sceneView.addGestureRecognizer(tapRegcognizer)

    }

    func setupNodes() {

        ballNode = scene.rootNode.childNode(withName: "ball", recursively: true)!
        selfieStickNode = scene.rootNode.childNode(withName: "selfieStick", recursively: true)!

    }


    @objc func sceneViewTapped (recognizer:UITapGestureRecognizer) {

        ballNode.physicsBody?.applyForce(SCNVector3(x: 4, y:0, z: 0), asImpulse: true)

    }

    override var shouldAutorotate: Bool {
        return true
    }

    override var prefersStatusBarHidden: Bool {
        return true
    }

    override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
        if UIDevice.current.userInterfaceIdiom == .phone {
            return .allButUpsideDown
        } else {
            return .all
        }
    }

}

extension GameViewController : SCNSceneRendererDelegate {

    func renderer(_ renderer: SCNSceneRenderer, updateAtTime time: TimeInterval) {
        let ball = ballNode.presentation
        let ballPosition = ball.position

        let targetPosition = SCNVector3(x: ballPosition.x, y: ballPosition.y + 5, z:ballPosition.z + 5)
        var cameraPosition = selfieStickNode.position

        let camDamping: Float = 0.3

        let xComponent = cameraPosition.x * (1 - camDamping) + targetPosition.x * camDamping
        let yComponent = cameraPosition.y * (1 - camDamping) + targetPosition.y * camDamping
        let zComponent = cameraPosition.z * (1 - camDamping) + targetPosition.z * camDamping

        cameraPosition = SCNVector3(x: xComponent, y: yComponent, z: zComponent)
        selfieStickNode.position = cameraPosition

    }

}

Это то, что у меня сейчас есть:

enter image description here

Было бы очень полезно, если бы кто-то мог пролить свет на это, поскольку я чувствую, что там не хватает текущей информации!

Заранее спасибо!

...