참고 : 며칠 전에 Stack Overflow에서이를 요청했지만 뷰가 거의없고 응답이 없었습니다. 대신 gamdev.stackexchange를 요청해야한다고 생각했습니다.
이는 이전에 생성 된 컨텐츠를 손상시키지 않고 여러 릴리스 후 업데이트를 통해 절차 생성 시스템을 유지 보수하는 데 대한 일반적인 질문 / 조언입니다.
게임용 절차 콘텐츠를 만들 때 "버터 플라이 효과"문제를 피하기위한 정보와 기술을 찾으려고합니다. 시드 난수 생성기를 사용할 때 반복 가능한 난수 시퀀스를 사용하여 재현 가능한 세계를 만들 수 있습니다. 일부 게임은 생성 된 세계를 한 번 생성 된 디스크에 간단히 저장하지만 절차 생성의 강력한 기능 중 하나는 숫자 시퀀스의 재현성에 의존하여 동일한 방식으로 영역을 여러 번 다시 생성 할 수 있다는 사실입니다. 고집. 특정 상황의 제약 때문에 지속성을 최소화해야하며 가능한 한 순수하게 시드 된 농도에 의존해야합니다.
이 접근법의 가장 큰 위험은 절차 적 생성 시스템의 작은 변화조차도 전 세계를 변화시키는 나비 효과를 일으킬 수 있다는 것입니다. 이것은 플레이어가 탐험하는 세계를 파괴하지 않고 게임을 업데이트하는 것이 매우 까다로워집니다.
이 문제를 피하기 위해 사용한 주요 기술은 여러 단계로 절차 생성을 설계하는 것입니다. 각 단계에는 자체 시드 난수 생성기가 있습니다. 즉, 각 하위 시스템은 자체 포함되어 있으며, 어떤 것이 고장 나더라도 세계의 모든 것에 영향을 미치지 않습니다. 그러나 이것은 게임의 고립 된 부분에 있더라도 "손상"에 대한 많은 잠재력을 가지고있는 것처럼 보입니다.
이 문제를 처리하는 또 다른 방법은 코드 내에서 완전한 버전의 생성기를 유지하고 주어진 세계 인스턴스에 적합한 생성기를 계속 사용하는 것입니다. 이것은 나에게 유지 보수의 악몽처럼 보이고, 누군가 실제로 이것을하면 궁금합니다.
따라서 제 질문은 특히 출시 후 게임 업데이트와 관련하여 나비 효과 의이 문제를 처리하기위한 일반적인 조언, 기술 및 디자인 패턴에 대한 요청입니다. (아쉽게도 그것은 광범위한 질문이 아닙니다.)
나는 언어에 무관심한 질문이지만 현재 Unity3D / C #에서 일하고 있습니다.
최신 정보:
답장을 보내 주셔서 감사합니다.
정적 데이터가 가장 안전하고 안전한 접근 방식 인 것 같습니다. 또한 정적 데이터를 많이 저장하는 것이 옵션이 아닌 경우 생성 된 세계에서 긴 캠페인을 수행하려면 사용 된 생성기의 엄격한 버전 관리가 필요합니다. 필자의 경우 제한의 이유는 모바일 기반 클라우드 저장 / 동기화가 필요하기 때문입니다. 내 해결책은 필수 사항에 대한 소량의 컴팩트 데이터를 저장하는 방법을 찾는 것입니다.
스톰윈드의 "케이지 (Cages)"개념은 사물에 대해 특히 유용한 사고 방식이라고 생각합니다. 케이지는 기본적으로 재 시드 지점으로, 작은 변화, 즉 나비 케이지의 실행 영향을 방지합니다.