> For the complete documentation index, see [llms.txt](https://kinematicsoup.gitbook.io/reactor/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://kinematicsoup.gitbook.io/reactor/api-reference/ks.reactor.client.unity/ks.reactor.client.unity.ksautospawn.md).

# Class ksAutoSpawn

Namespace: [KS.Reactor.Client.Unity](/reactor/api-reference/ks.reactor.client.unity.md)\
Assembly: KSUnity-Source.dll

Automatically spawns an entity for the game object when it is instantiated. Can only be used with entity prefabs in Resources or asset bundles. It first checks it's ancestors for a connected room to spawn in that has [AllowPlayerSpawning](/reactor/api-reference/ks.reactor.client.unity/ks.reactor.client.unity.ksroom.md#KS_Reactor_Client_Unity_ksRoom_AllowPlayerSpawning) set to true. If it does not find one, It will look for a room in the same scene to spawn in. If it does not find one, it will spawn an entity the first time a connection is made to a room in that scene with auto spawning enabled. If it finds more than one, it will not spawn and will log a warning.

If placed on a prefab entity that is part of the initial scene and has [SpawnOwned](#KS_Reactor_Client_Unity_ksAutoSpawn_SpawnOwned) set to true, the entity will not be written to the scene config and instead will be spawned per-player when they connect.

When the entity it is linked to is destroyed and [DestroyWithServer](/reactor/api-reference/ks.reactor.client.unity/ks.reactor.client.unity.ksentitycomponent.md#KS_Reactor_Client_Unity_ksEntityComponent_DestroyWithServer) is false, if the entity was destroyed because of a disconnect, it will try to respawn in a different room or wait until there is a room to respawn in. If it was destroyed for any other reason, the script will disable itself, and you must reenable it if you want it to respawn.

```csharp
[ksHideInOwnershipManager(true)]
[DisallowMultipleComponent]
[RequireComponent(typeof(ksEntityComponent))]
[AddComponentMenu("Reactor/ksAutoSpawn")]
public class ksAutoSpawn : MonoBehaviour
```

#### Inheritance

[object](https://learn.microsoft.com/dotnet/api/system.object) â† Object â† Component â† Behaviour â† MonoBehaviour â† [ksAutoSpawn](/reactor/api-reference/ks.reactor.client.unity/ks.reactor.client.unity.ksautospawn.md)

#### Inherited Members

MonoBehaviour.IsInvoking(), MonoBehaviour.CancelInvoke(), MonoBehaviour.Invoke(string, float), MonoBehaviour.InvokeRepeating(string, float, float), MonoBehaviour.CancelInvoke(string), MonoBehaviour.IsInvoking(string), MonoBehaviour.StartCoroutine(string), MonoBehaviour.StartCoroutine(string, object), MonoBehaviour.StartCoroutine(IEnumerator), MonoBehaviour.StartCoroutine\_Auto(IEnumerator), MonoBehaviour.StopCoroutine(IEnumerator), MonoBehaviour.StopCoroutine(Coroutine), MonoBehaviour.StopCoroutine(string), MonoBehaviour.StopAllCoroutines(), MonoBehaviour.print(object), MonoBehaviour.destroyCancellationToken, MonoBehaviour.useGUILayout, MonoBehaviour.runInEditMode, Behaviour.enabled, Behaviour.isActiveAndEnabled, Component.GetComponent(Type), Component.GetComponent\<T>(), Component.TryGetComponent(Type, out Component), Component.TryGetComponent\<T>(out T), Component.GetComponent(string), Component.GetComponentInChildren(Type, bool), Component.GetComponentInChildren(Type), Component.GetComponentInChildren\<T>(bool), Component.GetComponentInChildren\<T>(), Component.GetComponentsInChildren(Type, bool), Component.GetComponentsInChildren(Type), Component.GetComponentsInChildren\<T>(bool), Component.GetComponentsInChildren\<T>(bool, List\<T>), Component.GetComponentsInChildren\<T>(), Component.GetComponentsInChildren\<T>(List\<T>), Component.GetComponentInParent(Type, bool), Component.GetComponentInParent(Type), Component.GetComponentInParent\<T>(bool), Component.GetComponentInParent\<T>(), Component.GetComponentsInParent(Type, bool), Component.GetComponentsInParent(Type), Component.GetComponentsInParent\<T>(bool), Component.GetComponentsInParent\<T>(bool, List\<T>), Component.GetComponentsInParent\<T>(), Component.GetComponents(Type), Component.GetComponents(Type, List\<Component>), Component.GetComponents\<T>(List\<T>), Component.GetComponents\<T>(), Component.CompareTag(string), Component.SendMessageUpwards(string, object, SendMessageOptions), Component.SendMessageUpwards(string, object), Component.SendMessageUpwards(string), Component.SendMessageUpwards(string, SendMessageOptions), Component.SendMessage(string, object), Component.SendMessage(string), Component.SendMessage(string, object, SendMessageOptions), Component.SendMessage(string, SendMessageOptions), Component.BroadcastMessage(string, object, SendMessageOptions), Component.BroadcastMessage(string, object), Component.BroadcastMessage(string), Component.BroadcastMessage(string, SendMessageOptions), Component.transform, Component.gameObject, Component.tag, Object.GetInstanceID(), Object.GetHashCode(), Object.Equals(object), Object.Instantiate(Object, Vector3, Quaternion), Object.Instantiate(Object, Vector3, Quaternion, Transform), Object.Instantiate(Object), Object.Instantiate(Object, Transform), Object.Instantiate(Object, Transform, bool), Object.Instantiate\<T>(T), Object.Instantiate\<T>(T, Vector3, Quaternion), Object.Instantiate\<T>(T, Vector3, Quaternion, Transform), Object.Instantiate\<T>(T, Transform), Object.Instantiate\<T>(T, Transform, bool), Object.Destroy(Object, float), Object.Destroy(Object), Object.DestroyImmediate(Object, bool), Object.DestroyImmediate(Object), Object.FindObjectsOfType(Type), Object.FindObjectsOfType(Type, bool), Object.FindObjectsByType(Type, FindObjectsSortMode), Object.FindObjectsByType(Type, FindObjectsInactive, FindObjectsSortMode), Object.DontDestroyOnLoad(Object), Object.DestroyObject(Object, float), Object.DestroyObject(Object), Object.FindSceneObjectsOfType(Type), Object.FindObjectsOfTypeIncludingAssets(Type), Object.FindObjectsOfType\<T>(), Object.FindObjectsByType\<T>(FindObjectsSortMode), Object.FindObjectsOfType\<T>(bool), Object.FindObjectsByType\<T>(FindObjectsInactive, FindObjectsSortMode), Object.FindObjectOfType\<T>(), Object.FindObjectOfType\<T>(bool), Object.FindFirstObjectByType\<T>(), Object.FindAnyObjectByType\<T>(), Object.FindFirstObjectByType\<T>(FindObjectsInactive), Object.FindAnyObjectByType\<T>(FindObjectsInactive), Object.FindObjectsOfTypeAll(Type), Object.FindObjectOfType(Type), Object.FindFirstObjectByType(Type), Object.FindAnyObjectByType(Type), Object.FindObjectOfType(Type, bool), Object.FindFirstObjectByType(Type, FindObjectsInactive), Object.FindAnyObjectByType(Type, FindObjectsInactive), Object.ToString(), Object.name, Object.hideFlags, [object.Equals(object)](https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals\(system-object\)), [object.Equals(object, object)](https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals\(system-object-system-object\)), [object.GetHashCode()](https://learn.microsoft.com/dotnet/api/system.object.gethashcode), [object.GetType()](https://learn.microsoft.com/dotnet/api/system.object.gettype), [object.MemberwiseClone()](https://learn.microsoft.com/dotnet/api/system.object.memberwiseclone), [object.ReferenceEquals(object, object)](https://learn.microsoft.com/dotnet/api/system.object.referenceequals), [object.ToString()](https://learn.microsoft.com/dotnet/api/system.object.tostring)

## Fields

### OwnerPermissions <a href="#ks_reactor_client_unity_ksautospawn_ownerpermissions" id="ks_reactor_client_unity_ksautospawn_ownerpermissions"></a>

Permissions to spawn with if [SpawnOwned](#KS_Reactor_Client_Unity_ksAutoSpawn_SpawnOwned) is true.

```csharp
public ksOwnerPermissions OwnerPermissions
```

#### Field Value

[ksOwnerPermissions](/reactor/api-reference/ks.reactor/ks.reactor.ksownerpermissions.md)

### SpawnOwned <a href="#ks_reactor_client_unity_ksautospawn_spawnowned" id="ks_reactor_client_unity_ksautospawn_spawnowned"></a>

If true, the entity is spawned with the local player as the owner. If the entity is part of the initial scene, it will not be written to the scene config and instead will be spawned per-player when they connect.

```csharp
public bool SpawnOwned
```

#### Field Value

[bool](https://learn.microsoft.com/dotnet/api/system.boolean)

## Methods

### IsSpawnable() <a href="#ks_reactor_client_unity_ksautospawn_isspawnable" id="ks_reactor_client_unity_ksautospawn_isspawnable"></a>

Checks if an entity can be spawned for this game object. To be spawned, it must have a [ksEntityComponent](/reactor/api-reference/ks.reactor.client.unity/ks.reactor.client.unity.ksentitycomponent.md), must not already be linked to an entity, must have an asset id, and must not be permanent.

```csharp
public bool IsSpawnable()
```

#### Returns

[bool](https://learn.microsoft.com/dotnet/api/system.boolean)

True if an entity can be spawned for this game object.

### Spawn() <a href="#ks_reactor_client_unity_ksautospawn_spawn" id="ks_reactor_client_unity_ksautospawn_spawn"></a>

Tries to spawn an entity for the game object. Will not spawn if [IsSpawnable](#KS_Reactor_Client_Unity_ksAutoSpawn_IsSpawnable) returns false or if it cannot find a room to spawn in. It first looks for a room with auto spawning enabled from the object's ancestors. If it doesn't find one, it checks for a connected room in the same scene. If it finds more than one, it will not auto spawn. If it finds none and is enabled, it will add itself to the list of objects waiting for a room to spawn in and spawn in the first connected room in the same scene.

```csharp
public void Spawn()
```

### Spawn(ksRoom) <a href="#ks_reactor_client_unity_ksautospawn_spawn_ks_reactor_client_unity_ksroom" id="ks_reactor_client_unity_ksautospawn_spawn_ks_reactor_client_unity_ksroom"></a>

Tries to spawn an entity for the game object. Will not spawn if [IsSpawnable](#KS_Reactor_Client_Unity_ksAutoSpawn_IsSpawnable) returns false.

```csharp
public void Spawn(ksRoom room)
```

#### Parameters

`room` [ksRoom](/reactor/api-reference/ks.reactor.client.unity/ks.reactor.client.unity.ksroom.md)

Room to spawn in. The room does not need to have auto-spawning enabled, but does need player-spawning enabled.
