UnitClass
A script class that is instanced for every Unit in the game.
A unit represents an AI controlling a Character.
The unit script only runs on the server side.
Can receive events sent with sm.event.sendToUnit.
Fields
| Name | Type | Description |
|---|---|---|
unit |
Unit | The Unit game object belonging to this class instance. |
storage |
Storage | A Storage object that can be used to store data for the next time loading this object after being unloaded. |
data |
any | Data from the "data" json element. |
params |
any | Parameter sent to sm.unit.createUnit. |
Constants
| Name | Type | Description |
|---|---|---|
isSaveObject |
boolean | Enables or disables saving of this unit. (Defaults to true) |
isSaveObject
Value type: boolean
Enables or disables saving of this unit. (Defaults to true)
If enabled, the Unit will be recreated when loading a game. Otherwise, the Unit is considered a temporary object.
Note: If disabled, self.storage can not be used.
Server + Client
onCreate
UnitClass:server_onCreate( )
UnitClass:client_onCreate( )
Called when the scripted object is created. This occurs when a new object is built, spawned, or loaded from the save file.
Parameters:
| Name | Type | Description |
|---|---|---|
self |
table | The class instance. |
onDestroy
UnitClass:server_onDestroy( )
UnitClass:client_onDestroy( )
Called when the scripted object is destroyed.
Parameters:
| Name | Type | Description |
|---|---|---|
self |
table | The class instance. |
onRefresh
UnitClass:server_onRefresh( )
UnitClass:client_onRefresh( )
Called if the Lua script attached to the object is modified while the game is running.
Note: This event requires Scrap Mechanic to be running with the '-dev' flag. This will allow scripts to automatically refresh upon changes.
Parameters:
| Name | Type | Description |
|---|---|---|
self |
table | The class instance. |
onFixedUpdate
UnitClass:server_onFixedUpdate( timeStep )
UnitClass:client_onFixedUpdate( timeStep )
Called every game tick – 40 ticks a second. If the frame rate is lower than 40 fps, this event may be called twice.
During a fixed update, physics and logic between interactables are updated.
Parameters:
| Name | Type | Description |
|---|---|---|
self |
table | The class instance. |
timeStep |
number | The time period of a tick. (Is always 0.025, a 1/40th of a second.) |
Server-only
onReceiveUpdate
UnitClass:server_onReceiveUpdate( )
Called occasionally to indicate that some time has passed.
For performance reasons; it recommended to use this instead of server_onFixedUpdate for updates that do not need to happen frequently.
Use sm.game.getCurrentTick to calculate the time.
Parameters:
| Name | Type | Description |
|---|---|---|
self |
table | The class instance. |
onProjectile
UnitClass:server_onProjectile(
position,
airTime,
velocity,
projectileName,
shooter,
damage,
customData,
normal,
uuid,
mass
)
Called when the Unit's Character is hit by a projectile.
Note: If the shooter is destroyed before the projectile hits, the shooter value will be nil.
Parameters:
| Name | Type | Description |
|---|---|---|
self |
table | The class instance. |
position |
Vec3 | The position in world space where the projectile hit the Unit's Character. |
airTime |
number | The time, in seconds, that the projectile spent flying before the hit. |
velocity |
Vec3 | The velocity of the projectile at impact. |
projectileName |
string | The name of the projectile. (Legacy, use uuid instead) |
shooter |
Player/Unit/Shape/Harvestable/nil | The shooter. Can be a Player, Unit, Shape, Harvestable or nil if unknown. |
damage |
integer | The damage value of the projectile. |
customData |
any | A Lua object that can be defined at shoot time using sm.projectile.customProjectileAttack or an other custom version. |
normal |
Vec3 | The normal at the point of impact. |
uuid |
Uuid | The uuid of the projectile. |
mass |
number | The mass of the projectile. |
onExplosion
UnitClass:server_onExplosion( center, destructionLevel, damage )
Called when the Unit's Character is hit by an explosion.
Parameters:
| Name | Type | Description |
|---|---|---|
self |
table | The class instance. |
center |
Vec3 | The center of the explosion. |
destructionLevel |
integer | The level of destruction done by this explosion. Corresponds to the 'durability' rating of a Shape. |
damage |
integer | The damage value of the explosion. |
onMelee
UnitClass:server_onMelee( position, attacker, damage, power, direction, normal )
Called when the Unit's Character is hit by a melee hit.
Note: If the attacker is destroyed before the hit lands, the attacker value will be nil.
Parameters:
| Name | Type | Description |
|---|---|---|
self |
table | The class instance. |
position |
Vec3 | The position in world space where the Unit's Character was hit. |
attacker |
Player/Unit/nil | The attacker. Can be a Player, Unit or nil if unknown. |
damage |
integer | The damage value of the melee hit. |
power |
number | The physical impact impact of the hit. |
direction |
Vec3 | The direction that the melee attack was made. |
normal |
Vec3 | The normal at the point of impact. |
onCollision
UnitClass:server_onCollision(
other,
position,
selfPointVelocity,
otherPointVelocity,
normal
)
Called when the Unit's Character collides with another object.
Parameters:
| Name | Type | Description |
|---|---|---|
self |
table | The class instance. |
other |
Shape/Character/Harvestable/Lift/nil | The other object. Nil if terrain. |
position |
Vec3 | The position in world space where the collision occurred. |
selfPointVelocity |
Vec3 | The velocity that that the Unit's Character had at the point of collision. |
otherPointVelocity |
Vec3 | The velocity that that the other object had at the point of collision. |
normal |
Vec3 | The collision normal between the Unit's Character and the other other object. |
onCollisionCrush
UnitClass:server_onCollisionCrush( )
Called when the Unit's Character is crushed.
Parameters:
| Name | Type | Description |
|---|---|---|
self |
table | The class instance. |
onUnitUpdate
UnitClass:server_onUnitUpdate( deltaTime )
Called occasionally for units based on how many units are active.
It is recommended to do heavier AI decisions here instead of in server_onFixedUpdate.
Parameters:
| Name | Type | Description |
|---|---|---|
self |
table | The class instance. |
deltaTime |
number | The time, in seconds, since server_onUnitUpdate was last called for this Unit. |
onCharacterChangedColor
UnitClass:server_onCharacterChangedColor( color )
Called when the Unit's Character color is set. Either by painting or set using Character.setColor or Character.color.
Parameters:
| Name | Type | Description |
|---|---|---|
self |
table | The class instance. |
color |
Color | The new Color of the Unit's Character. |
Client-only
onUpdate
UnitClass:client_onUpdate( deltaTime )
Called every frame.
During a frame update, graphics, animations and effects are updated.
Warning: Because of how frequent this event is called, the game's frame rate is greatly affected by the amount of code executed here. For any non-graphics related code, consider using client_onFixedUpdate instead. If the event is not in use, consider removing it from the script. (Event callbacks that are not implemented will not be called.)
Parameters:
| Name | Type | Description |
|---|---|---|
self |
table | The class instance. |
deltaTime |
number | Delta time since the last frame. |
onClientDataUpdate
UnitClass:client_onClientDataUpdate( data, channel )
Called when the client receives new client data updates from the server set with Network.setClientData.
Data set in this way is persistent and the latest data will automatically be sent to new clients.
The data will arrive after client_onCreate during the same tick.
Channel 1 will be received before channel 2 if both are updated.
Parameters:
| Name | Type | Description |
|---|---|---|
self |
table | The class instance. |
data |
any | Any lua object set with Network.setClientData |
channel |
integer | Client data channel, 1 or 2. (default: 1) |
onLocalPlayerChangedWorld
UnitClass:client_onLocalPlayerChangedWorld( world )
Called when the client player changes world.
Parameters:
| Name | Type | Description |
|---|---|---|
self |
table | The class instance. |
world |
World | The entered world. |