Skip to main content

Tạo Dino đầ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 một Sub Scene bằng cách chuột phải trong của số Hierarchy chuột phải chọn New Sub Scene > Empty Scene
  • Tạo một GameObject _DinoArchetype thêm component DinoAuthoring và thiết lập thông số.
  • Kéo _DinoArchetype vào sub scene vừa tạo bên trên.
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.