Wie stark sollte eine Einzelspieler-Engine ungültige Daten ablehnen?

11

Wenn Sie in einem Einzelspieler-Spiel versuchen, eine Entität aus Komponenten zu erstellen, die in externen Skripten angegeben sind, ist es Ihrer Meinung nach wünschenswerter, wenn eine der Komponenten fehlerhaft ist:

  • Sollte die Engine diese Komponente überspringen und die Entität in der Spielwelt nur mit den Komponenten leben lassen, die gut geschrieben wurden?
  • Oder sollte es die Entität überhaupt nicht zur Welt hinzufügen, wenn nur eine der Komponenten schlecht geformt ist?

Beachten Sie, dass ich nicht über das Protokollieren der Fehler spreche - das sollte selbstverständlich sein -, sondern nur darüber, was mit der Entität geschehen soll.

Paul Manta
quelle
Sprechen wir über Einzelspieler oder Mehrspieler?
o0 '.
@ Lohoris Einzelspieler.
Paul Manta
2
Wie die meisten Antworten bereits angedeutet haben, wer ist Ihr Publikum? Machst du ein modifizierbares Spiel oder sprichst du für interne Entwicklungszwecke?
Tetrad
@ Tetrad Ich möchte, dass das Spiel so modderfreundlich wie möglich ist.
Paul Manta

Antworten:

11

Wenn Sie über ein modifizierbares Spiel sprechen, sollten Sie einem Ihrer obigen Vorschläge folgen. Aber wenn Sie sich Sorgen machen, Ihre eigenen Fehler zu überbrücken, würde ich sagen, tun Sie es nicht. Ich bin ein Verfechter von Fail-Fast geworden . Wenn dies ein Fehler ist, den Sie erstellt haben und der vor der Freigabe behoben werden muss, sollten Sie den Fehler offensichtlich machen. Der Artikel, auf den am Ende der Wiki-Seite verwiesen wird, ist eine gute Lektüre zu diesem Thema. Warum schnelles Scheitern gut ist und wann es verwendet werden sollte und wann nicht.

John McDonald
quelle
2
Ich denke, dies ist eine große Zweiteilung, die zwischen Benutzerfehlern und Entwicklerfehlern unterscheidet. Aus genau dem gleichen Grund ist es sinnvoll, dass Compilerfehler im Allgemeinen recht einfach zu beheben sind, aber Laufzeit- / semantische Fehler der Teufel sind.
Schock
Wenn die Engine eine Möglichkeit zum Ändern der Entitäten nach dem Start des Spiels enthält, sollten Sie sich zumindest die Möglichkeit geben, den Fehler zu beheben, bevor Sie fehlschlagen.
Blecki
7

Die Unterscheidung zwischen Benutzer und Entwickler ist in der Spieleentwicklung nicht immer klar. Standardprogrammiertechniken wie "schnell ausfallen" sind nicht immer vorteilhaft, insbesondere wenn die Teamgröße zunimmt.

Zum Beispiel hat Ihr technischer Künstler möglicherweise den Shader für die Zielkontur vermasselt - sagen wir, er hat den Fallback gebrochen, sodass er nur auf SM4-Systemen geladen wird, und er hat es nicht bemerkt, weil er ein erstklassiges System hat. Dies führt dazu, dass einige Animationen nicht geladen werden können. Auf diese Animationen wird durch einen bestimmten Zauber verwiesen, den Ihr Kampfdesigner geschrieben hat. Schließlich versucht Ihre Leveldesignerin, die Spawns in Position zu bringen, und diese Spawns können diesen Zauber zufällig wirken - aber jetzt kann sie keinen von ihnen auf der Welt platzieren, weil ihre Zaubersprüche nicht gültig sind, weil die Effekte nicht gültig sind Nicht gültig, da die Shader nicht geladen werden, da die Designer immer die schlechtesten Computer haben.

Ihre Demo ist also noch nicht um 14:00 Uhr fertig und Ihre Investoren fragen sich, warum Sie nicht einmal einen einzigen Gegner im Spiel haben können und Ihr Projekt geschlossen wird.

Oder Sie wählen die Option, bei der Sie den Fehler protokollieren, aber versuchen Sie es weiter, und das Spiel läuft einwandfrei, außer dass einige Zaubereffekte der Feinde nicht angezeigt werden - aber die Investoren wissen nicht, wie diese sowieso aussehen sollen, also tun sie es nicht beachten.

Aus diesem Grund werde ich fast immer die erste Option befürworten - so viel von der Entität wie möglich hervorbringen. Es gibt Fälle für Fail-Fast - zum Beispiel, wenn die Daten nur von Personen bearbeitet werden sollten, die Builds ausführen können (z. B. Programmierer und technische Hersteller) und beim Laden immer zu 100% überprüft werden, oder wenn Sie absolut sicher sind, für welche Person sie verantwortlich sind Das Problem ist die Person, die den Editor verwendet - aber dies sind nicht die üblichen Fälle und erfordern per se viel technische Infrastruktur, in die Sie möglicherweise nicht investieren können.

