# Tạo Entity đầu tiên với ECS

### `<span class="editor-theme-code">DinoTag.cs</span>`

<span style="white-space: pre-wrap;">Tạo một struct trống kế thừa </span>`<span class="editor-theme-code">IComponentData</span>`. Struct này chỉ có tác dụng đánh dấu entity là Dino nên không cần data.

```c#
using Unity.Entities;

public struct DinoTag : IComponentData { }
```

### `<span class="editor-theme-code">MovementData.cs</span>`

<span style="white-space: pre-wrap;">Tạo một </span>`<span class="editor-theme-code">IComponentData</span>`<span style="white-space: pre-wrap;"> chứa dữ liệu cần thiết cho việc di chuyển.</span>

```c#
using Unity.Entities;
using Unity.Mathematics;

public struct MovementData : IComponentData
{
    public float Speed;
    public float3 Direction;
}
```

### `<span class="editor-theme-code">DinoAuthoring.cs</span>`

<span style="white-space: pre-wrap;">Authoring đóng vai trò như một bản thiết kế trên gameObject. Khi chạy game quá trình </span>****baking**** sẽ đọc thông tin từ file này để bake data từ một gameObject tành một Entity

```c#
using Unity.Entities;
using UnityEngine;

public class DinoAuthoring : MonoBehaviour
{
    [SerializeField] private float speed; public float Speed => speed;
}

class DinoAuthoringBaker : Baker<DinoAuthoring>
{
    public override void Bake(DinoAuthoring authoring)
    {
        Entity entity = GetEntity(TransformUsageFlags.Dynamic);
        MovementData movementData = new()
        {
            Speed = authoring.Speed,
            Direction = new Unity.Mathematics.float3(0, 0, 1)
        };
        AddComponent<DinoTag>(entity);
        AddComponent(entity, movementData);
    }
}
```

<span style="white-space: pre-wrap;">Trong Editor: </span>

- <span style="white-space: pre-wrap;">Tạo một Sub Scene bằng cách chuột phải trong của số </span>`<span class="editor-theme-code">Hierarchy</span>`<span style="white-space: pre-wrap;"> chuột phải chọn </span>`<span class="editor-theme-code">New Sub Scene > Empty Scene</span>`
- <span style="white-space: pre-wrap;">Tạo một GameObject </span>`<span class="editor-theme-code">_DinoArchetype</span>`<span style="white-space: pre-wrap;"> thêm component DinoAuthoring và thiết lập thông số. </span>
- <span style="white-space: pre-wrap;">Kéo </span>`<span class="editor-theme-code">_DinoArchetype</span>`<span style="white-space: pre-wrap;"> vào sub scene vừa tạo bên trên.</span>

<details id="bkmrk-t%E1%BA%A1o-sub-scenec%C5%A9ng-c%C3%B3"><summary>Tạo sub scene</summary>

<span style="white-space: pre-wrap;">Cũng có thể tạo sub scene bằng cách chọn các gameObject cần đưa vào sub scene sau đó chuột phải chọn </span>`<span class="editor-theme-code">New Sub Scene > From Selection</span>`

Như thế các gameObject được chọn sẽ tự động được thêm vào sub scene vừa tạo.

</details><details id="bkmrk-ki%E1%BB%83m-tra-entity-v%E1%BB%ABa-"><summary>Kiểm tra Entity vừa tạo</summary>

\- Nếu tạo đúng thì trong của sổ Inspector phía dưới cùng sẽ có Entity Baking Preview như thế này  
[![image.png](https://knowledge.thanhdv.com/uploads/images/gallery/2025-09/scaled-1680-/image.png)](https://knowledge.thanhdv.com/uploads/images/gallery/2025-09/image.png)

<span style="white-space: pre-wrap;">- Hoặc cũng có thể mở cửa số </span>`<span class="editor-theme-code">Entity Hierarchy</span>`<span style="white-space: pre-wrap;"> bằng cách </span>`<span class="editor-theme-code">Window > Entities > Hierarchy</span>`<span style="white-space: pre-wrap;">. Khi chạy game bạn có thể dùng Filter để tìm các Entity có </span>`<span class="editor-theme-code">DinoTag</span>`<span style="white-space: pre-wrap;"> hoặc </span>`<span class="editor-theme-code">MovementData</span>`. Nếu tìm thấy tức là entity đã được tạo thành công.

</details>