2017-08-18 6 views
0

私はシーンキットで車を作っており、車輪は床に沈むようです。 私はそれを作るためにAppleのコードを使用しました。彼らのモデルを使用するとうまく動作します。 しかし、私は私が私を使用していません。私はそれがなぜ起こっているのか理解できません。車輪が沈んでいる写真があり、そのコードがその下にあります。 enter image description hereenter image description here床に車輪が沈む - Scenekit(IOS)

@IBAction func AddFloor(_ sender: Any) { 
    let floor = SCNNode() 
    let floorGeom = SCNFloor() 
    floorGeom.firstMaterial?.diffuse.contents = "concrete.png" 

    floor.geometry = floorGeom 
    let staticBody = SCNPhysicsBody.static() 
    floor.physicsBody = staticBody 

    floor.position = SCNVector3(0, -10, 0) 

    sceneView.scene.rootNode.addChildNode(floor) 
} 


@IBAction func AddCar(_ sender: Any) { 
    let chassisNode = getNode("rccarBody", fromDaePath: "Models.scnassets/rc_car.scn") 
    let wheelnode0 = chassisNode 
     .childNode(withName: "wheelFrontL", recursively: false) 
    let wheelnode1 = chassisNode 
     .childNode(withName: "wheelFrontR1", recursively: false) 
    let wheelnode2 = chassisNode 
     .childNode(withName: "wheelRearL", recursively: false) 
    let wheelnode3 = chassisNode 
     .childNode(withName: "wheelRearR", recursively: false) 


    let body = SCNPhysicsBody.dynamic() 
    body.allowsResting = false 
    body.mass = 80 
    body.restitution = 0.1 
    body.friction = 0.5 
    body.rollingFriction = 0 
    chassisNode.physicsBody = body 
    sceneView.scene.rootNode.addChildNode(chassisNode) 



    // add wheels 
    let wheel0 = SCNPhysicsVehicleWheel(node: wheelnode0!) 
    let wheel1 = SCNPhysicsVehicleWheel(node: wheelnode1!) 
    let wheel2 = SCNPhysicsVehicleWheel(node: wheelnode2!) 
    let wheel3 = SCNPhysicsVehicleWheel(node: wheelnode3!) 
    // set physics 
    vehicle = SCNPhysicsVehicle(chassisBody: chassisNode.physicsBody!, 
           wheels: [wheel1, wheel0, wheel3,wheel2 ]) 
    chassisNode.position = SCNVector3(0,-8,0) 

    sceneView.scene.physicsWorld.addBehavior(vehicle) 
} 

答えて

0

私は同様の問題に取り組んで、そしてSCNFloorを追加することがnecesarily PhysicsBodyなどと対話するための良いジオメトリを作成していないことに気づきました。

sceneView.debugOptions = [.showPhysicsShapes]を追加して、さまざまな物理オブジェクトのバウンディングボックスが相互作用することを確認することをお勧めします。私の場合、私は、床の幾何学的構造を、衝突の相互作用のための小さな立方体だけを作り出した組み込みの「床」ジオメトリを使用しようとするよりも、非常に幅広く、長く、薄い箱形にしました。

デバッグに役立つ情報を表示して盗もうとする場合は、macOSプレイグラウンドのサンプルコードがgithub.com/heckj/scenekit-physics-playgroundにあります。

関連する問題