# AddComponent

> Records a command to add component of type T to an entity.

## Definition

* **Type:** Method
* **Namespace:** [Unity.Entities](/engine/7000.0/script-reference/unity/entities.md)
* **Assembly:** UnityEngine.EntitiesModule

## AddComponent\<T>(Entity, T)

Records a command to add component of type T to an entity.

```csharp
public void AddComponent<T>(Entity e, T component) where T : unmanaged, IComponentData
```

### Parameters

**** (\[Entity]\(/engine/7000.0/script-reference/unity/entities/entity)): The entity to have the component added.**** (T): The value to add on the new component in playback for the entity.

### Remarks

At playback, if the entity already has this type of component, the value will just be set. Throws an error if this entity is destroyed before playback, if T is type Entity or [Prefab](/engine/7000.0/script-reference/unity/entities/prefab.md), or adding this component type makes the archetype too large.

## AddComponent\<T>(NativeArray\<Entity>, T)

Records a command to add component of type T to a NativeArray of entities.

```csharp
public void AddComponent<T>(NativeArray<Entity> entities, T component) where T : unmanaged, IComponentData
```

### Parameters

**** (\[NativeArray\<Entity>]\(/engine/7000.0/script-reference/unity/collections/nativearray1)): The NativeArray of entities to have the component added.**** (T): The value to add on the new component in playback for all entities in the NativeArray.

### Remarks

At playback, if any entity already has this type of component, the value will just be set. Throws an error if any entity is destroyed before playback, if T is type Entity or [Prefab](/engine/7000.0/script-reference/unity/entities/prefab.md), or adding this component type makes the archetype too large.

## AddComponent\<T>(Entity)

Records a command to add component of type T to an entity.

```csharp
public void AddComponent<T>(Entity e) where T : unmanaged, IComponentData
```

### Parameters

**** (\[Entity]\(/engine/7000.0/script-reference/unity/entities/entity)): The entity to have the component added.

### Remarks

At playback, this command does nothing if the entity already has the component. Throws an error if this entity is destroyed before playback, if T is type Entity or [Prefab](/engine/7000.0/script-reference/unity/entities/prefab.md), or adding this component type makes the archetype too large.

## AddComponent\<T>(NativeArray\<Entity>)

Records a command to add component of type T to a NativeArray of entities.

```csharp
public void AddComponent<T>(NativeArray<Entity> entities) where T : unmanaged, IComponentData
```

### Parameters

**** (\[NativeArray\<Entity>]\(/engine/7000.0/script-reference/unity/collections/nativearray1)): The NativeArray of entities to have the component added.

### Remarks

At playback, if an entity already has this component, it is skipped. Throws an error if any entity is destroyed before playback, if T is type Entity or [Prefab](/engine/7000.0/script-reference/unity/entities/prefab.md), or adding this component type makes the archetype too large.

## AddComponent(Entity, ComponentType)

Records a command to add a component to an entity.

```csharp
public void AddComponent(Entity e, ComponentType componentType)
```

### Parameters

**** (\[Entity]\(/engine/7000.0/script-reference/unity/entities/entity)): The entity to get the additional component.**** (\[ComponentType]\(/engine/7000.0/script-reference/unity/entities/componenttype)): The type of component to add.

### Remarks

At playback, this command does nothing if the entity already has the component. Throws an error if any entity is destroyed before playback, if component is type Entity or [Prefab](/engine/7000.0/script-reference/unity/entities/prefab.md), or adding this component type makes the archetype too large.

## AddComponent(NativeArray\<Entity>, ComponentType)

Records a command to add a component to a NativeArray of entities.

```csharp
public void AddComponent(NativeArray<Entity> entities, ComponentType componentType)
```

### Parameters

**** (\[NativeArray\<Entity>]\(/engine/7000.0/script-reference/unity/collections/nativearray1)): The NativeArray of entities to have the component added.**** (\[ComponentType]\(/engine/7000.0/script-reference/unity/entities/componenttype)): The type of component to add.

### Remarks

At playback, if an entity already has this component, it is skipped. Throws an error if any entity is destroyed before playback, if component is type Entity or [Prefab](/engine/7000.0/script-reference/unity/entities/prefab.md), or adding this component type makes the archetype too large.

## AddComponent(Entity, ComponentTypeSet)

Records a command to add one or more components to an entity.

```csharp
public void AddComponent(Entity e, in ComponentTypeSet componentTypeSet)
```

### Parameters

**** (\[Entity]\(/engine/7000.0/script-reference/unity/entities/entity)): The entity to get additional components.**** (\[ComponentTypeSet]\(/engine/7000.0/script-reference/unity/entities/componenttypeset)): The types of components to add.

### Remarks

At playback, you can include a component type that the entity already has. Throws an error if this entity is destroyed before playback, if any component type is type Entity or [Prefab](/engine/7000.0/script-reference/unity/entities/prefab.md), or adding a component type makes the archetype too large.

## AddComponent(NativeArray\<Entity>, ComponentTypeSet)

Records a command to add one or more components to a NativeArray of entities.

```csharp
public void AddComponent(NativeArray<Entity> entities, in ComponentTypeSet componentTypeSet)
```

### Parameters

**** (\[NativeArray\<Entity>]\(/engine/7000.0/script-reference/unity/collections/nativearray1)): The NativeArray of entities to have the components added.**** (\[ComponentTypeSet]\(/engine/7000.0/script-reference/unity/entities/componenttypeset)): The types of components to add.

### Remarks

At playback, you can include a component type that any of the entities already have. Throws an error if this entity is destroyed before playback, if any component type is type Entity or [Prefab](/engine/7000.0/script-reference/unity/entities/prefab.md), or adding a component type makes the archetype too large.

