Vui hơn với ES ...
Hiện tại, tôi có một vài hệ thống:
- Trình kết xuất (Thuộc tính kết xuất, Thuộc tính chuyển đổi)
- Chuyển động (thuộc tính Movable, thuộc tính Transform, thuộc tính kết xuất [cho các hộp giới hạn, v.v.))
- Đầu vào (thuộc tính InputReceiver)
- Vân vân.
Tôi đang thêm phát hiện va chạm. Suy nghĩ đầu tiên của tôi là thêm một hệ thống mới thực hiện va chạm. Tôi có ý nghĩa với việc giữ cho thiết bị này tách biệt khỏi Motionhệ thống vì không phải tất cả những thứ chuyển động hoặc hoạt hình đều nhất thiết phải tham gia phát hiện va chạm - máy ảnh, sương mù, v.v. - nhưng dường như điều đó Collisionvà Motionphụ thuộc lẫn nhau.
Khi Motiondi chuyển một thực thể, phép biến đổi cần được xác nhận Collisionvà chuyển động bị hủy hoặc điều chỉnh (nảy, dừng tại một bức tường, v.v.).
Một cách khác là tạo một thuộc tính Collidable duy trì tham chiếu đến một đối tượng va chạm - kd-tree, octree, v.v. được chia sẻ giữa các thực thể có thể va chạm với nhau. Các Motionhệ thống sau đó sẽ kiểm tra các thuộc tính đó, và sử dụng nó để kiểm tra hoặc điều chỉnh phong trào.
Từ góc độ mã, đó là một giải pháp chấp nhận được. Tuy nhiên, từ quan điểm kiến trúc ECS, có vẻ như nó đang đẩy logic vào Motionhệ thống không áp dụng cho tất cả các thực thể có Movablethuộc tính.
Tôi cũng có thể lưu trữ một vector chuyển động trong Movablethuộc tính, và có Colliderhệ thống điều chỉnh Transformkhi cần thiết, nhưng điều đó sẽ liên quan đến việc sao chép chức năng giữa Motionvà Collider, hoặc gọi lại từ Colliderđến Motionvới một số dữ liệu về vị trí va chạm và bề mặt dữ liệu cho thư bị trả lại / phản xạ, vv .
Điều này có thể thuộc nhóm "hack trường hợp đặc biệt" nhưng tôi muốn nhận một số thông tin đầu vào từ những người đã xử lý việc này trước đây mà không tạo ra một tấn mã trường hợp cạnh.
Câu hỏi Một cách tốt để tránh sự kết hợp chặt chẽ giữa các hệ thống chuyển động và va chạm khi dường như chúng đòi hỏi kiến thức về nhau?