本文内容
Creating Collision Layers and Groups Programmatically
检索图层和组
您可以检索
您在 O3DE 编辑器中创建的 的碰撞层和组的实例,如下所示。这些方法将执行在 PhysX Configuration (PhysX 配置) 工具中定义的图层的查找。如果未找到与名称匹配的碰撞层,则返回默认层 (0
)。
CollisionLayer layer("MyLayer");
CollisionGroup group("MyGroup");
您还可以使用请求总线来查找层和组,如以下代码所示:
CollisionLayer layer;
CollisionRequestBus::BroadcastResult(layer, &Physics::CollisionRequests::GetCollisionLayerByName, layerName);
CollisionGroup group;
CollisionRequestBus::BroadcastResult(group, &Physics::CollisionRequests::GetCollisionGroupByName, groupName);
创建图层和组
您可以在运行时在代码中创建碰撞层和组。这在您可能无法预定义碰撞图层和组的情况下非常有用,例如在运行时按程序生成资产的项目。
以下示例代码在运行时创建一个碰撞组,其中包含一个 Enemy
层和一个 Tree
层。
CollisionLayer layer1("Enemy"), layer2("Tree");
CollisionGroup group = AzFramework::Physics::CollisionGroup::None;
group.SetLayer(layer1, true);
group.SetLayer(layer2, true);
如果构造碰撞组所需的所有层都是已知的,则可以使用重载运算符,如以下示例所示:
CollisionGroup group = CollisionLayer("Layer1") | CollisionLayer("Layer2") | CollisionLayer("Layer3");