2017-07-10 3 views
1

SceneKitでクラスを作成することは重要です。しかし、私はそれを働かせることはできません。ここでクラスを持つプリミティブを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) 

私は基本的に何かをしないのですね。

答えて

0

SCNViewのシーンプロパティはオプションです。最後の行を変更します。

guard let scene = sceneView.scene else { return } 
scene.rootNode.addChildNode(tempShip) 
+0

私はgaurd letステートメントを動作させることができませんでした。私たちがこれを行うことができる別の方法がありますか? – ParalaxWobat

+1

ARKitから 'ARSCNView'を使用している場合、' scene'プロパティは**オプションではありません**。 – orangenkopf

1

おそらくSCNSceneを作成し、あなたのビューに追加されていません。あなたが投稿したコードに少なくともその兆候はありません。あなたは

sceneView.scene = SCNScene() 

のようなものを持っているか、 SCNSceneinitのいずれかの方法を使用して、それを作成する必要があります。

次に、ノードをハングアップできるシーンがあります。照明とカメラを追加することを忘れないでください。

また、SCNNodeをサブクラス化しないでください。代わりに拡張子を使用してください。 SCNNodeまたはSCNSceneをサブクラス化する場合、Xcodeシーンエディタを使用することはできません。 SceneKit editor set custom class for nodeを参照してください。

1

ノード変数が使用されていないという警告が表示されるはずです。ノードにジオメトリを設定する必要があります。あなたのinitメソッドを次のように変更してください:

override init(){ 
    super.init() 
    let box = SCNBox(width: 0.1, height: 0.1, length: 0.1, chamferRadius: 0) 
    self.geometry = box 
} 
関連する問題