# How To Spawn

## Prefab Name

The prefab name represents the full path of the prefab inside the game files.

It always starts with `assets/` and will be fully lowercase.

## Position

The position in the world where the entity will be placed.

The default position is 0,0,0. This represents the center of the map at water level.

## Rotation

The rotation of the entity after being spawned.

`There will be a section on Quaternions later, but simplified explanation here for now:`

There is their axis:

• The X axis goes from your left to right.
• The Y axis goes from above to below you.
• The Z axis goes from front to back.

Your rotation can be represented by turning each axis, which leads to the following behaviour:

• X rotation = leaning forward and backwards
• Y rotation = turning left and right
• Z rotation = tilting left and right

This means you represent your rotation as 3 numbers: `( 'x' rotation, 'y' rotation, 'z' rotation )`. These are called `Euler` (aka `Human readable`) angles. However, there is one catch:

Internally a `Quaternion` represents your rotation as 4 numbers which makes the math easier for a computer but near impossible to understand as a human.

To solve this problem we have helper functions. You can use `Quaternion.Euler(x,y,z)` to create a new `Quaternion` rotation based on the `Euler` angles.

If you want to convert an existing rotation back to the `Euler` angles just use `.eulerAngles` on a rotation.

//Create a new rotation that is 45° to the left Quaternion rotation = Quaternion.Euler(0,45,0); //Turn the rotation back to human readable Console.WriteLine( rotation.eulerAngles ); > Prints (0, 45, 0)

The code to spawn an entity will make a lot more sense now that we know what all the parameters mean.

# Code To Spawn An Entity

The first part of spawning something is to create the entity. The function takes the 3 parameters described above into this function:

GameManager.server.CreateEntity(string prefabName, Vector3 position, Quaternion rotation)

We store the result in a variable of type BaseEntity.

If there was an error spawning the entity or an invalid prefab name was supplied the entity will be `null`. We should check for this before calling the `Spawn()` function or we risk throwing an error.

A full example follows.

BaseEntity rowBoat = GameManager.server.CreateEntity( "assets/content/vehicles/boats/rowboat/rowboat.prefab", new Vector3( 450, 0, 1000), Quaternion.Identity( 0, 90, 0) ); if (rowBoat == null) { return; } //Don't forget to call spawn after rowBoat.Spawn();

# How To Delete An Entity

After you have spawned your boat you might want to remove it.

You could look at the boat on the client, run `ent kill` in the F1 Console and it would be removed. But what if we want to automate it?

Let us continue with the example above:

BaseEntity rowBoat = GameManager.server.CreateEntity("assets/content/vehicles/boats/rowboat/rowboat.prefab"); if ( rowBoat != null ) { rowBoat.Spawn(); } //Now we want to remove it //Obviously the entity won't be null in this example but for longer running code you might want to check this if ( rowBoat != null ) { if ( rowBoat.IsDestroyed == false ) { rowBoat.Kill(); } }

# What is 'IsDestroyed'

The bool `IsDestroyed` lets you know if the entity has been already removed by the game.

This is needed because the entity does not go `null` after you `Kill()` it.