Normalerweise haben Entitäten und Komponenten oder andere Teile des Spielcodes im datengesteuerten Design Namen, die überprüft werden, wenn Sie herausfinden wollen, mit welchem Objekt Sie es genau tun.
%Vor%Wenn Sie die Möglichkeit, dass dies eine vorzeitige Optimierung sein könnte, ignorieren, ist es ziemlich klar, dass Nachschlagen von Entitäten viel schneller wäre, wenn ihr "Name" ein einfacher 32-Bit-Wert anstelle einer tatsächlichen Zeichenfolge wäre.
Computing Hashes aus den String-Namen ist eine mögliche Option. Ich habe es nicht wirklich versucht, aber mit einer Reichweite von 32 Bit und einer guten Hash-Funktion sollte das Risiko einer Kollision minimal sein.
Die Frage ist: Offensichtlich brauchen wir einen Weg, String-Namen in Code (oder in einer Art externer Datei) in diese Ganzzahlen umzuwandeln, da die Person, die an diesen benannten Objekten arbeitet, immer noch auf das Objekt verweisen will als "Wächter" anstelle von "0x2315f21a".
Wenn wir davon ausgehen, dass wir C ++ verwenden und alle im Code enthaltenen Strings ersetzen wollen, können wir dies sogar mit in Sprachen integrierten Funktionen erreichen oder müssen wir ein externes Tool erstellen, das alle Dateien manuell durchgeht und die Daten austauscht Werte?
Jason Gregory schrieb dies auf sein Buch :
Bei Naughty Dog haben wir eine Variante des CRC-32-Algorithmus verwendet, um unsere Strings zu hacken, und wir haben in zwei Jahren Entwicklung auf Uncharted: Drakes Fortune keine einzige Kollision erlebt.
Vielleicht möchten Sie sich das genauer ansehen.
Und über den Build-Schritt, den du erwähnt hast, hat er auch darüber gesprochen. Sie kapseln im Grunde die Strings, die in etwas hashed werden müssen:
%Vor%Und verwenden Sie ein externes Tool zur Build-Zeit, um alle Vorkommen zu hasen. Auf diese Weise vermeiden Sie Laufzeitkosten.
Dafür gibt es Enums. Ich würde es nicht wagen zu entscheiden, welche Ressource für das Thema am besten ist, aber es gibt eine große Auswahl: Ссылка
Dies wird grundsätzlich gelöst, indem eine Indirektion über eine Hash-Map hinzugefügt wird.
Angenommen, Sie möchten Zeichenfolgen in ganze Zahlen konvertieren:
Anmerkungen / Vorbehalte: