2017-07-10 3 views
1

Faire une classe dans SceneKit est important. Cependant, je ne peux pas le faire fonctionner.Comment ajouter une primitive avec une classe dans SceneKit

Voici mon code de classe

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


    } 
} 

Et voici mon code dans le ViewController (j'utilise Arkit)

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

    sceneView.scene.rootNode.addChildNode(tempShip) 

Je pense que je manque quelque chose de fondamental.

Répondre

0

La propriété de scène SCNView est facultative. Modifier la dernière ligne:

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

Je ne pouvais pas obtenir l'instruction gaurd let pour fonctionner. Existe-t-il une autre façon de le faire? – ParalaxWobat

+1

Si vous utilisez ARSCNView depuis ARKit, la propriété 'scene' n'est pas ** facultative. – orangenkopf

1

Vous avez probablement pas créé un SCNScene et ajouté à votre point de vue. Au moins, il n'y a aucun signe de cela dans le code que vous avez posté. Vous devez avoir quelque chose comme

sceneView.scene = SCNScene() 

ou créer en utilisant l'une des méthodes init de SCNScene.

Ensuite, vous aurez une scène sur laquelle vous pouvez accrocher votre noeud. Ne pas oublier d'ajouter l'éclairage et l'appareil photo.

En outre: ne pas sous-classe SCNNode. Utilisez une extension à la place. Si vous sous-classez SCNNode ou SCNScene, vous ne pouvez pas utiliser l'éditeur de scène Xcode. Voir SceneKit editor set custom class for node.

1

Vous devriez voir un avertissement que votre variable de noeud n'est pas utilisée, vous devez définir la géométrie sur le noeud. Modifiez votre méthode init à ceci:

override init(){ 
    super.init() 
    let box = SCNBox(width: 0.1, height: 0.1, length: 0.1, chamferRadius: 0) 
    self.geometry = box 
}