wiki.sine.space | sinespace
close

# Scripting/SRigidbody

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

The Rigidbody class works with the physics of the object. Requires the Rigidbody component to function.

## Members

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.

local obj = Space.Host.ExecutingObject;

-- The explosion will occur at the location of the ExecutingObject.

-- Place other rigidbodies around it to observe the effect!

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

local obj = Space.Host.ExecutingObject;

-- Now the rigidbody is under a continuous force directed upwards (Y direction)

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.

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.

-- The object is experiencing an effect similar to being tipped upwards at the aforementioned corner.

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

local obj = Space.Host.ExecutingObject;

-- Now the object spins about its own Y axis

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

local obj = Space.Host.ExecutingObject;

-- 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.

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

### MovePosition

void MovePosition (SVector point)

Moves the rigidbody to position.

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.

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.

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

### Sleep

void Sleep ()

Forces a rigidbody to sleep.

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

### WakeUp

void WakeUp ()

Forces a rigidbody to wake up.

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

## Properties

### AngularDrag

float AngularDrag { get; set; }

The angular drag of the object.

local obj = Space.Host.ExecutingObject;

-- Set a new angular drag value
obj.Rigidbody.AngularDrag = 0.20;

-- Get the current angular drag value
Space.Log(obj.Rigidbody.AngularDrag);

-- prints "0.200000..." to the console

### AngularVelocity

SVector AngularVelocity { get; set; }

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

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.

local obj = Space.Host.ExecutingObject;

-- Set a new center of mass
obj.Rigidbody.CenterOfMass = Vector.New(1,0,0);
-- Now the object's center of mass has been moved by 1 at the X axis

-- Get the current center of mass
Space.Log(obj.Rigidbody.CenterOfMass);

-- prints "[1, 0, 0]" to the console

### Drag

float Drag { get; set; }

The drag of the object.

local obj = Space.Host.ExecutingObject;

-- Set a new drag value
obj.Rigidbody.Drag = 20;
-- Now the object's drag is set to 20 - the higher the number, the more it is resistant to gravity

-- Get the current drag value
Space.Log(obj.Rigidbody.Drag);

-- prints "20" to the console

### FreezeRotation

bool FreezeRotation { get; set; }

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

local obj = Space.Host.ExecutingObject;

-- Set FreezeRotation to True
obj.Rigidbody.FreezeRotation = true;
-- Now under no circumstances the object's rotation coordinates will change.

-- Get the FreezeRotation value (find out if Freeze Rotation is in action)
Space.Log(obj.Rigidbody.FreezeRotation);

-- prints "True" to the console

### Kinematic

bool Kinematic { get; set; }

Controls whether physics will have any impact on the object.

local obj = Space.Host.ExecutingObject;

-- Set Kinematic to True
obj.Rigidbody.Kinematic = true;
-- Now the object will not be affected by gravity, collisions, or other forces.

-- Get the Kinematic value (find out if Kinematic is in action)
Space.Log(obj.Rigidbody.Kinematic);

-- prints "True" to the console

### Mass

float Mass { get; set; }

The mass of the rigidbody.

local obj = Space.Host.ExecutingObject;

-- Set a new mass of the rigidbody
obj.Rigidbody.Mass = 0.1;

-- Get the current value of the rigidbody's mass
Space.Log(obj.Rigidbody.Mass);

-- prints "0.1000000..." to the console

### 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.

local obj = Space.Host.ExecutingObject;

-- Set a new value for the maximum angular velocity
obj.Rigidbody.MaxAngularVelocity = 1;
-- Now the object, for example, is more resistant to rolling over upon collision with another object.

-- Get the current value of the rigidbody's maximum angular velocity
Space.Log(obj.Rigidbody.MaxAngularVelocity);

-- prints "1" to the console

### 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.

local obj = Space.Host.ExecutingObject;

-- Set a new value for the maximum depenetration velocity
obj.Rigidbody.MaxDepenetrationVelocity = 1;

-- Get the current value of the rigidbody's maximum depenetration velocity
Space.Log(obj.Rigidbody.MaxDepenetrationVelocity);

-- prints "1" to the console

### UseGravity

bool UseGravity { get; set; }

Controls whether gravity affects the rigidbody.

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).

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).

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?

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).

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.