我正在尝试将简单的3D对象添加到sceneView。向视图中添加对象非常简单,并且很顺利。但是,当我尝试添加主体以进行碰撞时(boxNode.physicsBody = boxBody),该多维数据集完全消失了,我再也找不到该多维数据集了。
我错过了什么?我在下面附上了我的代码。通过项目设置选择“ AR app”来生成项目的其余部分
import UIKit
import SceneKit
import ARKit
class ViewController: UIViewController, ARSCNViewDelegate, ARCoachingOverlayViewDelegate {
@IBOutlet var sceneView: ARSCNView!
let coachingOverlay = ARCoachingOverlayView()
override func viewDidLoad() {
super.viewDidLoad()
// Set the view's delegate
sceneView.delegate = self
// Show statistics such as fps and timing information
sceneView.showsStatistics = true
let box = SCNBox(width: 0.05, height: 0.05, length: 0.05, chamferRadius: 0)
let boxNode = SCNNode(geometry: box)
let boxBody = SCNPhysicsBody(type: .dynamic, shape: nil)
box.firstMaterial?.diffuse.contents = UIColor.red
boxNode.position = SCNVector3(0.1,0,0)
// boxBody.mass = 1
//// boxBody.categoryBitMask = CollisionBitmask.box.rawValue
boxNode.physicsBody = boxBody
// boxNode.rotation = SCNVector4Make(1, 1, 1, 1)
// boxNode.name = "box"
sceneView.scene.rootNode.addChildNode(boxNode)
let scene = SCNScene()
sceneView.scene = scene
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
// Create a session configuration
let configuration = ARWorldTrackingConfiguration()
// Run the view's session
sceneView.session.run(configuration)
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
// Pause the view's session
sceneView.session.pause()
}
// MARK: - ARSCNViewDelegate
/*
// Override to create and configure nodes for anchors added to the view's session.
func renderer(_ renderer: SCNSceneRenderer, nodeFor anchor: ARAnchor) -> SCNNode? {
let node = SCNNode()
return node
}
*/
func session(_ session: ARSession, didFailWithError error: Error) {
// Present an error message to the user
}
func sessionWasInterrupted(_ session: ARSession) {
// Inform the user that the session has been interrupted, for example, by presenting an overlay
}
func sessionInterruptionEnded(_ session: ARSession) {
// Reset tracking and/or remove existing anchors if consistent tracking is required
}
}
使用isAffectedByGravity实例属性来摆脱对象的重力:
var isAffectedByGravity: Bool { get set }
您需要false
值(默认值为true
):
let sphere = SCNSphere(radius: 1)
let node = SCNNode(geometry: sphere)
let physicsBody = SCNPhysicsBody(type: .dynamic, shape: nil)
node.physicsBody = physicsBody
physicsBody.isAffectedByGravity = false
sceneView.scene.rootNode.addChildNode(node)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句