如何解决克隆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
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。