DOTS and DinoHerdSurvival

Một dự án game endless run nhỏ để học về DOTS và UIToolkit

Chuẩn bị

Unity

Dự án được thực hiện trên phiên bản Unity 2022.3.59f1 LTS vì phiên bản này hiện tại (08/2025) đang hỗ trợ rất tốt các thư viện tracking, quảng cáo.

Các thư viện cho DOTS

Trong Unity cần cài thêm các thư viện cho phục vụ cho DOTS

Khái niệm cơ bản về trong DOTS

Lưu ý

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

DinoTag.cs

Tạo một struct trống kế thừa IComponentData. Struct này chỉ có tác dụng đánh dấu entity là Dino nên không cần data.

using Unity.Entities;

public struct DinoTag : IComponentData { }

MovementData.cs

Tạo một IComponentData chứa dữ liệu cần thiết cho việc di chuyển.

using Unity.Entities;
using Unity.Mathematics;

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

DinoAuthoring.cs

Authoring đóng vai trò như một bản thiết kế trên gameObject. Khi chạy game quá trình baking sẽ đọc thông tin từ file này để bake data từ một gameObject tành một Entity

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);
    }
}

Trong Editor:

Tạo sub scene

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 New Sub Scene > From Selection

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

Kiểm tra Entity vừa tạo

- 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

- Hoặc cũng có thể mở cửa số Entity Hierarchy bằng cách Window > Entities > Hierarchy. Khi chạy game bạn có thể dùng Filter để tìm các Entity có DinoTag hoặc MovementData. Nếu tìm thấy tức là entity đã được tạo thành công.