Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/105.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 转换;SCNScene“;至;SCNNode";_Ios_Swift_Xcode_Scenekit_Arkit - Fatal编程技术网

Ios 转换;SCNScene“;至;SCNNode";

Ios 转换;SCNScene“;至;SCNNode";,ios,swift,xcode,scenekit,arkit,Ios,Swift,Xcode,Scenekit,Arkit,我正在为我的IT任务做一个ARKit应用程序,我遵循了位屏蔽和碰撞指南,我让它工作了,但是它只适用于一个简单的盒子,而不适用于我的3D模型,所以有没有办法将此代码转换为底部的代码,或者我做错了什么?因为顶部代码不显示,而底部代码显示: class Monster: SCNNode { override init () { super.init() guard let virtualObjectScene = SCNScene(named: "Monster.s

我正在为我的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")
    }
}

谢谢

使用:
SCNReferenceNode

网站:[1]:


用法:定义路径并将其用作参考节点

尝试
self.addChildNode(wrapperNode)
,否则您实际上不会将其添加到monster节点。感谢@JamesP的回复,但我已经使用SCNrefrence节点解决了这个问题,它工作得很好。虽然此链接可能会回答这个问题,最好在这里包括答案的基本部分,并提供链接供参考。如果链接页面发生更改,则仅链接的答案可能无效。