1

在 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)

}

required init?(coder aDecoder: NSCoder) {
    fatalError("init(coder:) has not been implemented")


  }
}

这是我在 ViewController 中的代码(我正在使用 ARKit)

   let tempShip = Ship()
    tempShip.position = SCNVector3(0.1,0.1,0.1)

    sceneView.scene.rootNode.addChildNode(tempShip)

我想我缺少一些基本的东西。

4

3 回答 3

1

您可能还没有创建一个SCNScene并将其添加到您的视图中。至少在您发布的代码中没有任何迹象。你需要有类似的东西

sceneView.scene = SCNScene()

或使用其中一种方法创建它SCNSceneinit

然后,您将拥有一个可以挂起您的节点的场景。不要忘记添加照明和相机。

另外:不要子类化SCNNode. 请改用扩展程序。如果您子类化SCNNode或者SCNScene您不能使用 Xcode 场景编辑器。请参阅SceneKit 编辑器为 node 设置自定义类

于 2017-07-10T17:25:07.463 回答
1

您应该看到一个警告,表明您的节点变量没有被使用,您需要在节点上设置几何图形。将您的 init 方法更改为:

override init(){
    super.init()
    let box = SCNBox(width: 0.1, height: 0.1, length: 0.1, chamferRadius: 0)
    self.geometry = box
}
于 2017-07-10T20:54:53.777 回答
0

SCNView 的场景属性是可选的。将最后一行更改为:

guard let scene = sceneView.scene else { return }
scene.rootNode.addChildNode(tempShip)
于 2017-07-10T14:58:03.530 回答