我试着给modelEntity一个physicsBodyComponet,但它只是掉到了深处。

问题描述 投票:1回答:1

在现实世界中,我曾试着给modelEntity一个physicsBodyComponent。

但是当我把modelEntity放到现实世界中时,它就掉下来了。

有什么办法可以解决这个问题吗?

arkit realitykit
1个回答
0
投票

你需要用一个 PhysicsBodyComponent:

let floor = ModelEntity(mesh: .generateBox(size: [1000, 0, 1000]), materials: [SimpleMaterial()])
floor.generateCollisionShapes(recursive: true)
if let collisionComponent = floor.components[CollisionComponent] as? CollisionComponent {
    floor.components[PhysicsBodyComponent] = PhysicsBodyComponent(shapes: collisionComponent.shapes, mass: 0, material: nil, mode: .static)
    floor.components[ModelComponent] = nil // make the floor invisible
}
scene?.addChild(floor)

然后,当你加载你的实体时,你也给他们一个 PhysicsBodyComponent (他们需要一个非零的 mass否则他们无论如何都会失败,这也是我很久以来无法理解的)。)

var loadModelCancellable: AnyCancellable? = nil
loadModelCancellable = Entity.loadModelAsync(named: modelUri)
  .sink(receiveCompletion: { _ in
      loadModelCancellable?.cancel()
  }, receiveValue: { entity in
      entity.generateCollisionShapes(recursive: true)

      if let collisionComponent = entity.components[CollisionComponent] as? CollisionComponent {
          entity.components[PhysicsBodyComponent] = PhysicsBodyComponent(shapes: collisionComponent.shapes, mass: 1, material: nil, mode: .dynamic)
      }

      scene.addChild(entity)
      loadModelCancellable?.cancel()
  })

最后,在我的项目中添加物理学对于我想做的事情(只是防止模型重叠)有太多意想不到的后果,比如模型互相推挤,动作需要完全重做,......。所以我没能更进一步,但至少这应该能让你为你的模型添加物理,而不会因为重力而无限期地掉下去。

© www.soinside.com 2019 - 2024. All rights reserved.