Get in touch
or send us a question?
CONTACT

Entity-Component-System

Entity-Component-System (ECS) là một mẫu kiến ​​trúc phần mềm chủ yếu được sử dụng để phát triển trò chơi điện tử để lưu trữ các đối tượng trong thế giới trò chơi. Một ECS tuân theo mô hình “thực thể” với “thành phần” của dữ liệu.

Một ECS tuân theo nguyên tắc thành phần hơn kế thừa, có nghĩa là mọi thực thể không được xác định bởi một “kiểu”, mà bởi các thành phần được liên kết với nó. Việc thiết kế cách các thành phần liên quan đến các thực thể phụ thuộc vào Hệ thống Thành phần Thực thể đang được sử dụng.

Bố cục dữ liệu của các ECS khác nhau có thể khác nhau cũng như định nghĩa cho “các thành phần” và cách chúng liên quan đến một “thực thể”.

Công cụ trò chơi Unity thực hiện hai trong số các bố cục phổ biến nhất.

Bố cục phổ biến nhất được sử dụng trong công cụ trò chơi Unity có các thực thể được gọi là “gameObjects” mà mỗi thực thể giữ một danh sách các thành phần.

Cách bố trí dữ liệu khác giống với thiết kế của cơ sở dữ liệu thường thấy trong Phát triển web . Bố cục có các bảng với các cột của các thành phần. Trong hệ thống này, một “loại” thực thể dựa trên các thành phần mà nó nắm giữ. Đối với mọi “kiểu” thực thể, có một bảng (được gọi là “kiểu mẫu”) chứa các cột của các thành phần khớp với các thành phần được sử dụng trong thực thể. Để truy cập một thực thể cụ thể, người ta phải tìm đúng nguyên mẫu (bảng) và lập chỉ mục vào mỗi cột để lấy từng thành phần tương ứng cho thực thể đó.

Trong cơ sở dữ liệu theo kiểu ECS, các quy trình được gọi là “hệ thống” hoạt động trên tất cả các thực thể có các thành phần mong muốn. Ví dụ: một hệ thống vật lý có thể truy vấn các nguyên mẫu (bảng) có các thành phần khối lượng, vận tốc và vị trí, lặp qua các cột và thực hiện các phép tính vật lý trên các tập hợp thành phần cho mỗi thực thể.

Hành vi của một thực thể có thể được thay đổi trong thời gian chạy bởi các hệ thống thêm, bớt hoặc thay đổi (thay đổi trạng thái của) các thành phần. Điều này giúp loại bỏ các vấn đề mơ hồ của phân cấp kế thừa sâu và rộng thường thấy trong các kỹ thuật Lập trình hướng đối tượng khó hiểu, khó duy trì và mở rộng. Các phương pháp tiếp cận ECS phổ biến có tính tương thích cao và thường được kết hợp với các kỹ thuật thiết kế hướng dữ liệu. Mặc dù một thực thể được liên kết với các thành phần của nó, nhưng các thành phần đó thường không nhất thiết phải được lưu trữ gần nhau trong bộ nhớ vật lý.

Một thực thể chỉ bao gồm một ID để truy cập các thành phần. Ý tưởng là không có mã trò chơi (hành vi) bên trong các thành phần. Các thành phần không nhất thiết phải được định vị vật lý cùng với thực thể, nhưng phải dễ dàng tìm thấy và truy cập bằng cách sử dụng thực thể. Một thực tế phổ biến là sử dụng một ID duy nhất cho mỗi thực thể. Đây không phải là một yêu cầu, nhưng nó có một số lợi thế:

  • Thực thể có thể được giới thiệu bằng cách sử dụng ID thay vì một con trỏ. Điều này mạnh mẽ hơn, vì nó sẽ cho phép thực thể bị phá hủy mà không để lại các con trỏ lơ lửng.
  • Nó giúp lưu trạng thái bên ngoài. Khi trạng thái được tải lại, không cần thiết lập lại con trỏ.
  • Dữ liệu có thể được xáo trộn trong bộ nhớ khi cần thiết.
  • Id thực thể có thể được sử dụng khi giao tiếp qua mạng để xác định duy nhất đối tượng.

Một số lợi thế này cũng có thể đạt được bằng cách sử dụng con trỏ thông minh .