Используйте следующий код для создания пользовательского класса Physics
, который соответствует физическим протоколам RealityKit (для управления массой, скоростью и режимом кинематики / динамики).
Вот как выглядит соответствующая иерархия физических протоколов:
HasPhysics: HasPhysicsBody, HasPhysicsMotion
|
|- HasCollision: HasTransform
Вот код:
import ARKit
import RealityKit
class Physics: Entity, HasPhysicsBody, HasPhysicsMotion {
required init() {
super.init()
self.physicsBody = PhysicsBodyComponent(massProperties: .default,
material: nil,
mode: .kinematic)
self.physicsMotion = PhysicsMotionComponent(linearVelocity: [0.1, 0, 0],
angularVelocity: [1, 3, 5])
}
}
Затем создайте экземпляр этого класса в ViewController:
class ViewController: UIViewController {
@IBOutlet var arView: ARView!
override func viewDidLoad() {
super.viewDidLoad()
let physics = Physics()
arView.backgroundColor = .darkGray
let boxAnchor = try! Experience.loadBox()
boxAnchor.steelBox?.scale = [5, 5, 5]
let boxEntity = boxAnchor.children[0].children[0].children[0]
boxEntity.name = "CUBE"
print(boxEntity)
let kinematicComponent: PhysicsBodyComponent = physics.physicsBody!
let motionComponent: PhysicsMotionComponent = physics.physicsMotion!
boxEntity.components.set(kinematicComponent)
boxEntity.components.set(motionComponent)
arView.scene.anchors.append(boxAnchor)
}
}
Кроме того, посмотрите ЭТО ПОЧТА , чтобы узнать, как реализовать физику без пользовательского Physics
класса.