## AddComponent(EntityQuery, ComponentType, EntityQueryCaptureMode)

Records a command to add a component to all entities matching a query.

```csharp
public void AddComponent(EntityQuery entityQuery, ComponentType componentType, EntityQueryCaptureMode queryCaptureMode)
```

### Parameters

**** (\[EntityQuery]\(/engine/7000.0/script-reference/unity/entities/entityquery)): The query specifying the entities to which the component is added.**** (\[ComponentType]\(/engine/7000.0/script-reference/unity/entities/componenttype)): The type of component to add.**** (\[EntityQueryCaptureMode]\(/engine/7000.0/script-reference/unity/entities/entityquerycapturemode)): Controls when the entities matching `entityQuery` are computed and captured.

### Remarks

Does not affect entities which already have the component.

## AddComponent(EntityQuery, ComponentType)

Obsolete. Use [EntityCommandBuffer.AddComponent](/engine/7000.0/script-reference/unity/entities/entitycommandbuffer/addcomponent.md) instead.

> **Warning:**
>
> **Deprecated.** This method now takes an extra parameter to control when the query is evaluated. To preserve the current semantics, use EntityQueryCaptureMode.AtRecord (RemovedAfter Entities 2.0)

```csharp
public void AddComponent(EntityQuery entityQuery, ComponentType componentType)
```

### Parameters

**** (\[EntityQuery]\(/engine/7000.0/script-reference/unity/entities/entityquery)): The query specifying the entities to which the component is added.**** (\[ComponentType]\(/engine/7000.0/script-reference/unity/entities/componenttype)): The type of component to add.

## AddComponent\<T>(EntityQuery, EntityQueryCaptureMode)

Records a command to add a component to all entities matching a query.

```csharp
public void AddComponent<T>(EntityQuery entityQuery, EntityQueryCaptureMode queryCaptureMode)
```

### Parameters

**** (\[EntityQuery]\(/engine/7000.0/script-reference/unity/entities/entityquery)): The query specifying the entities to which the component is added.**** (\[EntityQueryCaptureMode]\(/engine/7000.0/script-reference/unity/entities/entityquerycapturemode)): Controls when the entities matching `entityQuery` are computed and captured.

### Remarks

Does not affect entities which already have the component.

## AddComponent\<T>(EntityQuery)

Obsolete. Use [EntityCommandBuffer.AddComponent](/engine/7000.0/script-reference/unity/entities/entitycommandbuffer/addcomponent.md) instead.

> **Warning:**
>
> **Deprecated.** This method now takes an extra parameter to control when the query is evaluated. To preserve the current semantics, use EntityQueryCaptureMode.AtRecord (RemovedAfter Entities 2.0)

```csharp
public void AddComponent<T>(EntityQuery entityQuery)
```

### Parameters

**** (\[EntityQuery]\(/engine/7000.0/script-reference/unity/entities/entityquery)): The query specifying the entities to which the component is added.

## AddComponent\<T>(EntityQuery, T)

Records a command to add a component to all entities matching a query. Also sets the value of this new component on all the matching entities.

```csharp
public void AddComponent<T>(EntityQuery entityQuery, T value) where T : unmanaged, IComponentData
```

### Parameters

**** (\[EntityQuery]\(/engine/7000.0/script-reference/unity/entities/entityquery)): The query specifying the entities to which the component is added.**** (T): The value to set on the new component in playback for all entities matching the query.

### Remarks

The set of entities matching the query is 'captured' in the method call, and the recorded command stores an array of all these entities.

Entities which already have the component type will have the component set to the value.

At playback, this command throws an error if one of these entities is destroyed before playback. (With safety checks enabled, an exception is thrown. Without safety checks, playback will perform invalid and unsafe memory access.)

## AddComponent(EntityQuery, ComponentTypeSet, EntityQueryCaptureMode)

Records a command to add multiple components to all entities matching a query.

```csharp
public void AddComponent(EntityQuery entityQuery, in ComponentTypeSet componentTypeSet, EntityQueryCaptureMode queryCaptureMode)
```

### Parameters

**** (\[EntityQuery]\(/engine/7000.0/script-reference/unity/entities/entityquery)): The query specifying the entities to which the components are added.**** (\[ComponentTypeSet]\(/engine/7000.0/script-reference/unity/entities/componenttypeset)): The types of components to add.**** (\[EntityQueryCaptureMode]\(/engine/7000.0/script-reference/unity/entities/entityquerycapturemode)): Controls when the entities matching `entityQuery` are computed and captured.

### Remarks

The set of entities matching the query is 'captured' in the method call, and the recorded command stores an array of all these entities.

Some matching entities may already have some or all of the specified components. After this operation, all matching entities will have all of the components.

At playback, this command throws an error if one of these entities is destroyed before playback. (With safety checks enabled, an exception is thrown. Without safety checks, playback will perform invalid and unsafe memory access.)

## AddComponent(EntityQuery, ComponentTypeSet)

Obsolete. Use [EntityCommandBuffer.AddComponent](/engine/7000.0/script-reference/unity/entities/entitycommandbuffer/addcomponent.md) instead.

> **Warning:**
>
> **Deprecated.** This method now takes an extra parameter to control when the query is evaluated. To preserve the current semantics, use EntityQueryCaptureMode.AtRecord (RemovedAfter Entities 2.0)

```csharp
public void AddComponent(EntityQuery entityQuery, in ComponentTypeSet componentTypeSet)
```

### Parameters

**** (\[EntityQuery]\(/engine/7000.0/script-reference/unity/entities/entityquery)): The query specifying the entities to which the component is added.**** (\[ComponentTypeSet]\(/engine/7000.0/script-reference/unity/entities/componenttypeset)): The types of components to add.
