All pages
Powered by GitBook
1 of 1

Loading...

SRigidbody

Index

Functions Index

Function Name

Properties Index

Property Name

Functions

AddExplosionForce

void AddExplosionForce (float explosionForce, explosionPosition, float explosionRadius, float upwardsModifier)

Applies a force to a rigidbody that simulates explosion effects. Other rigidbodies will be affected by the explosion within its radius - the closer they are to the explosionPosition, the stronger the force will be exerted on them.

Parameter
Type
Description

AddForce

void AddForce ( force)

Adds a force to the Rigidbody that is continuously exerted on it in the given direction.

Parameter
Type
Description

AddForceAtPosition

void AddForceAtPosition ( force, position)

Adds a force to the Rigidbody at a given position (should be within the range of the rigidbody for a realistic result). Thus, both a torque and force are applied to the object.

Parameter
Type
Description

AddRelativeTorque

void AddRelativeTorque ( torque)

Adds a torque to the rigidbody relative to the local coordinate system.

Parameter
Type
Description

AddTorque

void AddTorque ( torque)

Adds a torque to the rigidbody relative to the global coordinate system.

Parameter
Type
Description

ClosestPointOnBounds

ClosestPointOnBounds ( input)

Returns the closest point on the bounding box of the attached colliders.

Parameter
Type
Description

GetPointVelocity

GetPointVelocity ( worldPoint)

Function Description

Parameter
Type
Description

GetRelativePointVelocity

GetRelativePointVelocity ( point)

Function Description

Parameter
Type
Description

MovePosition

void MovePosition ( point)

Moves the rigidbody to position.

Parameter
Type
Description

MoveRotation

void MoveRotation ( rotation)

Rotates the rigidbody to rotation.

Parameter
Type
Description

ResetCenterOfMass

void ResetCenterOfMass ()

Reset the center of mass of the rigidbody.

ResetIntertiaTensor

void ResetIntertiaTensor ()

Reset the inertia tensor value and rotation.

Sleep

void Sleep ()

Forces a rigidbody to sleep.

WakeUp

void WakeUp ()

Forces a rigidbody to wake up.

SweepTestAll

[] SweepTestAll ( direction, float distance)

Like Rigidbody.SweepTest, but returns all hits.

Parameter
Type
Description

Properties

AngularDrag

float AngularDrag get set

The angular drag of the object.

AngularVelocity

AngularVelocity get set

The angular velocity vector of the rigidbody (in radians per second).

CenterOfMass

CenterOfMass get set

The center of mass relative to the local origin.

Drag

float Drag get set

The drag of the object.

FreezeRotation

bool FreezeRotation get set

Controls whether physics will have any impact on the rotation of the object.

Kinematic

bool Kinematic get set

Controls whether physics will have any impact on the object.

Mass

float Mass get set

The mass of the rigidbody.

MaxAngularVelocity

float MaxAngularVelocity get set

The maximum angular velocity of the rigidbody (7 by default). Can be useful to prevent an object from spinning uncontrollably fast.

MaxDepenetrationVelocity

float MaxDepenetrationVelocity get set

The maximum depenetration velocity of the rigidbody (1.00000003318135E+32 by default). Can be useful to make colliding objects bounce away in a smoother fashion.

UseGravity

bool UseGravity get set

Controls whether gravity affects the rigidbody.

Velocity

Velocity get set

The velocity vector of the rigidbody. (in units per second).

WorldCenterOfMass

WorldCenterOfMass get

The center of mass of the rigidbody relative to the global origin (Read Only).

Sleeping

bool Sleeping get

Is the rigidbody sleeping?

Density

float Density set

The density of the object (1 by default). Changing this value will affect the mass of the object (the volume will remain unchanged).

InertiaTensor

InertiaTensor get set

The diagonal inertia tensor of mass relative to the center of mass. It is defined in x,y,z axis. It is calculate by physics automatically,and if you set value to it, it would override the value.

InertiaTensorRotation

InertiaTensorRotation get set

The rotation of the inertia tensor.

GameObject

GameObject get

Property Description

void ()

void ()

SPhysicsHit[] (SVector direction, float distance)

SVector get set

SVector get

bool get

float set

SVector get set

SQuaternion get set

SGameObject get

void AddExplosionForce (float explosionForce, SVector explosionPosition, float explosionRadius, float upwardsModifier)

void AddForce (SVector force)

void AddForceAtPosition (SVector force, SVector position)

void AddRelativeTorque (SVector torque)

void AddTorque (SVector torque)

SVector ClosestPointOnBounds (SVector input)

SVector GetPointVelocity (SVector worldPoint)

SVector GetRelativePointVelocity (SVector point)

void MovePosition (SVector point)

void MoveRotation (SQuaternion rotation)

void ResetCenterOfMass ()

float AngularDrag get set

SVector AngularVelocity get set

SVector CenterOfMass get set

float Drag get set

bool FreezeRotation get set

bool Kinematic get set

float Mass get set

