首页 > 解决方案 > 克隆 SCNNode 子类

问题描述

我有一个SCNNode子类名称Model3D。它添加了一些属性,在克隆节点时应将其传递给新实例。这更像是这样的:

public class Model3D: SCNNode {
...
    private var modelURL: URL!

    private override init() {
        super.init()
    }

    override final public func clone() -> Self {
        let clone = super.clone() as! Self
        clone.modelURL = modelURL
        return clone
    }
...
}

这通常有效,但有时会在let clone = super.clone() as! Self. 我不知道为什么。这应该总是有效的,但也许我错过了一些东西。任何人都知道为什么会发生这种情况,为什么很少发生?这就是我首先初始化这个对象的方式:

public required init?(modelURL: URL) {
    super.init()
    guard let scnNode = Self.loadModel(fromURL: modelURL) else { return nil }
    self.modelURL = modelURL
    self.castsShadow = false // Shadows can be enabled by configuration
    addChildNode(scnNode)
}

class func loadModel(fromURL url: URL) -> SCNNode? {        
    guard let rootNode = SCNReferenceNode(url: url) else { return nil }
    rootNode.load() 
    return rootNode
}

标签: iosswiftscenekitarkit

解决方案


推荐阅读