Ios 如何在SceneKit中添加带有类的基元
在SceneKit中上课很重要。然而,我无法让它工作 这是我的班级代码Ios 如何在SceneKit中添加带有类的基元,ios,swift,scenekit,arkit,Ios,Swift,Scenekit,Arkit,在SceneKit中上课很重要。然而,我无法让它工作 这是我的班级代码 import UIKit import SceneKit class Ship: SCNNode { override init(){ super.init() let box = SCNBox(width: 0.1, height: 0.1, length: 0.1, chamferRadius: 0) let node = SCNNode(geometry: box) }
import UIKit
import SceneKit
class Ship: SCNNode {
override init(){
super.init()
let box = SCNBox(width: 0.1, height: 0.1, length: 0.1, chamferRadius: 0)
let node = SCNNode(geometry: box)
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
这是我在ViewController中的代码(我正在使用ARKit)
我想我错过了一些基本的东西 SCNView的场景属性是可选属性。将最后一行更改为:
guard let scene = sceneView.scene else { return }
scene.rootNode.addChildNode(tempShip)
您可能尚未创建
SCNScene
并将其添加到视图中。至少在你发布的代码中没有这种迹象。你需要像这样的东西
sceneView.scene = SCNScene()
或者使用SCNScene
的init
方法之一创建它
然后,您将有一个可以挂起节点的场景。别忘了添加照明和照相机
另外:不要子类化
SCNNode
。改用扩展名。如果子类化SCNNode
或SCNScene
,则不能使用Xcode场景编辑器。请参阅。您应该会看到一条警告,提示您的节点变量未被使用,您需要在节点上设置几何图形。将init方法更改为:
override init(){
super.init()
let box = SCNBox(width: 0.1, height: 0.1, length: 0.1, chamferRadius: 0)
self.geometry = box
}
我无法让高德-莱特声明生效。是否有其他方法可以做到这一点?如果您使用ARKit的
ARSCNView
,则场景
属性不是可选的。
override init(){
super.init()
let box = SCNBox(width: 0.1, height: 0.1, length: 0.1, chamferRadius: 0)
self.geometry = box
}