float MaxAngularVelocity get set

float MaxDepenetrationVelocity get set

SVector
SVector
SVector
SVector
SVector
SVector
SVector
SVector
SVector
SVector
SVector
SVector
SVector
SQuaternion
SPhysicsHit
SVector
SVector
SVector
SVector
SVector
SVector
SQuaternion
SGameObject

void ()

bool get set

Space.Host.ExecutingObject.Rigidbody.AddExplosionForce (300, Vector.New(0,0,0), 10, 20)
local obj = Space.Host.ExecutingObject;

obj.Rigidbody.AddExplosionForce (300, obj.WorldPosition, 10, 20)
-- The explosion will occur at the location of the ExecutingObject.
-- Place other rigidbodies around it to observe the effect!
Space.Host.ExecutingObject.Rigidbody.AddForce(Vector.New(0,1,0))
local obj = Space.Host.ExecutingObject;

obj.Rigidbody.AddForce (Vector.New(0,100,0));
-- Now the rigidbody is under a continuous force directed upwards (Y direction)
Space.Host.ExecutingObject.Rigidbody.AddForceAtPosition(Vector.New(1,1,1), Vector.New(0,1,0))
local obj = Space.Host.ExecutingObject;
local applyForceHere = Vector.New(obj.WorldPosition.x-0.5,obj.WorldPosition.y-0.5,obj.WorldPosition.z-0.5)
-- This vector is equivalent to one of the lower corners of a 1x1x1 cube.

obj.Rigidbody.AddForceAtPosition (Vector.New(0,40,0), applyForceHere);
-- The object is experiencing an effect similar to being tipped upwards at the aforementioned corner.
Space.Host.ExecutingObject.Rigidbody.AddRelativeTorque(Vector.New(0,1,0))
local obj = Space.Host.ExecutingObject;

obj.Rigidbody.AddRelativeTorque (Vector.New(0,100,0));
-- Now the object spins about its own Y axis
Space.Host.ExecutingObject.Rigidbody.AddTorque(Vector.New(0,1,0))
local obj = Space.Host.ExecutingObject;

obj.Rigidbody.AddTorque (Vector.New(0,100,0));
-- Now the object spins about the global Y axis
Space.Host.ExecutingObject.Rigidbody.ClosestPointOnBounds(Vector.New(1,1,1))
local obj = Space.Host.ExecutingObject;

Space.Log(obj.Rigidbody.ClosestPointOnBounds (Vector.Zero));
-- prints [x,y,z] to the console, where x,y,z are coordinates of the rigidbody's point that is the closest to the global origin
Space.Host.ExecutingObject.Rigidbody.GetPointVelocity(Vector.New(0,1,0))
Space.Host.ExecutingObject.Rigidbody.GetRelativePointVelocity(Vector.New(1,1,1))
Space.Host.ExecutingObject.Rigidbody.MovePosition(Vector.New(1,1,1))
local obj = Space.Host.ExecutingObject;
local moveHere = Vector.New(obj.WorldPosition.x+10,obj.WorldPosition.y,obj.WorldPosition.z);

obj.Rigidbody.MovePosition (moveHere);
-- The object has been moved by 10 units in the positive X direction
Space.Host.ExecutingObject.Rigidbody.MoveRotation(Quaternion.New(0,1,0,0))
local obj = Space.Host.ExecutingObject;
local setRotationTo = Quaternion.Euler(60,0,0)

obj.Rigidbody.MoveRotation (setRotationTo);
-- The object's rotation has been set to 60 degrees in the positive X direction and 0 in Y and Z
Space.Host.ExecutingObject.Rigidbody.ResetCenterOfMass()
local obj = Space.Host.ExecutingObject;

obj.Rigidbody.CenterOfMass = Vector.New(1,1,1);
Space.Log(obj.Rigidbody.CenterOfMass);
-- prints "[1,1,1]" to the console

obj.Rigidbody.ResetCenterOfMass();
Space.Log(obj.Rigidbody.CenterOfMass);
-- prints "[0,0,0]" to the console
Space.Host.ExecutingObject.Rigidbody.ResetIntertiaTensor()
solid = Space.Scene.Find("Solid")
--get rigidbody of inertia frame.
rigid = solid.Rigidbody
if rigid == nil then
    rigid = solid.AddRigidbody()
end
rigid.ResetIntertiaTensor()
--to reset inertia tensor if intertia tensor is set
Space.Host.ExecutingObject.Rigidbody.Sleep()
Space.Host.ExecutingObject.Rigidbody.WakeUp()
Space.Host.ExecutingObject.Rigidbody.SweepTestAll(Vector.New(1,0,0) , 20)
solid = Space.Scene.Find("Solid")
--get rigidbody of inertia frame.
rigid = solid.Rigidbody
if rigid == nil then
    rigid = solid.AddRigidbody()
end
hits = rigid.SweepTestAll(solid.Forward , 20)
--sweep forward 20 meters, and return all hits.
if hits~=nil and #hits-1 > 0 then
    for i = 1,#hits-1 do
        Space.Log(hits[i].Object.Name)
    end
