2017-08-18 48 views
0

我在場景套件中製作汽車,輪子似乎沉入地板。 我用蘋果代碼來製作它。當我使用他們的模型時,它工作正常。 當我使用我的它不。我無法弄清楚爲什麼會發生這種情況。下面是車輪下沉的圖片,代碼正下方。 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],以便您可以看到各種物理對象交互的邊界框。就我而言,我將地板的幾何形狀變成了一個非常寬的,長而薄的箱子形狀,而不是試圖使用內置的「地板」幾何形狀,因爲它只創建了一個用於碰撞相互作用的小立方體。

如果您想查看和竊取對調試有用的任何東西,我在github.com/heckj/scenekit-physics-playground的macOS操場上有一些示例代碼。