LƯU Ý: Tôi đã hỏi điều này trên Stack Overflow vài ngày trước nhưng có rất ít lượt xem và không có phản hồi. Hình tôi nên hỏi trên gamdev.stackexchange.
Đây là một câu hỏi / yêu cầu chung để được tư vấn về việc duy trì một hệ thống tạo thủ tục thông qua nhiều cập nhật sau phát hành, mà không phá vỡ nội dung được tạo trước đó.
Tôi đang cố gắng tìm thông tin và kỹ thuật để tránh các vấn đề "Hiệu ứng cánh bướm" khi tạo nội dung thủ tục cho các trò chơi. Khi sử dụng trình tạo số ngẫu nhiên có hạt, một chuỗi lặp ngẫu nhiên có thể được sử dụng để tạo ra một thế giới có thể tái tạo. Mặc dù một số trò chơi chỉ lưu thế giới được tạo vào đĩa sau khi được tạo, một trong những tính năng mạnh mẽ của việc tạo thủ tục là bạn có thể dựa vào khả năng tái tạo của chuỗi số để tạo lại một vùng nhiều lần theo cùng một cách, loại bỏ nhu cầu kiên trì. Do những hạn chế của tình huống cụ thể của tôi, tôi phải giảm thiểu sự kiên trì và cần phải dựa vào sự tập trung hoàn toàn hạt giống càng nhiều càng tốt.
Mối nguy hiểm chính trong phương pháp này là ngay cả sự thay đổi nhỏ nhất trong hệ thống tạo thủ tục cũng có thể gây ra hiệu ứng cánh bướm làm thay đổi toàn bộ thế giới. Điều này làm cho nó rất khó để cập nhật trò chơi mà không phá hủy thế giới mà người chơi đang khám phá.
Kỹ thuật chính mà tôi đã sử dụng để tránh vấn đề này là thiết kế việc tạo thủ tục theo nhiều giai đoạn, mỗi giai đoạn có trình tạo số ngẫu nhiên giống. Điều này có nghĩa là mỗi hệ thống phụ được khép kín và nếu một cái gì đó bị phá vỡ, nó sẽ không ảnh hưởng đến mọi thứ trên thế giới. Tuy nhiên, điều này có vẻ như vẫn có nhiều khả năng "phá vỡ", ngay cả khi trong một phần bị cô lập của trò chơi.
Một cách khác có thể xử lý vấn đề này có thể là duy trì các phiên bản hoàn chỉnh của trình tạo của bạn trong mã và tiếp tục sử dụng trình tạo đúng cho một thể hiện thế giới nhất định. Điều này có vẻ như là một cơn ác mộng bảo trì đối với tôi và tôi tò mò liệu có ai thực sự làm điều này không.
Vì vậy, câu hỏi của tôi thực sự là một yêu cầu cho lời khuyên, kỹ thuật và thiết kế chung - các mẫu thiết kế để xử lý vấn đề này về hiệu ứng cánh bướm, đặc biệt là trong bối cảnh cập nhật trò chơi sau khi phát hành. (Hy vọng đó không phải là một câu hỏi quá rộng.)
Tôi hiện đang làm việc trong Unity3D / C #, mặc dù đây là câu hỏi bất khả tri về ngôn ngữ.
CẬP NHẬT:
Cảm ơn vì câu trả lời của bạn.
Nó trông ngày càng giống dữ liệu tĩnh là cách tiếp cận tốt nhất và an toàn nhất, và cũng vậy, khi lưu trữ nhiều dữ liệu tĩnh không phải là một lựa chọn, có một chiến dịch dài trong một thế giới được tạo sẽ yêu cầu sử dụng phiên bản nghiêm ngặt của các máy phát. Lý do cho sự hạn chế trong trường hợp của tôi là nhu cầu lưu trữ / đồng bộ hóa trên nền tảng di động. Giải pháp của tôi có thể là tìm cách lưu trữ một lượng nhỏ dữ liệu nhỏ gọn về những thứ thiết yếu.
Tôi thấy khái niệm "Lồng" của Stormwind là một cách suy nghĩ đặc biệt hữu ích về mọi thứ. Một cái lồng về cơ bản là một điểm khởi động, ngăn chặn các hiệu ứng chạy dọc của những thay đổi nhỏ, tức là nhốt con bướm.