VietTechiesHIỂU CÔNG NGHỆ. MỞ GÓC NHÌN.
☰ Chuyên mục

Cách Moonlight Kids xử lý trạng thái vòng lặp thời gian và stream dữ liệu trong Unity 6

08/10/2026 · VietTechies · Biên tập

Minh họa biên tập hiển thị một chiếc đồng hồ cát bằng thủy tinh trong suốt với cát vàng lơ lửng ở giữa, xung quanh là các mảnh vỡ bản đồ phát sáng màu xanh ngọc trên nền xanh hải quân đậm.
Ảnh minh họa do AI tạo.

Studio indie Moonlight Kids cùng nhà phát hành Akupara Games đã chia sẻ chi tiết về kiến trúc hệ thống đằng sau Echo Weaver, tựa game phiêu lưu chủ đề vòng lặp thời gian được phát triển trên Unity 6. Nâng cấp từ phiên bản Unity 2021 LTS vốn từng được nhóm phát triển ba người này sử dụng cho dự án trước đó là The Wild at Heart, studio đã thiết kế các hệ thống stream dữ liệu và quản lý trạng thái tùy chỉnh nhằm duy trì một thế giới liền mạch mà không cần màn hình chờ (loading screen).

Mở khóa bằng tri thức và lưu trữ trạng thái

Thay vì phụ thuộc vào các nâng cấp vật lý vĩnh viễn, Echo Weaver áp dụng tiến trình mở khóa bằng tri thức (knowledge-gated progression): thế giới game liên tục tái lập nhưng người chơi vẫn giữ lại thông tin thu thập được. Để quản lý trạng thái này một cách gọn gàng, nhóm phát triển tách dữ liệu hệ thống thành hai phần: dữ liệu tạm thời của lượt chơi (run) và ký ức vĩnh viễn của nhân vật. Các tuyến đường trên bản đồ và tiến trình cốt truyện đã khám phá được tuần tự hóa (serialize) rồi lưu vào ổ đĩa, trong khi địa hình màn chơi sẽ tự động tái lập trạng thái. Đối với các vật phẩm có thể mang theo trong túi đồ, việc chuyển quyền sở hữu đối tượng trực tiếp sang lớp scene vĩnh viễn đã ngăn tình trạng vật phẩm bị nhân bản hoặc biến mất khi chuyển vùng stream dữ liệu.

Kiến trúc chia khối mô-đun và cơ chế tái lập

Nhằm đảm bảo khả năng stream thế giới liên tục, tựa game chia bản đồ thành các khối không gian (chunk) riêng biệt. Địa hình cố định và các mốc chuyển vùng được tải cố định trong các scene nền. Dữ liệu tạm thời—bao gồm đối tượng người chơi, trình quản lý game (game manager) và các bộ đếm của lượt chơi hiện tại—được đặt trong một scene cơ bản (essentials scene) rất nhẹ. Khi vòng lặp tái lập, hệ thống runtime sẽ hủy tải các khối môi trường đang hoạt động, xóa sạch từ điển khóa chuỗi (string key) lưu tạm trong bộ nhớ, đồng thời giải phóng và khởi tạo lại scene cơ bản trước khi stream khu vực xuất phát ban đầu.

Tối ưu hóa đồ họa và dựng hình

Phong cách đồ họa 2D vẽ tay đã đặt ra những thách thức lớn về bộ nhớ và dựng hình trong quá trình phát triển. Việc bật nén atlas kết cấu (texture atlas compression) giúp giảm mức tiêu thụ bộ nhớ xuống còn khoảng 1 GB. Các tài nguyên trang trí môi trường được tách khỏi các khối bản đồ ngay trong giai đoạn build và khởi tạo lại bất đồng bộ qua nhiều khung hình, tránh hiện tượng quá tải đột ngột trên luồng chính (main thread). Đội ngũ phát triển cũng viết một công cụ làm phẳng sprite tùy chỉnh để gộp các tài nguyên mỹ thuật lặp lại thành một lệnh vẽ (draw call) duy nhất, giảm số lượng texture lớp ánh sáng từ 6 xuống 3, đồng thời thay thế mã gom cụm (pooling) tùy chỉnh cũ bằng C# object pool tích hợp sẵn của Unity cùng Composite Collider 2D. Trong suốt quá trình phát triển, công cụ Frame Debugger của Unity đã được tận dụng tối đa để phát hiện điểm ngắt lệnh vẽ và tối ưu hóa hiệu năng gom nhóm lệnh (batching).

Ảnh minh họa do AI tạo, không phải ảnh tư liệu.

Nguồn: Echo Weaver: Building a time-loop metroidbrainia in Unity 6