在 RealityKit 中对 USDZ 模型应用物理学
Applying Physics on USDZ model in RealityKit
我正在尝试从 USDZ 文件加载实体,然后将物理应用于其 ModelEntity
我使用的是 Apple 图库中的 toy_robot_vintage 模型。它包含一个我想使用的动画,因此我正在加载 Entity
。我想通了,我不能向 Entity
添加物理,因为它不符合 HasPhysicsBody
,所以我得到 vintage_robot_animRig_model_body
并在其上应用 PhysicsBodyComponent
。但是,它不起作用。我应该将物理学应用于哪个 ModelEntity
以及如何将物理学应用于层次结构中的不同 ModelEntity
应该反映在我的模型上?
我也尝试添加一个符合协议的自定义Entity
子类,但是在我创建一个对象后,我没有看到它符合它。
这是我目前拥有的:
let modelEntity = robotEntity.findEntity(named: "vintage_robot_animRig_model_body")
let physics = PhysicsBodyComponent(massProperties: .default, material: .default, mode: .dynamic)
modelEntity?.components.set(physics)
使用generateCollisionShapes()实例方法激活物理和运行碰撞检测:
func makeUIView(context: Context) -> ARView {
let arView = ARView(frame: .zero)
let robot = try! Entity.loadAnchor(named: "robot")
robot.scale = [0.03, 0.03, 0.03]
let headEntity = robot.findEntity(named: "vintage_robot_animRig_model_head")
robot.generateCollisionShapes(recursive: true)
let physics = PhysicsBodyComponent(massProperties: .default,
material: .default,
mode: .dynamic)
headEntity?.components.set(physics)
arView.scene.anchors.append(robot)
return arView
}
我正在尝试从 USDZ 文件加载实体,然后将物理应用于其 ModelEntity
我使用的是 Apple 图库中的 toy_robot_vintage 模型。它包含一个我想使用的动画,因此我正在加载 Entity
。我想通了,我不能向 Entity
添加物理,因为它不符合 HasPhysicsBody
,所以我得到 vintage_robot_animRig_model_body
并在其上应用 PhysicsBodyComponent
。但是,它不起作用。我应该将物理学应用于哪个 ModelEntity
以及如何将物理学应用于层次结构中的不同 ModelEntity
应该反映在我的模型上?
我也尝试添加一个符合协议的自定义Entity
子类,但是在我创建一个对象后,我没有看到它符合它。
这是我目前拥有的:
let modelEntity = robotEntity.findEntity(named: "vintage_robot_animRig_model_body")
let physics = PhysicsBodyComponent(massProperties: .default, material: .default, mode: .dynamic)
modelEntity?.components.set(physics)
使用generateCollisionShapes()实例方法激活物理和运行碰撞检测:
func makeUIView(context: Context) -> ARView {
let arView = ARView(frame: .zero)
let robot = try! Entity.loadAnchor(named: "robot")
robot.scale = [0.03, 0.03, 0.03]
let headEntity = robot.findEntity(named: "vintage_robot_animRig_model_head")
robot.generateCollisionShapes(recursive: true)
let physics = PhysicsBodyComponent(massProperties: .default,
material: .default,
mode: .dynamic)
headEntity?.components.set(physics)
arView.scene.anchors.append(robot)
return arView
}