首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将"SCNScene“转换为"SCNNode”

将"SCNScene“转换为"SCNNode”
EN

Stack Overflow用户
提问于 2017-10-21 12:00:09
回答 1查看 938关注 0票数 1

我正在为我的IT任务做一个ARKit应用程序,我遵循了一个比特掩蔽和碰撞指南,但是它只能在一个简单的框中工作,而不是我的3D模型,那么有什么方法可以将这段代码转换为底部的代码呢?还是我做错了什么?因为顶部的代码没有出现,但是底部的代码是这样的:

代码语言:javascript
复制
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")
    }
}

因为出于某种原因,这段代码可以工作,而最上面的代码不起作用,我是不是做错了什么?

代码语言:javascript
复制
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")
    }
}

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-24 10:55:37

用途:SCNReferenceNode

网站: 1:https://developer.apple.com/documentation/scenekit/scnreferencenode/

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46863004

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档