Hallo Ihr Lieben.
Ich habe ein neues System, um in Zukunft mehr Dynamik in die Städte zu bringen.
Gebietseffekte
In jeder cm der Landschaft können Parameter wie Kriminalität, Landwert, Umweltverschmutzung, ... abgefragt werden. Die verschiedenen Parameter werden über ein
TextureRenderTarget2D visualisiert.
Die verschiedenen Servicegebäude für die Bewohner verwenden dieses neue System. Servicegebäude erzeugen in der Umgebung verschiedene Effekte. Jeder Effekt hat einen Radius. Zum Rand nimmt der Effekt allmählich ab. Effekte können sich addieren.
Das nachfolgende Bild zeigt den Brandschutz der Feuerwehren. Der Farbklecks in der Mitte symbolisiert gelb=geringer, glau=hohern Brandschutz.
Personen und Gebäude fragen an beliebigen Koordinaten den dort herrschenden Zustand ab und reagieren entsprechend.
Das Aktualisieren der Texture kann live mitverfolgt werden. Wenn man ein neues Gebäude bauen möchte, befindet es sich zuvor auf dem Mauszeiger um den Bauort zu bestimmen. Vor dem Bau eines Servicegebäudes sieht man auf der Karte, welche Effekte das Gebäude bei Vollauslastung hat. Das heißt aber auch wenn eine Feuerwehr nur zu 50 % besetzt ist, die Effektivität darunter leidet.
Sleepy brachte mich auf die Idee.
Was ich ja spannend finden würde wäre mehr Beeinflussung von außerhalb durch verschiedene Ereignisse.
Damit ist es möglich, lokal durch Ereignisse die Brandgefahr zu erhöhen (z.B. weil Jugendliche mit dem Feuer spielen). Mit einer gewissen Wahrscheinlichkeit kann dann dort ein Haus brennen und die Feuerwehr muss anrücken. Hoffentlich ist auf dem Weg kein Stau.
Das System funktioniert prima. Abfragen sind super schnell und Multithread-fähig. Das Aktualisieren der TextureRenderTarget2D erfolgt Asynchron. Der Nachteil ist, das ca. 150 MB mehr RAM benötigt werden.
Statistiken
Um mehr über seine Stadt zu erfahren, können Graphen für eine Vielzahl von Werten angezeigt werden.
Die Graphen aktualisieren sich live. Damit kann zum Beispiel Tendenzen zu den Rohstoffen angesehen und gegebenenfalls eine weitere Fischerhütte bauen werden (Fisch ist die rote Linie im Fenster Graph). Der Graph wird mit dem kostenlosen Plugin "Kantan Charts" gezeichnet.
https://www.unrealengine.com/m…-US/product/kantan-charts
"Kantan Charts" ist modifiziert um auch Asynchron Daten empfangen zu können.
Aller n-Spielsekunden werden Messwerte gespeichert. Damit die Savegames nicht endlos groß werden, werden nur die wichtigsten Punkte gespeichert. Zum Erkennen der wichtigsten Punkte nutze ich den "Swinging Door Algorithmus".
https://support.industry.sieme…s-in-pcs-7?dti=0&lc=de-WW
Für Messwertaufzeichnungen ist dieser Algorithmus nahezu perfekt. Einfach umzusetzen, performant, Streaming-fähig, aber auch verlustbehaftet.
Die wichtigen Punkte werden dann im Savegame zusätzlich komprimiert.
Im Englischen UE4 Beitrag habe ich ein Bild gemacht, wie die Vertices der Straßen aussehen:
https://forums.unrealengine.co…-than-1-million-residents
Straßen sind Procedural Meshs. Je nach Untergrund und Kurvenradien liegen die Segmente unterschiedlich nah beieinander. Im Bild kann man es gut am Hügel sehen, dass die Abstände kleiner werden.