1

我正在尝试从 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)
4

1 回答 1

1

使用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
}
于 2021-04-20T21:33:25.687 回答