Beiträge von Exaran

    Es geht um Array Performance im Editor, wie ich oben bereits geschrieben habe.

    Verbinde ich ein Array mit einem "SetArray" node, dauert es in diesem Component ca. 5 Sekunden.

    Da ich ganze viele verbinden muss ist das extrem nervig.

    Das möchte ich gerne beschleunigen.


    ...

    2. Deine Einträge filtern zb durch Tags oder IDs. Lieber nummern suchen als Strings.

    ...

    Das mit den IDs hatte ich auch schon aber wie stellst du sicher das die ID nicht bereits anderswo vergeben wurde?

    Weil wenn mehrere Spieler in das Gleiche Inventar gucken (was auch immer das sein mag), besteht ja immer eine Chance das Gegenstände eine gleiche ID haben und das würde zu Fehlern führen.

    Man müsste die Zahl der ID so riesig machen das die Wahrscheinlichkeit klein bleibt. Dieses Prinzip habe ich bei dem Quest-System gemacht aber ich finde das keine gute Lösung. Weil die Chance besteht das eine andere Quest die gleiche ID hat = Fehler.



    ...

    Mich würde immer noch interessieren was du genau vor hast und warum dass so riesige Daten sind. Dann kann man dir doch viel besser helfen wie du das aufbauen kannst.

    Jeder Gegenstand und jede Gegenstandsart braucht ja unterschiedliche Informationen. Ein Fahrzeug hat diese und jene Informationen, eine Waffe andere und Gebäude wieder andere usw.

    Hätte ich nur ein Datenbanksystem wäre die suche zwar bequemer aber sorgt auch für mehr Last.

    Der Geschwindigkeitsvorteil ist doch das man nur in der richtigen Datenbank suchen muss und nicht in der einen großen, weil genau das killt ja die Performance.

    Wenn man dann seine 100.000 Items und mehr hat, das in der Mitte suchen hört sich prima an, aber was ist wenn man die Übersicht verliert wonach man sucht. Dann muss man alles durchsuchen. Bei so vielen Gegenständen erhalten diese auch sehr unübersichtliche Bezeichnungen usw.

    Das ist mir schon sehr häufig passiert das ich nach einem Gegenstand in einer mega Datenbank suche aber diese nicht mehr finde, weil diese zu groß geworden ist.

    Daher habe ich das alle eingeteilt in die 6 Datenbanken und bei einer Replication Anfrage, wird auch nur diese übertragen und alle anderen nicht (spart Performance ein).


    Ich durchsuche nicht alle 6 Datenbanken, sondern immer nur die eine.


    Darum geht es hier nicht, sondern das ich im Editor den Lag habe!

    Nicht im Spiel.

    1. Das Problem ist das nach keinem Array Item gesucht wird!
    Ich vermute wir verstehen uns falsch, dass Array ist leer.


    2. Das mit der Tag-Idee habe ich durch die 6 unterschiedlichen Datenbanken gelöst, weil das in anderen Spielen zu massiven Performance Problemen geführt habe wenn man dies über ein System laufen lässt. Daran habe ich schon optimiert.


    3. Ich mache das ohne IDs weil ich darin keinen Sinn sehe das zutun, das hatte ich damals schon drinnen. Musste aber feststellen das die Gegenstände einzigartig sein können (also jede gleiche Waffe ist für sich einzigartig in den Werten), also muss sowieso alles separat durchsucht werden. Daher verwende ich "Array with Break". Es sei denn du meinst damit etwas anderes. Wenn ich in der Datenbank suche verwende ich den Namen als Suchfilter und keine Zahl. Z.B. wenn ich ein Basis-Gegenstand erzeugen muss, dieser dann später modifiziert wird.


    4. Das habe ich soweit schon integriert, nur eben die Datenbank Arrays müssen separat sein.



    Das mit dem schnelleren Kisten übertragen fehlt mir noch an der Stelle. Dafür sind die ganzen Gegenstände bereits gestapelt. Also Anstatt 100 (Item) x 1 Munition, habe ich 1 (item) Munition mit 100 Schuss. Da muss ich noch gucken wie ich das in Zukunft besser optimieren kann.


    Aktuell ist es mir derzeit wichtiger das ich dieses Jahr noch den ersten Gameplay Trailer machen kann.


    Der lag kommt nicht durch die Suche nach Gegenstände (weil ich das bereits vorher separiert habe, so wie du angegeben hast in unterschiedliche Arrays. Im Spiel funktioniert es wunderbar und ohne Lags oder Performance Probleme.)


    Es geht nur darum das, dass Verbinden der Array Nodes im Editor die Lags verursacht.

    Das kann gut möglich sein.


    Alleine das Löschen der ungenutzt Variablen hat schon 21 Sekunden gedauert. Hmhm


    Aber wie soll man alternativ so viele Informationen hineinpacken die gespeichert werden müssen?


    Wie sieht Code Optimierung aus?


    Was ist ein Batch Operation?

    Hallo zusammen!


    Bin gerade dabei mein Inventarsystem zu finalisieren und da kommt mir ein komisches Problem, es bezieht sich auf den Unreal Engine Editor 5.3.

    Mein Computer ist stark genug und ich sehe da auch keine Leistung-/Auslastungen-/Temperaturen- Probleme. Alles im grünen Bereich, also muss das am Editor liegen.

    Das gleiche habe ich auch in einem anderen Test-Projekt!


    Das ganze Inventarsystem habe ich in eine externe "Component" integriert, die dann mit den anderen Actors verbunden ist (damit diese damit interagieren können).



    Wenn ich eine Array Variable durch eine andere austauschen muss, dann dauert diese ca. 6 Sekunden (während dessen hängt der Editor).

    Da ich sehr sehr sehr viele Array Variablen austauschen muss, wird das ganze zu einer extremen Tortur und je mehr ich austausche (weil ich 6 Struct Systeme habe, muss ich also das ganze 6x wiederholen).

    Bei anderen Variablen habe ich das Problem nicht oder es fällt nicht auf. Ich kann die Ursache davon auch nicht finden.
    Es kommt mir so vor, als wenn der Editor mit jeder Array Verbindung versucht, alle Dateien im Projekt zu durchforsten ob es da irgendwo Querverbindungen gibt, was diese Zeit Verzögerung bedeutet.

    Am liebsten wäre es mir wenn man alle 6 Structs in eine geteilte Variable setzten könnte, um diese dann zu filtern.
    Die Frage ist ob das ganze dann im Multiplayer bei vielen Spielern zu anderen Probleme führt?


    Danke für eure Infos.


    Bilder kann ich dazu keine Machen, weil es einfach für ein paar Sekunden hängt und dann geht alles wieder weiter. Das Probleme habe ich eben NUR bei den Array-Variablen der Structs.

    Wie kann man eigentlich den Tastenbefehl und den Namen von einem Enhanced Input Action erhalten?


    Es gibt das get davon aber nur als Bool. Da müsste normal der "Key" und "KeyName" sein, damit man entsprechend diese Information weitergeben kann. Diese brauche ich um im Spiel sichtbar zu machen mit welcher Taste man was machen kann. Aber das gibt es nicht :(

    Es gibt ein "InputActionObjectReference" der das Action Description beinhaltet, aber dafür gibt es wiederum kein Anschluss :(

    Ok hat sich erledigt.


    Der Fehler lag darin das "AiPerception Component" in meinem MyCharacter (Blueprint Actor) war (was auch die Spielfigur ist). Nun habe ich diese separat in den AiControllerClass umgelegt und nun erscheint auch nicht mehr der Fehler.


    Falls das jemand wissen möchte. :)

    Noch eine Frage zu einem anderen Thema, zu dieser Fehlermeldung:

    "LogAIPerception: Warning: UAIPerceptionComponent::OnRegister: Perception Component is being registered with Haendler_C_UAID_2CF05D835792F79F01_1473419535, they are designed to work with AAIControllers!"



    Ich verstehe diesen Fehler nicht.

    Die "Heandler" NPCs haben einen AiController, sonst würden die nicht funktionieren, trotzdem erscheint die Fehlermeldung das kein AiController vorhanden ist.
    Überprüft habe ich es, alle NPCs haben einen AiController.


    Hat da jemand eine Idee dazu?

    Ahoi zusammen!

    Habe mein Quest System überarbeitet und muss nun das Datum einbauen.

    Das Problem ist das Unreal Engine irgendwie nicht Datisch denken kann.


    Siehe Bild:


    Problem:
    Heute ist der 10.10.2023

    Mache ich ähnlich wie im Bild +21 bei Day, wird das Datum entsprechend auf den 31.10.2023 gesetzten. Es funktioniert also fehlerfrei!

    Jedoch bei +22 wird nicht 01.11.2023 gesetzt, sondern 01.01.001 (fehlerhaft).


    Also kurz gesagt, die Unreal Engine kann irgendwie nicht die Monate umschalten. Daher die Frage wie man das tut.


    Danke für eure Infos!

    Ist das ganze mit viel Aufwand verbunden, also ein Häkchen irgendwo setzten und gut ist oder muss das ganze sehr intensiv eingepflegt und aktualisiert werden.?

    Hi zusammen!


    Ich stoße sehr häufig auf Situationen in der ich über einen Delay oder anderes... falsch weiterführen muss.


    Damit meine ich etwa als Beispiel: (Es gibt unzählige andere Beispiele in der überprüft werden muss ob die Aktion wirklich ausgeführt wurde.)

    Wenn die Spielfigur durch den Start-Teleporter läuft und auf der anderen Seite am Ziel-Teleporter ankommt, soll ein Sound abgespielt werden.

    Leider geht das ganze aber nur mit einem (nicht optimal) Delay, weil der Sound laut dem Script-Ablauf vorher abgespielt wird, als der Charakter dort im Multiplayer ankommt. Es geht darum das man am Teleporter hören soll ob da etwas ankommt oder nicht, also nicht bei dem Client (als 2D sound).

    Also die Zeit Verzögerung wann der Charakter dort tatsächlich ankommt ist unbekannt (abhängig von der Internetverbindung, von der Rechenleistung ((also wann der Char wirklich da ist))).

    Das bedeutet ich bräuchte irgendwas womit ich überprüfen kann ob etwas (eine Art Bremse) tatsächlich da ist, wo es sein soll. Es könnte ja sein das der Character erst nach 10 Sekunden dort ankommt (weil der PC noch so lange laden muss oder warum auch immer).


    Ich hoffe ihr versteht was ich damit meine.


    Das ganze nur über einen möglichen Delay laufen zu lassen ist eine Katastrophe!



    Das Problem habe ich überall in der ich nicht überprüfen kann ob das gewünschte auch tatschlich ist.

    Z.B. ob die Waffe nun ausgerüstet ist (wegen Delay usw.), da kann es passieren das die Ausrüstungsanimation früher erfolgt als diese sollte.

    So, habe es nun endlich hinbekommen das die Stacks entsprechend bei dem Herstellen von Gegenständen korrekt abgezogen (ReverseForEachLoop sei Dank!).

    Dachte schon ich müsste das ganze abbrechen und für die erste Vorstellung des Spiels im Video irgend eine Mogelei einbauen damit das nicht auffällt... aber es geht wunderbar!


    Bisher zwar nur einfach, also ohne Berücksichtigung der Qualitäten (wobei es nicht nur die Qualitäten sondern auch die Inhalte ((Namen, Beschreibung, Zugehörigkeiten)) sind).

    Also wenn Eisenbarren "Made in Sonstwo" sind, werden diese separat gestapelt, unabhängig von der Qualität. Die Qualität hat mehr die Auswirkung auf die effektive Haltbarkeit und den Bruchwert des Gegenstandes. Mindere Qualität sorgt dafür das die Waffe weniger aushält und schneller dauerhaft kaputt geht. Um das mal für den Anfang primitiv einfach zu halten.


    Jetzt muss ich das ganze noch für den Spielerhandel, für die Quest-Belohnung usw. machen.

    Dazu muss ich noch ein System machen bei dem es unregelmäßig das Inventar aktualisiert und gegeben falls die Gegenstände neu zusammen stapelt. Nicht das irgendwann mal 1x, 1x, 1x, 1x,1x, Eisen habe usw., obwohl man das ganze stapeln könnte.



    Habe das ohne ein Schatteninvenar gemacht, weil man zugleich auch als fremde Person das Inventar einer anderen Person manipulieren kann. Sonst kommt das ganze System zu sehr durcheinander. Auf ein Drag&Drop habe ich bisher noch verzichtet (auch wenn es bequemer wäre), aber das ganze Inventar wird sowieso noch mal in der Zukunft erweitert, angepasst und vielleicht abgeändert.


    So Sachen wie das stecken von Materialien in die Materialslots (Werkbank usw.) oder das aneinanderreihen der Materialien in der Richtigen Position, um unterschiedliche Dinge herstellen zu können... das wäre schon geil, aber das schaffe ich derzeit alleine nicht.


    Vielen Dank an euch allen für die Informationen!

    Manchmal ist das ganze echt so undurchsichtig wie man diverse Dinge am sinnvollsten einbauen soll. Das Inventar + die damit zusammenhängen sind ja essentiell für jedes Spiel.

    Also deine maximale Stapelgröße darf in dem Fall natürlich nicht kleiner sein, als die Stapelgröße, die dein Rezept benötigt. Es sei denn du hast, ähnlich wie in Minecraft, einen Craftingtable, in den du größere Stacks reinpacken darfst.

    Ansonsten, nimm dein Schatteninventar zur Berechnung, welches halt nicht in Stacks aufgeteilt ist.

    Du meinst von 3x10 Eisen in 1x30 Eisen umwandeln für die Berechnung der Kosten? Dann wieder zurück in 3x10 Eisen (als Beispiel).

    Speichere doch die Gesamte Menge und nicht jeden Stapel einzeln.


    Wenn du im Widget das Inventar abfragt, kannst du die Anzahl Stapel ausrechnen und den Rest auf den letzten Stapel verteilen.


    Was doch eigentlich zählt ist die gesamtmenge.

    Bitte erneut lesen, habe es gerade in dem Augenblick bearbeitet wo du was geantwortet hast ^^

    Ne nicht so ganz wie du meinst.


    Im Rezept habe ich die Gegenstände unabhängig ihrer Stapelgröße zusammengezählt, weil das so einfacher ist.

    Rezept (benötigt Gegenstände):

    1x 10 Eisen

    1x 3 Holz

    1x 2 Leder


    ---

    Im Inventar sind die Gegenstände aufgeteilt, jeweils in ihrer bis zu maximalen Stapelgröße.

    Inventar (Vorhanden):

    5x Eisen (5/5 Stack)

    5x Eisen

    8 Holz (8/10 Stack)

    1x Leder (1/1 Stack)

    1x Leder

    1x Leder


    Es scheitert daran das die Abfrage unterschiedlich ist, Rezept braucht als Beispiel 1x10 Eisen, im Inventar sind jedoch 2x5 Eisen vorhanden.


    Das Problem ist, ich müsste die ganzen gestapelten Gegenstände im Inventar wieder zusammen zählen. Sozusagen vom Inventar 2x5 Eisen zu nun 1x 10 Eisen. Damit ich diese 1:1 mit dem Rezept verrechnen kann.



    Bin mir nicht sicher ob ich das nun falsch mache, wenn ich Z.B. 5x 10 Eisen im Inventar habe (Also 5 Gegenstände im Array), anstatt 1x50 Eisen (mit einem Gegenstand im Array.)

    Das hatte ich zuvor, aber da wollte ich dies wiederum unterteilen in die Stapelgrößen, was wiederum dazu führte, das ich das direkt im Inventar Stapeln muss. Weil diese unterschiedliche Inhalte haben können.

    Es könnten z.B. Insgesamt 50 Eisen da sein, jedoch können davon wiederum 5 Eisen in schlechter Qualität, 10 in guter Qualität usw. sein. Das muss ich ja separat stapeln. Also brauche ich sozusagen ein System (was jetzt vorhanden ist), um die ganzen Sachen zu unterteilen.


    Später sollen auch Slot-Systeme hinzukommen, wozu ich dann sowieso dieses aktuelle Systeme brauche. Nur muss ich das ganze nun Gegenrechnen. Es sei denn ich bin auf dem Holzweg mit meinem Inventar-System und man macht das in der Spieleindustrie anders?