Я много копал, но, похоже, ответа на этот вопрос не хватает, но простите, если бы я искал во всех неправильных местах.
Я играюсь с создание приложения, созданного с использованием комплекта сцены, с полом и мячом, которые я бы хотел передвигать пальцем или использовать гироскопы встроенного устройства для его перемещения. Тем не менее, каждый найденный мной видеоурок или курс использует код, который теперь считается устаревшим, а код не распознается 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](https://i.stack.imgur.com/0dekg.png)
Было бы очень полезно, если бы кто-то мог пролить свет на это, поскольку я чувствую, что там не хватает текущей информации!
Заранее спасибо!