IN THIS ARTICLE
Creating Collision Layers and Groups Programmatically
Retrieve layers and groups
You can retrieve instances of collision layers and groups
that you created in O3DE Editor as shown below. These methods perform a lookup of the layers defined in the PhysX Configuration tool. If no collision layer is found that matches the name, the default layer (0
) is returned.
CollisionLayer layer("MyLayer");
CollisionGroup group("MyGroup");
You can also use a request bus to look up layers and groups, as in the following code:
CollisionLayer layer;
CollisionRequestBus::BroadcastResult(layer, &Physics::CollisionRequests::GetCollisionLayerByName, layerName);
CollisionGroup group;
CollisionRequestBus::BroadcastResult(group, &Physics::CollisionRequests::GetCollisionGroupByName, groupName);
Create layers and groups
You can create collision layers and groups in code at runtime. This is useful in scenarios where you might not be able to predefine collision layers and groups, such as projects that generate assets procedurally at runtime.
The following example code creates a collision group at runtime that contains an Enemy
layer and a Tree
layer.
CollisionLayer layer1("Enemy"), layer2("Tree");
CollisionGroup group = AzFramework::Physics::CollisionGroup::None;
group.SetLayer(layer1, true);
group.SetLayer(layer2, true);
If all the layers required to construct the collision group are known, you can use overloaded operators, as in the following example:
CollisionGroup group = CollisionLayer("Layer1") | CollisionLayer("Layer2") | CollisionLayer("Layer3");