This page has been translated automatically.
Video Tutorials
Interface
Essentials
Advanced
How To
Rendering
Professional (SIM)
UnigineEditor
Interface Overview
Assets Workflow
Version Control
Settings and Preferences
Working With Projects
Adjusting Node Parameters
Setting Up Materials
Setting Up Properties
Lighting
Sandworm
Using Editor Tools for Specific Tasks
Extending Editor Functionality
Built-in Node Types
Nodes
Objects
Effects
Decals
Light Sources
Geodetics
World Nodes
Sound Objects
Pathfinding Objects
Players
Programming
Fundamentals
Setting Up Development Environment
Usage Examples
C++
C#
UnigineScript
UUSL (Unified UNIGINE Shader Language)
Plugins
File Formats
Materials and Shaders
Rebuilding the Engine Tools
GUI
Double Precision Coordinates
API
Animations-Related Classes
Containers
Common Functionality
Controls-Related Classes
Engine-Related Classes
Filesystem Functionality
GUI-Related Classes
Math Functionality
Node-Related Classes
Objects-Related Classes
Networking Functionality
Pathfinding-Related Classes
Plugins-Related Classes
IG Plugin
CIGIConnector Plugin
Rendering-Related Classes
VR-Related Classes
Content Creation
Content Optimization
Materials
Material Nodes Library
Miscellaneous
Input
Math
Matrix
Textures
Art Samples
Tutorials

Unigine.Shape Class

This class creates collision shapes that approximate the finite volume of physical bodies and allow them to collide. Shapes are assigned to a body and are positioned in its local coordinates.

See Also
#

Shape Class

Enums

TYPE#

Types of collision shapes.
NameDescription
SHAPE_SPHERE = 0Sphere.
SHAPE_CAPSULE = 1Capsule.
SHAPE_CYLINDER = 2Cylinder.
SHAPE_BOX = 3Box.
SHAPE_CONVEX = 4Convex hull.
NUM_SHAPES = 5Number of shape types for the Particles Field Spacer.

Properties

bool IsIdentity#

The value indicating if the shape has a scale equal to 1 and no rotation.

mat4 BodyShapeTransform#

The transformation matrix of the shape (in the coordinates of the body). this matrix describes position and orientation of the shape. this method is identical to getShapeTransform().

mat4 Transform#

The transformation matrix of the shape (in world coordinates). this matrix describes position and orientation of the shape.

vec3 CenterOfMass#

The local coordinates of the center of mass of the shape.

mat3 Inertia#

The matrix that represents inertia tensor describing the resistance of the body to rotation in different directions. it is determined by the distribution of mass throughout the body volume.

float Volume#

The volume of the shape.

vec3 Area#

The areas of shape projections on three axes: x, y, and z.

float Restitution#

The restitution coefficient of the shape surface.

float Friction#

The friction coefficient for the shape surface.

float Density#

The current density of a shape.

float Mass#

