Я пробовал дать физикуBodyComp onet для modelEntity, и он просто падает глубоко вниз - PullRequest
2 голосов
/ 27 мая 2020
• 1000 исправить это?

1 Ответ

1 голос
/ 29 мая 2020

Вам нужно создать этаж меня sh с 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 (и им нужен не -zero 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()
  })

В конце концов, добавление физики в мой проект имело слишком много непредвиденных последствий для того, что я пытался сделать (просто предотвращая перекрытие моделей), например, модели, толкающие друг друга, и движения, которые нужно было полностью переделать, ... Так что я не пошел дальше этого, но, по крайней мере, это должно позволить вам добавить физику в свой модели без их неограниченного падения под действием силы тяжести.

...