end
--output all hit gameobject.
Space.Host.ExecutingObject.Rigidbody.AngularDrag = 0.20
Space.Host.ExecutingObject.Rigidbody.AngularVelocity = Vector.New(0,1,0)
local obj = Space.Host.ExecutingObject;

-- Set a new angular velocity vector
obj.Rigidbody.AngularVelocity = Vector.New(0,Space.Math.Pi,0);
-- Now the object is rotating about the Y axis at a speed of 180 degrees per second
-- (or 30 revolutions per minute)

-- Get the current angular velocity vector
Space.Log(obj.Rigidbody.AngularVelocity);
-- prints "[0, 3.141593, 0]" to the console
Space.Host.ExecutingObject.Rigidbody.CenterOfMass = Vector.New(1,0,0)
Space.Host.ExecutingObject.Rigidbody.Drag = 5
Space.Host.ExecutingObject.Rigidbody.FreezeRotation = true
Space.Host.ExecutingObject.Rigidbody.Kinematic = true
Space.Host.ExecutingObject.Rigidbody.Mass = 0.1
Space.Host.ExecutingObject.Rigidbody.MaxAngularVelocity = 1
Space.Host.ExecutingObject.Rigidbody.MaxDepenetrationVelocity = 1
Space.Host.ExecutingObject.Rigidbody.UseGravity = true
local obj = Space.Host.ExecutingObject;

-- Set UseGravity to False (it is set to True by default)
obj.Rigidbody.UseGravity = false;
-- Now gravity does not affect the rigidbody.

-- Get the UseGravity value (find out if UseGravity is in action)
Space.Log(obj.Rigidbody.UseGravity);
-- prints "False" to the console
Space.Host.ExecutingObject.Rigidbody.Velocity = Vector.New(0,1,0)
local obj = Space.Host.ExecutingObject;

-- Set a new velocity vector
obj.Rigidbody.Velocity = Vector.New(0, 0, 1);
-- Now the object is moving in the positive Z direction at a speed of 1 unit per second

-- Get the current velocity vector
Space.Log(obj.Rigidbody.Velocity);
-- prints "[0, 0, 1]" to the console
WorldCenter = Space.Host.ExecutingObject.Rigidbody.WorldCenterOfMass
local obj = Space.Host.ExecutingObject;

-- Get the current center of mass
Space.Log(obj.Rigidbody.WorldCenterOfMass);
-- prints "[x, y, z]" to the console, where x,y,z are global coordinates of the center of mass. If CenterOfMass == [0,0,0], then x,y,z are equal to the global coordinates of the object.
isSleeping = Space.Host.ExecutingObject.Rigidbody.Sleeping
local obj = Space.Host.ExecutingObject;

obj.Rigidbody.Sleep();
Space.Log(obj.Rigidbody.Sleeping);
-- prints "True" to the console

obj.Rigidbody.WakeUp();
Space.Log(obj.Rigidbody.Sleeping);
-- prints "False" to the console
density = Space.Host.ExecutingObject.Rigidbody.Density
local obj = Space.Host.ExecutingObject;

Space.Log(obj.Rigidbody.Mass);
-- prints "1" to the console
obj.LocalScale = Vector.New(2,2,2);
obj.Rigidbody.Density = 0.5;
Space.Log(obj.Rigidbody.Mass);
-- prints "4" to the console - the density is 2 times lower, and the object is 8 times bigger, therefore it's 4 times heavier.
Space.Host.ExecutingObject.Rigidbody.IntertiaTensor = Vector.New(0,0,0)
solid = Space.Scene.Find("Solid")
--get rigidbody of inertia frame.
rigid = solid.Rigidbody
if rigid == nil then
    rigid = solid.AddRigidbody()
end
rigid.InertiaTensor = Vector.New(10,100,1)
rigid.AddTorque(Vector.New(100,100,100))
--set inertia tensor to 10,100,1, and add torque 100 to all axis,and rotate velocity x:y:z would be 10:1:100.
Space.Host.ExecutingObject.Rigidbody.InertiaTensorRotation = Quaternion.New(0,0,0,0)
solid = Space.Scene.Find("Solid")
--get rigidbody of inertia frame.
rigid = solid.Rigidbody
if rigid == nil then
    rigid = solid.AddRigidbody()
end
rigid.InertiaTensor = Vector.New(10,100,1)
rigid.InertiaTensorRotation = Quaternion.Euler(0,90,0)
rigid.AddTorque(Vector.New(100,100,100))
--set inertia tensor manually and rotate this inertia tensor by 90 degrees in y axis.
theGameObject = Space.Host.ExecutingObject.Rigidbody.GameObject
ResetIntertiaTensor
Sleep
WakeUp
SweepTestAll
UseGravity
Velocity
WorldCenterOfMass
Sleeping
Density
InertiaTensor
InertiaTensorRotation
GameObject