Unigine.Plugins.IG.CollisionVolume Class
You should upgrade to
This class is used to manage collision volumes that are assigned to entities and used for collision detection.
A collision detection volume is a sphere or a cuboid through which collision testing is performed by the IG. When a collision detection volume passes through another collision volume, the IG registers a collision by sending the corresponding notification.
A volume is defined by specifying its location, size, and orientation with respect to the associated entity’s body coordinate system. A sphere’s size is specified as a radius; a cuboid’s size is specified by its width, height, and depth.
Unlike collision detection segments, which are tested segment-to-polygon, collision detection volumes are tested volume-to-volume. Volumes associated with the same entity are not tested against each other.
CollisionVolume Class
Properties
quat Rotation#
vec3 Position#
string Name#
bool Enabled#
Entity Entity#
int ID#
Members
void SetSize ( vec3 size ) #
Sets the size of the cuboid-shaped collision volume.Arguments
- vec3 size - Vector defining the size of the cuboid-shaped collision volume (depth, width, height). Each component is specified in meters.
void SetRadius ( float radius ) #
Sets the radius of the spherical collision volume.Arguments
- float radius - Radius of the spherical collision volume, in meters.
IntPtr AddOnCollisionDetectedCallback ( OnCollisionDetectedDelegate func ) #
Adds a callback function to be called when a collision with the collision volume is detected. This function can be used to define specific actions to be performed when a collision with the volume is detected. The signature of the callback function must be as follows:void(CollisionVolume v , ShapeContact contact, LongLong contacted_entity, int contacted_segment)
You can set a callback function as follows:
AddOnCollisionDetectedCallback((vol, cnt, entity, seg) => collision_callback_function_name(vol, cnt, entity, seg));
Example: Setting a collision detected callback for a collision volume of an entity
class SomeClass
{
/*...*/
/// callback function to be called when a collision with the collision volume is detected
private void on_position(CollisionVolume v , ShapeContact contact, LongLong contacted_entity, int contacted_segment)
{
// insert your code handling collision event here
}
private void RegisterCallback()
{
// adding "my_callback" to be called when a collision with the volume is detected
ig_manager.GetEntity(entity_id).GetCollisionVolume(volume_id).AddOnCollisionDetectedCallback((vol, cnt, entity, seg) => collision_callback_function_name(vol, cnt, entity, seg));
}
/*...*/
}
Arguments
- OnCollisionDetectedDelegate func - Callback function with the following signature: void OnCollisionDetectedDelegate(CollisionVolume v, ShapeContact contact, LongLong contacted_entity, int contacted_segment)
Return value
ID of the last added collision detected callback, if the callback was added successfully; otherwise, nullptr. This ID can be used to remove this callback when necessary.bool RemoveOnCollisionDetectedCallback ( IntPtr id ) #
Removes the specified callback from the list of collision detected callbacks.Arguments
- IntPtr id - Collision detected callback ID obtained when adding it.