Asche999
quelle
1
Ich würde gerne glauben, dass das von Ihnen vorgeschlagene Szenario mit guten Versionsverwaltungssystemen verhindert werden kann. In Ihrem Szenario hat der Künstler "den Build gebrochen". Alle anderen Personen, die mit dem defekten Shader arbeiten, sollten in der Lage sein, den Shader auf eine frühere Version zurückzusetzen, bis das Problem behoben ist.
John McDonald
1
@John Eine gute Quellcodeverwaltung ist zwar ein Muss, und manchmal ist ein Rollback erforderlich, um den Rest eines Projekts wieder in einen funktionsfähigen Zustand zu versetzen, bis ein Fehler lokal behoben ist. Sie ist jedoch selten als Präventionsmechanismus nützlich und sollte nicht als solcher verwendet werden .
@ John: Bei großen Projekten können Builds Stunden (oder einen ganzen Tag) dauern. Sie benötigen also einen zweigleisigen Ansatz - Sie benötigen nicht nur die Quellcodeverwaltung, sondern auch die Binärsteuerung, damit ein Nicht-Programmierer auf die gesamten vorherigen Builds zurückgreifen kann. Aber das hat natürlich seine eigenen Risiken und Kosten, denn jetzt entwickeln Sie neue Inhalte gegen andere veraltete Inhalte mit ausführbaren Dateien, die möglicherweise andere schwerwiegende Fehler aufweisen. Und selbst das Finden des richtigen Builds zum Zurücksetzen kann mehr als 30 Minuten dauern. Wenn Ihre Designer alle eine halbe Stunde innehalten und mit Builds herumspielen müssen, wird viel Geld verschwendet.
@ Joe Wreschnig: Das macht Sinn. Ich denke, es muss einen Punkt geben, an dem schnelles Scheitern kein Vorteil mehr ist. Entweder bei den Personen, die es verwenden, oder bei Projekten einer bestimmten Größe. Ich nehme an, es liegt an den Leuten im Team, zu entscheiden, was für sie funktioniert.
John McDonald
2
Ich bin mir nicht sicher, ob Fast Hard Fail, worum es bei der Frage wirklich geht, jemals von Vorteil ist. Selbst in einem "Team" einer einzelnen Person möchte ich mich vielleicht nicht mit dem Shader-Code befassen, weil ich dieses Level wirklich schaffen muss. Schreiben Sie sicher eine gute Fehlerbehandlung und protokollieren Sie alle Fehler, aber ich habe fast immer eine bessere Vorstellung davon, was gerade jetzt wichtig ist, als vor sechs Monaten, als ich den Fehlercode geschrieben habe.
1

Der Benutzer sollte in der Lage sein, eine Vorschau der zu importierenden Entität anzuzeigen und im Voraus zu wissen, ob Fehler vorliegen.

Sie sollten irgendwie entscheiden, welche Fehler schwerwiegend sein sollen, um zu verhindern, dass sie dem Spiel hinzugefügt werden, und welche als Warnungen abgetan werden können .

Wenn die importierte Entität aus irgendeinem Grund in der Lage sein könnte, die Savegame-Daten irreversibel zu ändern, sollten Sie natürlich verlangen, dass sie fehlerfrei sind.

o0 '.
quelle
0

Ich würde vorschlagen, dass in der Entwicklung ungültige Daten verrauscht werden sollten. dh alles irgendwo protokollieren, wo es gelesen wird. Wenn Ihr Motor dies jedoch ignorieren und fortfahren kann, sollte er dies tun. Sie können Logik wie haben

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;
    }
}

Selbst in einem Mehrspieler-Spiel ist dies akzeptabel, es sei denn, Sie gehen davon aus, dass ein Spieler versucht, das System zu betrügen.

Nach dem Freigeben der Software möchten Sie diese Protokollierung wahrscheinlich standardmäßig deaktivieren, vorausgesetzt, die Spieler werden diese Protokolle nicht lesen.

Peter Lawrey
quelle
Angenommen, die Protokolle stellen kein Leistungsproblem dar, sollten Sie sich weiterhin in Release-Builds anmelden und die Berichte an das Entwicklungsteam zurücksenden. (Natürlich die Spieler angemessen informieren.)
Sie sollten in der Lage sein, präzisere Protokolle für die Veröffentlichung aufzuzeichnen. In der Entwicklung können Sie dazu neigen, ausführlicher zu sein.
Peter Lawrey