The mass of the shape.
Notice
If g (Earth's gravity) equals to 9.8 m/s 2, and 1 unit equals to 1 m, the mass is measured in kilograms.

int ExclusionMask#

The bit mask that prevents collisions of the shape with other ones. this mask is independent of the collision mask. For shape with matching collision masks not to collide, at least one bit of their exclusion mask should match.

int CollisionMask#

The collision mask of the actor. two objects collide if they both have matching masks.see also details on additional collision exclusion mask.

int PhysicsIntersectionMask#

The physics intersection mask of the shape.

string Name#

The name of the shape.

bool Continuous#

The value indicating if continuous collision detection for spheres or capsules is enabled. Enabled CCD incurs almost no performance penalty. Disabling CCD allows to avoid physics artifacts, if there are any.

bool IsEnabledSelf#

The value indicating if the shape is enabled.

bool Enabled#

The value indicating if physical interactions with the shape are enabled.

Body Body#

The body, to which the shape belongs.

int Number#

The number of shape instances.

string TypeName#

The name of the shape type.

Shape.TYPE Type#

The type of the shape.

int ID#

The unique id of the shape.

vec3 Velocity#

The current velocity vector of the shape.

vec3 Position#

The current shape position, in world coordinates.

Members


int GetCollision ( ShapeContact[] OUT_contacts, float ifps ) #

Performs collision check for the shape and puts information on all contacts to the output buffer.

Collisions with the surface can be found only if the following conditions are fulfilled:

  1. The surface is enabled.
  2. Per-surface Collision flag is enabled.
  3. The surface has a material assigned.
Notice
The shape must be enabled.

Arguments

  • ShapeContact[] OUT_contacts - Output buffer containing information on all detected physical contacts for the shape (if any). Information on each contact can be handled via the ShapeContact class.
    Notice
    This output buffer is to be filled by the Engine as a result of executing the method.
  • float ifps - Inverse FPS value.

Return value

1 if collisions are found; otherwise, 0.

int GetCollision ( Object object, ShapeContact[] OUT_contacts, float ifps ) #

Performs collision check for the shape and puts information on all contacts and contact object to the output buffer.

Collisions with the surface can be found only if the following conditions are fulfilled:

  1. The surface is enabled.
  2. Per-surface Collision flag is enabled.
  3. The surface has a material assigned.
Notice
The shape must be enabled.

Arguments

  • Object object - Object to be ignored when detecting collisions. This parameter is used when it is necessary to ignore collisions of the shape with the object it belongs to.
  • ShapeContact[] OUT_contacts - Output buffer containing information on all detected physical contacts for the shape (if any). Information on each contact can be handled via the ShapeContact class.
    Notice
    This output buffer is to be filled by the Engine as a result of executing the method.
  • float ifps - Inverse FPS value.

Return value

1 if collisions are found; otherwise, 0.

int GetIntersection ( vec3 p0, vec3 p1, PhysicsIntersectionNormal intersection ) #

Performs tracing from the p0 point to the p1 point to find a shape intersected by this line. Intersection is found only for objects with a matching intersection mask.

Notice
World space coordinates are used for this function.

Arguments

Return value

1 if an intersection was detected; otherwise - 0.

int GetIntersection ( vec3 p0, vec3 p1, PhysicsIntersection intersection ) #

Performs tracing from the p0 point to the p1 point to find a shape intersected by this line. Intersection is found only for objects with a matching intersection mask.

Notice
World space coordinates are used for this function.

Usage Example

The following example shows how you can get the intersection information by using the PhysicsIntersection class. In this example the line is an invisible traced line from the point of the camera (vec3 p0) to the point of the mouse pointer (vec3 p1). It is supposed that you have a dynamic mesh with a body and a shape assigned. The executing sequence is the following:

  • Define and initialize two points (p0 and p1) by using the Player.getDirectionFromScreen() function.
  • Create an instance of the PhysicsIntersection class to get the information of the intersection point.
  • Check, if there is a intersection with a shape and save the result in the integer variable.
  • In this example, if there is an intersection of mouse direction with a shape, the PhysicsIntersection class instance gets the intersection point. The result is shown in the console.
Source code (C#)
/* ... */
// initialize points of the mouse direction
Vec3 p0, p1;

// get the current player (camera)
Player player = Game.Player;
if (player == null)
	return;

// get size (width and height) of the current application window
EngineWindow main_window = WindowManager.MainWindow;
if (!main_window)
	Engine.Quit();

ivec2 main_size = main_window.Size;

// get the current X and Y coordinates of the mouse pointer
int mouse_x = Input.MousePosition.x - main_window.Position.x;
int mouse_y = Input.MousePosition.y - main_window.Position.y;

// get the mouse direction from the player's position (p0) to the mouse cursor pointer (p1)
player.GetDirectionFromScreen(out p0, out p1, 0, 0, mouse_x, mouse_y, main_size.x, main_size.y);

// create the instance of the PhysicsIntersection object to save the information about the intersection
PhysicsIntersection intersection = new PhysicsIntersection();
// create an integer variable to check the result of intersection
int result = 0;
result = shape.GetIntersection(p0, p1, intersection);
// if there was an intersection, show the message in console
if (result != 0)
{
	Log.Message("Intersection point: ({0} {1} {2}) \n", intersection.Point.x, intersection.Point.y, intersection.Point.z);
}
/* ... */

Arguments

Return value

1 if an intersection was detected; otherwise - 0.

int GetIntersection ( vec3 p0, vec3 p1, vec3[] OUT_ret_point, vec3[] OUT_ret_normal ) #

Performs tracing from the p0 point to the p1 point to find a shape intersected by this line. Intersection is found only for objects with a matching intersection mask.

Notice
World space coordinates are used for this function.

Arguments

  • vec3 p0 - Start point of the line (in world coordinates).
  • vec3 p1 - End point of the line (in world coordinates).
  • vec3[] OUT_ret_point - Container to which contact point coordinates (if any) shall be put (in world coordinate system).
    Notice
    This output buffer is to be filled by the Engine as a result of executing the method.
  • vec3[] OUT_ret_normal - Container to which contact point normal coordinates (if any) shall be put (in world coordinate system).
    Notice
    This output buffer is to be filled by the Engine as a result of executing the method.

Return value

1 if an intersection was detected; otherwise - 0.

string GetTypeName ( int type ) #

Returns the name of a shape type with a given ID.

Arguments

  • int type - Shape type ID. One of the SHAPE_* values.

Return value

Shape type name.

void SetVelocity ( vec3 velocity, float ifps ) #

Sets a new velocity vector for the shape.

Arguments

  • vec3 velocity - Velocity vector, each component represents shape's velocity along the corresponding axis, in units per second.
  • float ifps - Inverse FPS value.

Shape Clone ( ) #

Clones the shape.

Return value

Copy of the shape.

void RenderVisualizer ( vec4 color ) #

Renders the shape.
Notice
You should enable the engine visualizer by the show_visualizer 1 console command.

Arguments

  • vec4 color - Color, in which the shape will be rendered.

bool SaveState ( Stream stream ) #

Saves the state of a given node into a binary stream.
  • If a node is a parent for other nodes, states of these child nodes need to be saved manually.
  • To save the state from a buffer, file or a message from a socket, make sure the stream is opened. For buffers and files, you also need to set the proper position for reading.

Example using saveState() and restoreState() methods:

Source code (C#)
// set the shape state
shape.Friction = 0.8f;

// save state
Blob blob_state = new Blob();
shape.SaveState(blob_state);

// change the state
shape.Friction = 0.4f;

// restore state
blob_state.SeekSet(0);        // returning the carriage to the start of the blob
shape.RestoreState(blob_state);

Arguments

  • Stream stream - Stream to save node state data.

Return value

true if the node state is saved successfully; otherwise, false.

int RestoreState ( Stream stream ) #

Restores the state of a given node from a binary stream.
  • If a node is a parent for other nodes, states of these child nodes need to be restored manually.
  • To save the state into a buffer, file or a message from a socket, make sure the stream is opened. If necessary, you can set a position for writing for buffers and files.

Example using saveState() and restoreState() methods:

Source code (C#)
// set the shape state
shape.Friction = 0.8f;

// save state
Blob blob_state = new Blob();
shape.SaveState(blob_state);

// change the state
shape.Friction = 0.4f;

// restore state
blob_state.SeekSet(0);        // returning the carriage to the start of the blob
shape.RestoreState(blob_state);

Arguments

  • Stream stream - Stream with saved node state data.

Return value

true if the node state is restored successfully; otherwise, false.

void Swap ( Shape shape ) #

Swaps the shapes saving the pointers.

Arguments

  • Shape shape - A shape to swap.

Shape CreateShape ( int type ) #

Creates a new shape of the specified type.

Arguments

  • int type - Body type. One of the SHAPE_* values.

Return value

New created shape instance.

Shape CreateShape ( string type_name ) #

Creates a new shape of the specified type.

Arguments

  • string type_name - Shape type name.

Return value

New created shape instance.

Shape.TYPE GetTypeID ( string type ) #

Arguments

  • string type

WorldBoundBox GetBoundBox ( ) #

WorldBoundSphere GetBoundSphere ( ) #

Last update: 2023-12-15
Build: ()