我正在为我的IT任务做一个ARKit应用程序,我遵循了一个比特掩蔽和碰撞指南,但是它只能在一个简单的框中工作,而不是我的3D模型,那么有什么方法可以将这段代码转换为底部的代码呢?还是我做错了什么?因为顶部的代码没有出现,但是底部的代码是这样的:
class Monster: SCNNode {
override init () {
super.init()
guard let virtualObjectScene = SCNScene(named: "Monster.scn", inDirectory: "art.scnassets" ) else {
return
}
let wrapperNode = SCNNode()
for child in virtualObjectScene.rootNode.childNodes {
child.geometry?.firstMaterial?.diffuse.contents = UIColor.black
wrapperNode.addChildNode(child)
}
wrapperNode.physicsBody = SCNPhysicsBody(type: SCNPhysicsBodyType.dynamic, shape: nil)
wrapperNode.physicsBody?.isAffectedByGravity = false
wrapperNode.physicsBody?.categoryBitMask = CollisionCategory.ship.rawValue
wrapperNode.physicsBody?.collisionBitMask = CollisionCategory.bullet.rawValue
wrapperNode.physicsBody?.contactTestBitMask = CollisionCategory.bullet.rawValue
wrapperNode.pivot = SCNMatrix4MakeRotation(Float(CGFloat(Double.pi/2)), 1, 0, 0)
print("Placing Monster")
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}因为出于某种原因,这段代码可以工作,而最上面的代码不起作用,我是不是做错了什么?
class Bullet: SCNNode {
override init () {
super.init()
let sphere = SCNSphere(radius: 0.025)
self.geometry = sphere
let shape = SCNPhysicsShape(geometry: sphere, options: nil)
self.physicsBody = SCNPhysicsBody(type: .dynamic, shape: shape)
self.physicsBody?.isAffectedByGravity = false
self.physicsBody?.categoryBitMask = CollisionCategory.bullet.rawValue
self.physicsBody?.collisionBitMask = CollisionCategory.ship.rawValue
// add texture
let material = SCNMaterial()
material.diffuse.contents = UIImage(named: "bullet_texture.jpg")
self.geometry?.materials = [material]
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}谢谢
发布于 2017-10-24 10:55:37
用途:SCNReferenceNode
网站: 1:https://developer.apple.com/documentation/scenekit/scnreferencenode/
用法:定义路径并将其用作引用节点
https://stackoverflow.com/questions/46863004
复制相似问题