# AddSharedComponent

> Adds a shared component to an entity.

## Definition

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

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

Adds a shared component to an entity.

```csharp
public bool AddSharedComponent<T>(Entity entity, T componentData) where T : unmanaged, ISharedComponentData
```

### Parameters

**** (\[Entity]\(/engine/7000.0/script-reference/unity/entities/entity)): The entity.**** (T): The shared component value to set.

### Returns

| Type                                                          | Description                                                                                                 |
| ------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- |
| [bool](https://learn.microsoft.com/dotnet/api/system.boolean) | Returns false if the entity already has the shared component. The shared component value is set either way. |

### Remarks

The fields of the `componentData` parameter are assigned to the added shared component.

Adding a component to an entity changes its archetype and results in the entity being moved to a different chunk. The entity moves to a chunk with other entities that have the same shared component values. A new chunk is created if no chunk with the same archetype and shared component values currently exists.

**Important:** This method creates a sync point, which means that the EntityManager waits for all currently running jobs to complete before adding the component. No additional jobs can start before the method is finished. A sync point can cause a drop in performance because the ECS framework might not be able to use the processing power of all available cores.

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

Adds a shared component to multiple entities

```csharp
public void AddSharedComponent<T>(NativeArray<Entity> entities, T componentData) where T : unmanaged, ISharedComponentData
```

### Parameters

**** (\[NativeArray\<Entity>]\(/engine/7000.0/script-reference/unity/collections/nativearray1)): The array of entities.**** (T): The shared component value to set.

### Remarks

The fields of the `componentData` parameter are assigned to the added shared component.

Adding a component to an entity changes its archetype and results in the entity being moved to a different chunk. The entity moves to a chunk with other entities that have the same shared component values. A new chunk is created if no chunk with the same archetype and shared component values currently exists.

**Important:** This method creates a sync point, which means that the EntityManager waits for all currently running jobs to complete before adding the component. No additional jobs can start before the method is finished. A sync point can cause a drop in performance because the ECS framework might not be able to use the processing power of all available cores.

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

Adds an unmanaged shared component to a set of entities defined by a EntityQuery.

```csharp
public void AddSharedComponent<T>(EntityQuery entityQuery, T componentData) where T : unmanaged, ISharedComponentData
```

### Parameters

**** (\[EntityQuery]\(/engine/7000.0/script-reference/unity/entities/entityquery)): The EntityQuery defining a set of entities to modify.**** (T): The data to set.

### Remarks

The fields of the `componentData` parameter are assigned to all of the added shared components.

Adding a component to an entity changes its archetype and results in the entity being moved to a different chunk. The entity moves to a chunk with other entities that have the same shared component values. A new chunk is created if no chunk with the same archetype and shared component values currently exists.

Chunks that already have component `T` will still update the component value to `componentData`.

**Important:** This method creates a sync point, which means that the EntityManager waits for all currently running jobs to complete before adding the component. No additional jobs can start before the method is finished. A sync point can cause a drop in performance because the ECS framework might not be able to use the processing power of all available cores.
