단일 플레이어 엔진이 유효하지 않은 데이터를 얼마나 강력하게 거부해야합니까?


11

싱글 플레이어 게임에서 외부 스크립트에 지정된 구성 요소로 엔티티를 만들려고 할 때 구성 요소 중 하나가 잘못 구성되었을 때 발생하는 것이 더 바람직하다고 생각합니다.

  • 엔진이 해당 구성 요소를 건너 뛰고 엔터티가 잘 작성된 구성 요소만으로 게임 세계에 살도록해야합니까?
  • 아니면 구성 요소 중 하나만 잘못 구성되어 있으면 엔터티를 세상에 전혀 추가해서는 안됩니까?

나는 엔터티에 어떤 일이 발생해야 하는가에 대한 오류를 기록하는 것에 대해 이야기하고 있지 않다.


우리는 싱글 플레이어 또는 멀티 플레이어에 대해 이야기하고 있습니까?
o0 '.

@Lohoris 싱글 플레이어.
Paul Manta

2
대부분의 답변에서 이미 언급했듯이 청중은 누구입니까? 수정 가능한 게임을 만들고 있거나 내부 개발 목적으로 이야기하고 있습니까?
Tetrad

@Tetrad 게임이 가능한 한 모달 친화적이기를 원합니다.
Paul Manta

답변:


11

수정 가능한 게임에 대해 이야기하고 있다면 위의 제안 중 하나를 따르고 싶을 수도 있습니다. 그러나 당신이 당신의 자신의 오류를 롤오버하는 것에 대해 걱정한다면, 그렇게하지 말라고 말하고 싶습니다. 나는 Fail-Fast 의 옹호자가되었습니다 . 이는 것이 오류의 경우 출시 이전에 만든해야합니다의 해결, 당신은 오류가 분명해야한다. 위키 페이지의 맨 아래에 링크 된 기사는 빠른 실패가 좋은 이유와 사용하지 않아야 할시기에 대한 주제를 잘 읽어 볼 수 있습니다.


2
나는 이것이 사용자 오류와 개발자 오류를 구별하는 훌륭한 이분법이라고 생각합니다. 컴파일러 오류는 일반적으로 수정하기가 쉽지만 런타임 / 시맨틱 오류는 가장 큰 이유와 동일합니다.
jhocking

게임이 시작되면 엔진에 엔터티를 수정하는 방법이 포함 된 경우 최소한 실패하기 전에 오류를 해결할 수있는 기회를 주어야합니다.
Blecki

7

게임 개발에서 사용자와 개발자의 구분이 항상 명확하지는 않습니다. "실패"와 같은 표준 프로그래밍 기술은 특히 팀 규모가 커짐에 따라 항상 유리하지는 않습니다.

예를 들어, 기술 아티스트가 타겟팅 개요에 대한 셰이더를 망 쳤을 수 있습니다. 폴백을 중단했다고 가정 해 봅시다. SM4 시스템에만로드되고 있으며, 그는 라인 시스템의 최상위를 차지하고 있기 때문에 눈치 채지 못했습니다. 이로 인해 일부 애니메이션이로드되지 않습니다. 이 애니메이션은 전투 디자이너가 작성한 특정 주문으로 참조됩니다. 마지막으로, 레벨 디자이너가 스폰을 만들려고 노력하고 스폰이 모두 해당 주문을 시전 할 수있게되었습니다. 그러나 이제는 효과가 없어서 주문이 유효하지 않기 때문에 스폰 할 수 없습니다. 디자이너가 항상 최악의 컴퓨터를 가지고 있기 때문에 셰이더가로드되지 않기 때문에 유효하지 않습니다.

따라서 2PM까지 데모가 준비되지 않았으며 투자자는 왜 게임에서 단일 적을 얻을 수없고 프로젝트가 종료되는지 궁금해합니다.

또는 실패를 기록하지만 계속 시도하는 옵션을 선택하면 일부 적 주문 효과가 나타나지 않는 한 게임이 잘 재생됩니다. 그러나 투자자는 어쨌든 그 모양이 무엇인지 모릅니다. 주의.

이런 이유로, 나는 거의 항상 첫 번째 옵션을 옹호합니다-당신이 할 수있는 한 많은 엔티티를 스폰하십시오. 빌드를 수행 할 수있는 사람 (예 : 프로그래머 및 기술 제작자)을 제외하고 데이터를 편집해서는 안되며로드시 항상 100 % 확인하거나 책임이있는 사람이 확실한 경우 문제는 에디터를 사용하는 사람입니다. 그러나 일반적인 경우는 아니며 많은 기술 인프라가 필요하기 때문에 투자 할 준비가되지 않았습니다.


