SRigidbody
Index
Functions Index
| Function Name |
|---|
| 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 () |
| void ResetIntertiaTensor () |
| void Sleep () |
| void WakeUp () |
| SPhysicsHit[] SweepTestAll (SVector direction, float distance) |
Properties Index
| Property Name |
|---|
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 |
bool UseGravity get set |
SVector Velocity get set |
SVector WorldCenterOfMass get |
bool Sleeping get |
float Density set |
SVector InertiaTensor get set |
SQuaternion InertiaTensorRotation get set |
SGameObject GameObject get |
Functions
AddExplosionForce
void AddExplosionForce (float explosionForce, SVector 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 |
|---|---|---|
- Lua
Space.Host.ExecutingObject.Rigidbody.AddExplosionForce (300, Vector.New(0,0,0), 10, 20)
- Lua
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!
AddForce
void AddForce (SVector force)
Adds a force to the Rigidbody that is continuously exerted on it in the given direction.
| Parameter | Type | Description |
|---|---|---|
- Lua
Space.Host.ExecutingObject.Rigidbody.AddForce(Vector.New(0,1,0))
- Lua
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)
AddForceAtPosition
void AddForceAtPosition (SVector force, SVector 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 |
|---|---|---|
- Lua
Space.Host.ExecutingObject.Rigidbody.AddForceAtPosition(Vector.New(1,1,1), Vector.New(0,1,0))
- Lua
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.
AddRelativeTorque
void AddRelativeTorque (SVector torque)
Adds a torque to the rigidbody relative to the local coordinate system.
| Parameter | Type | Description |
|---|---|---|
- Lua
Space.Host.ExecutingObject.Rigidbody.AddRelativeTorque(Vector.New(0,1,0))
- Lua
local obj = Space.Host.ExecutingObject;
obj.Rigidbody.AddRelativeTorque (Vector.New(0,100,0));
-- Now the object spins about its own Y axis
AddTorque
void AddTorque (SVector torque)
Adds a torque to the rigidbody relative to the global coordinate system.
| Parameter | Type | Description |
|---|---|---|
- Lua
Space.Host.ExecutingObject.Rigidbody.AddTorque(Vector.New(0,1,0))
- Lua
local obj = Space.Host.ExecutingObject;
obj.Rigidbody.AddTorque (Vector.New(0,100,0));
-- Now the object spins about the global Y axis
ClosestPointOnBounds
SVector ClosestPointOnBounds (SVector input)
Returns the closest point on the bounding box of the attached colliders.
| Parameter | Type | Description |
|---|---|---|
- Lua
Space.Host.ExecutingObject.Rigidbody.ClosestPointOnBounds(Vector.New(1,1,1))
- Lua
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
GetPointVelocity
SVector GetPointVelocity (SVector worldPoint)
Function Description
| Parameter | Type | Description |
|---|---|---|
- Lua
Space.Host.ExecutingObject.Rigidbody.GetPointVelocity(Vector.New(0,1,0))
GetRelativePointVelocity
SVector GetRelativePointVelocity (SVector point)
Function Description
| Parameter | Type | Description |
|---|---|---|
- Lua
Space.Host.ExecutingObject.Rigidbody.GetRelativePointVelocity(Vector.New(1,1,1))
MovePosition
void MovePosition (SVector point)
Moves the rigidbody to position.
| Parameter | Type | Description |
|---|---|---|
- Lua
Space.Host.ExecutingObject.Rigidbody.MovePosition(Vector.New(1,1,1))
- Lua
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
MoveRotation
void MoveRotation (SQuaternion rotation)
Rotates the rigidbody to rotation.
| Parameter | Type | Description |
|---|---|---|
- Lua
Space.Host.ExecutingObject.Rigidbody.MoveRotation(Quaternion.New(0,1,0,0))
- Lua
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
ResetCenterOfMass
void ResetCenterOfMass ()
Reset the center of mass of the rigidbody.
- Lua
Space.Host.ExecutingObject.Rigidbody.ResetCenterOfMass()
- Lua
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
ResetIntertiaTensor
void ResetIntertiaTensor ()
Reset the inertia tensor value and rotation.
- Lua
Space.Host.ExecutingObject.Rigidbody.ResetIntertiaTensor()
- Lua
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
Sleep
void Sleep ()
Forces a rigidbody to sleep.
- Lua
Space.Host.ExecutingObject.Rigidbody.Sleep()
WakeUp
void WakeUp ()
Forces a rigidbody to wake up.
- Lua
Space.Host.ExecutingObject.Rigidbody.WakeUp()
SweepTestAll
SPhysicsHit[] SweepTestAll (SVector direction, float distance)
Like Rigidbody.SweepTest, but returns all hits.
| Parameter | Type | Description |
|---|---|---|
- Lua
Space.Host.ExecutingObject.Rigidbody.SweepTestAll(Vector.New(1,0,0) , 20)
- Lua
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.
Properties
AngularDrag
float AngularDrag get set
The angular drag of the object.
- Lua
Space.Host.ExecutingObject.Rigidbody.AngularDrag = 0.20
AngularVelocity
SVector AngularVelocity get set
The angular velocity vector of the rigidbody (in radians per second).
- Lua
Space.Host.ExecutingObject.Rigidbody.AngularVelocity = Vector.New(0,1,0)
- Lua
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
CenterOfMass
SVector CenterOfMass get set
The center of mass relative to the local origin.
- Lua
Space.Host.ExecutingObject.Rigidbody.CenterOfMass = Vector.New(1,0,0)
Drag
float Drag get set
The drag of the object.
- Lua
Space.Host.ExecutingObject.Rigidbody.Drag = 5
FreezeRotation
bool FreezeRotation get set
Controls whether physics will have any impact on the rotation of the object.
- Lua
Space.Host.ExecutingObject.Rigidbody.FreezeRotation = true
Kinematic
bool Kinematic get set
Controls whether physics will have any impact on the object.
- Lua
Space.Host.ExecutingObject.Rigidbody.Kinematic = true
Mass
float Mass get set
The mass of the rigidbody.
- Lua
Space.Host.ExecutingObject.Rigidbody.Mass = 0.1
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.
- Lua
Space.Host.ExecutingObject.Rigidbody.MaxAngularVelocity = 1
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.
- Lua
Space.Host.ExecutingObject.Rigidbody.MaxDepenetrationVelocity = 1
UseGravity
bool UseGravity get set
Controls whether gravity affects the rigidbody.
- Lua
Space.Host.ExecutingObject.Rigidbody.UseGravity = true
- Lua
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
Velocity
SVector Velocity get set
The velocity vector of the rigidbody. (in units per second).
- Lua
Space.Host.ExecutingObject.Rigidbody.Velocity = Vector.New(0,1,0)
- Lua
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
WorldCenterOfMass
SVector WorldCenterOfMass get
The center of mass of the rigidbody relative to the global origin (Read Only).
- Lua
``` WorldCenter = Space.Host.ExecutingObject.Rigidbody.WorldCenterOfMass ```
- Lua
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.
Sleeping
bool Sleeping get
Is the rigidbody sleeping?
- Lua
isSleeping = Space.Host.ExecutingObject.Rigidbody.Sleeping
- Lua
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
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).
- Lua
density = Space.Host.ExecutingObject.Rigidbody.Density
- Lua
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.
InertiaTensor
SVector 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.
- Lua
Space.Host.ExecutingObject.Rigidbody.IntertiaTensor = Vector.New(0,0,0)
- Lua
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.
InertiaTensorRotation
SQuaternion InertiaTensorRotation get set
The rotation of the inertia tensor.
- Lua
Space.Host.ExecutingObject.Rigidbody.InertiaTensorRotation = Quaternion.New(0,0,0,0)
- Lua
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.
GameObject
SGameObject GameObject get
Property Description
- Lua
theGameObject = Space.Host.ExecutingObject.Rigidbody.GameObject