2017-12-20 3 views
0

私はかつて幾何学的円錐をシーンに加えた関数を書きました。これは次のようになりました。シーンに3Dモデルを追加して特定のXYZ位置にするにはどうすればいいですか?

func addZombies(i:Int, x: Float, y: Float, z: Float) 
{ 
    let node = SCNNode() 
    node.geometry = SCNCone(topRadius: 0.0, bottomRadius: 1, height: 2) 
    node.position = SCNVector3(x, y, z) 
    sceneView.scene.rootNode.addChildNode(node) 

    nodes.append(node) 
} 

ノードはSCNNodesを格納する配列でした。すべてうまくいった。私が動いた場合、コーンは真の "現実"を持っていたように正確なポジションを取るでしょう。

しかし、私はゾンビの素晴らしい3Dモデルを購入し、モデルにコーンを変更しようとしました。私はある種の解決策を見つけ、それを自分で実装しようとしました。私は私と一緒に、ゾンビは、「移動」を移動した場合、それは、特定の位置でゾンビを作成していても、残念ながら

func addZombies(i:Int, x: Float, y: Float, z: Float) 
{ 
    guard let zombieScene = SCNScene(named: "art.scnassets/StrongZombie.DAE") else { return } 
    let zombieNode = SCNNode() 
    let zombieSceneChildNodes = zombieScene.rootNode.childNodes 

    for childNode in zombieSceneChildNodes 
    { 
     zombieNode.addChildNode(childNode) 
    } 

    zombieNode.position = SCNVector3(x, y, z) 
    zombieNode.scale = SCNVector3(0.5, 0.5, 0.5) 
    //zombieNode.look(at: (sceneView.pointOfView?.position)!) 
    sceneView.scene.rootNode.addChildNode(zombieNode) 

    nodes.append(zombieNode) 
} 

:これは私が思いついたものです。彼らは私のために望ましくない移動するカメラと関連して表示されます。誰か助けてくれますか?私はそれらをコーンのようにしたい。限られたコードスニペットを見ると、事前

答えて

0

でTHX ....

私はそれが元DAEファイルで近似されているデフォルトのphysicShapeとは何かを持っているかもしれないと思っています。形状が過度に複雑になり、トラッキングに問題が生じることがあります。

あなたはすでにそれを行っていない場合は物理学形状を表示するには、標準的な箱状に

let box = SCNBox(width:0.01, height: 0.01, length: 0.05, chamferRadius: 0.001) 

zombieNode.physicsBody = SCNPhysicsBody(type: .dynamic, shape: SCNPhysicsShape(geometry:box)) 

も設定debugOptionsをzombieNode physicBodyを設定してみてください。これは、衝突を起こしてデバッグを続けることにも役立ちます。代わりに、DAEファイルをロードするとのviewDidLoad、例えば、毎回あなたは、ゾンビを追加以前のプロパティ/変数にゾンビのノードを格納するのchildNodesをループの

sceneView.debugOptions = .showPhysicsShapes 
0

。次に、ゾンビを追加するたびに、そのゾンビノードの.cloneプロパティを使用して、代わりにルートノードの子ノードに追加します。

daeファイルにオブジェクトが1つしかない場合、その子ノードをループする必要はありません。childnodes.firstObjectを使用してください。

関連する問題