1
좋은 소스 제어 시스템으로 제안한 시나리오를 막을 수 있다고 생각합니다. 시나리오에서 아티스트는 "빌드를 깨뜨 렸습니다". 깨진 쉐이더로 작업하는 다른 사람은 문제가 해결 될 때까지 쉐이더를 이전 버전으로 롤백 할 수 있어야합니다.
존 맥도날드

1
@John 좋은 소스 제어는 필수이며, 실패가 로컬로 해결 될 때까지 프로젝트의 나머지 부분을 작업 상태로 복원하기 위해 롤백이 필요한 경우도 있지만, 예방 메커니즘 으로서는 거의 유용하지 않으며 그렇게 의존해서는 안됩니다. .

@ 존 : 대규모 프로젝트의 경우 빌드에는 몇 시간 (또는 하루 종일)이 걸릴 수 있습니다. 따라서 소스 제어뿐만 아니라 이진 제어가 필요하므로 프로그래머가 아닌 이전 빌드 전체로 롤백 할 수 있습니다. 그러나 물론 다른 나쁜 버그 가있을 수있는 실행 파일을 사용 하여 다른 오래된 콘텐츠와 비교하여 새로운 콘텐츠를 개발하고 있기 때문에 자체 위험과 비용 이 있습니다 . 그리고 롤백하기에 적합한 빌드를 찾는 데 30 분 이상 걸릴 수도 있습니다. 디자이너가 30 분 동안 멈추고 빌드로 바이올린을 조정해야하는 경우 큰 돈이 낭비됩니다.

@Joe Wreschnig : 말이됩니다. 따라서 실패가 더 이상 자산이 아닌 시점이 있어야한다고 생각합니다. 그것을 사용하는 사람들의 유형 또는 특정 규모의 프로젝트에 있습니다. 팀의 사람들이 자신에게 맞는 것을 결정하는 것은 전적으로 사람들의 생각입니다.
존 맥도날드

2
나는 정말로 어려운 하드 페일이 확실하지 않다는 것이 확실하다 . 한 사람 "팀"일지라도이 레벨을 끝내야하기 때문에 셰이더 코드를 다루고 싶지 않을 수도 있습니다. 확실히 좋은 오류 처리를 작성하고 모든 오류를 기록하지만 6 개월 전에 오류 코드를 작성했을 때보 다 지금 당장 중요한 것이 무엇인지 항상 더 잘 알고 있습니다.

1

사용자는 가져올 엔티티를 미리보고 오류가 있는지 미리 알 수 있어야합니다.

어떤 오류를 치명적 일지 결정하여 게임에 추가하지 못하게하고 경고 로 무시할 수있는 방법을 결정해야합니다 .

물론 어떤 이유로 든 가져온 엔티티가 게임 저장 데이터를 되돌릴 수없는 방식으로 변경할 수있는 경우, 결함이 없어야합니다.


0

개발 과정에서 잘못된 데이터에 대해 시끄러워 야한다고 제안합니다. 즉, 읽을 수있는 모든 것을 기록하십시오. 그러나 엔진이이를 무시하고 계속할 수 있다면 그렇게해야합니다. 당신은 같은 논리를 가질 수 있습니다

void setValue(int value) {
    if (value < MIN_VALUE) {
       log(value + " is too low, using " + MIN_VALUE);
       value = MIN_VALUE;
    }
    if (value > MAX_VALUE) {
       log(value + " is too high, using " + MAX_VALUE);
       value = MAX_VALUE;
    }
}

멀티 플레이어 게임에서도 한 명의 플레이어가 시스템을 속이려고한다고 가정하지 않는 한 허용됩니다.

소프트웨어를 출시 한 후에는 플레이어가이 로그를 읽지 않을 것이라는 가정하에 기본적으로이 로깅을 해제 할 수 있습니다.


로그에 성능 문제가 없다고 가정하면 릴리스 빌드에서 로그온을 유지하고 보고서를 개발 팀에 다시 보내야합니다. (물론 플레이어에게 알립니다.)

릴리스를 위해 더 간결한 로그를 기록 할 수 있어야합니다. 개발 과정에서 더 장황한 경향이 있습니다.
피터 로리
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.