车轮沉入地板 - Scenekit(IOS)

时间:2017-08-18 10:01:33

标签: swift scenekit

我正在使用scenekit开车,车轮似乎在地板上下沉。 我使用苹果代码来实现它。当我使用他们的模型时它工作正常。 但是当我使用我的时候没有。我无法弄清楚为什么会发生这种情况。下面是汽车轮子下沉的图片,代码就在它下面。enter image description here enter image description here

@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)
}

1 个答案:

答案 0 :(得分:0)

我正在处理一个类似的问题,并意识到添加SCNFloor并不一定能创建一个好的几何体来与PhysicsBody进行交互。

我建议添加sceneView.debugOptions = [.showPhysicsShapes],以便您可以看到各种物理对象的边界框进行交互。在我的情况下,我将地板几何形状设计成一个非常宽,长,薄的盒子形状,而不是试图使用内置的#34;地板#34;几何,它只为碰撞相互作用创建了一个微小的立方体。

如果你想查看并窃取任何对调试有用的内容,我在github.com/heckj/scenekit-physics-playground的macOS游乐场中提供了一些示例代码。