Beiträge von Barni

    So habe ich es jetzt auch gemacht. "For Each Loop with break", durchsucht einen Array den ich mit "all widgets of class" erstellt habe.

    Klingt jetzt hier in einem Satz geschrieben doch recht einfach, ist aber schon ein ganz schönes Gefrickel gewesen, bis das richtig funktioniert hat.

    Es kamen noch die OptionsButtons dazu und es musste auch der DataTable mit rein, der neue Daten liefern muss, sobald ein Button gedrückt wird.

    Wie es halt so ist, anfangs denkt man noch "och geht bestimmt einfach zu realisieren" und dann stellt man fest, hoppla, hier passiert was seltsames, da brauche ich noch das und das hier funktioniert gar nicht so wie gedacht ;)


    Den Loop in ein Makro zu verpacken ist eine gute Idee die ich mir noch ansehe. Muss das Ding jetzt sowieso erstmal aufräumen. Da kann ich solche Optimierungen umsetzen. Das mit dem Funktionen starten um andere Actor zu beeinflussen, b.z.w zB Verknüpfung mit einem QuestSystem fehlt auch noch.


    Danke aber erstmal für deine Denkanstöße

    Ja das ist möglich. Ich würde es auch eher als InstantMessager mit vordefinierten Antwortmöglichkeiten bezeichnen :).


    Mit einer isOpen Variable wird es leider nicht ganz realisierbar sein. Ich brauche schon einen eindeutigen Identifier für jede Nachricht die aufplopt. Ich gebe aber beim Start eines Dialogs auch den DialogStarter als Input mit in meine DialogSystem Funktion. Diesen kann ich als Identifier verwenden, da es nicht mehrere Dialogfenster von ein und dem selben DialogStarter geben soll.



    Woran ich jetzt aber hänge ist, wie bekomme ich die im Widget angelegte Variable "MessageIdentifier" aus dem Array der Childs meines MessagerWindow um zu prüfen ob es mit dem MessageStarter übereinstimmt?


    Danke Tomarr das könnte für mein Vorhaben funktionieren, über Interfaces. Ich werde mich damit befassen.


    Tatsächlich bin ich auch schon weiter gekommen, was das DialogState wechseln angeht. Ich habe es so gemacht, dass ich im ButtonWidget eine Variable habe, welche beim erstellen und hinzufügen des Buttons in das Dialogfenster mit dem angestrebten Dialogstate gefüllt wird. Im Button Blueprint gehe ich einfach über das ClickEvent wieder ins DialogSystem und starte meinen Event "NextDialogPart" mit dem Input des State Integer, was mit dann aus dem DataTable das passende holt.



    Soweit funktioniert es. Aber natürlich machen sich neue Probleme auf:


    - Wie kann ich bestimmte Dialogfenster Identifizieren und prüfen ob es bereits geöffnet ist. Die Sache ist, derzeit starte ich den Dialog per OverlapEvent einer Sphere.

    Ich schließe ihn aber nicht automatisch wieder. Overlapt mein PlayerCharacter die Sphere mehrmals, öffnet sich das Dialogfenster in der VerticalBox die ich nutze mehrmals untereinander. Die Buttons sprechen beim Click immer den letzten gestarteten Dialog an. Ich brauche also etwas, um die Dialoge zu prüfen ob diese bereits geöffnet sind, welche Dialoge beim drücken von Buttons angesprochen werden sollen, auch wenn mehrere verschiedene geöffnet sind, was geplant ist...

    Möglicherweise bekomme ich das hin, indem ich meinen Dialogen ebenfalls eine Variable gebe welche dann in einem Array gespeichert wird, sobald sich ein Dialog auf macht. Daran kann ich dann vllt bestimme Dialogfenster ansprechen.



    Der Screenshot zeigt mein Problem, der gleiche Dialog ist zwei mal in der Vertical Box geöffnet worden als ich zwei mal durch die Sphere durch bin. Ich habe den Button "Andocken an Frachthafen" gedrückt und im unteren Dialog springt es zum DialogState 4...


    Hallo Leute, eine weitere Frage,


    ich habe ein DialogSystem angefangen, auf DataTables basierend.

    In meinem DataTable habe ich neben DialogText etc. auch ein Array erstellt, welches einen Text und einen DialogState Integer beinhaltet, aus welchen ich meine Antwortoptionen als Buttons erstellen möchte.


    Nun möchte ich irgendwie an den Button meinen DialogState Integer heften, so dass bei einem Click auf den Button der Dialog weiter geführt wird, und zur nächsten State springt, ein Dialog eben.

    Auch möchte ich die Möglichkeit einbauen, dass beim Click auch ein Event b.z.w eine Funktion getriggert werden kann. Beispielsweise, dass der Actor mit dem der Dialog geführt wird in den Angriffsmodus wechselt oder ähnliches.


    Meine Fragen:

    - Wie gebe ich dem Button einen Click Event und den anzuspringenden DialogState aus dem DataTable mit. Ich habe es mit "CreateEvent" versucht und mit "Bind Event to On Clicked" versucht, allerdings kann ich den State nicht mitgeben um den Dialog weiter führen zu können. Wie würdet ihr so etwas umsetzen?


    - Des weiteren frage ich mich wie ich auch eine andere Funktion triggern kann die das Verhalten oder Aktion des DialogActors beeinflusst. Woher bekomme ich die Funktion? Kann ich evtl die Funktion mit aus dem DataTable übergeben?

    Muss die Funktion im Blueprint meines DialogSystem geschrieben sein, oder kann ich einen anderen Actor ansprechen wie beim Angriffsmodus Beispiel. Kann ich evtl. auch eine FunctionLibrary verknüpfen?

    Danke für deine Anwort Sleepy

    Das Levelstreaming hatten wir schonmal in einem anderen Beitrag/Frage von mir angesprochen. Auf jedenfall ein Thema welches interessant ist und sicher tolle Möglichkeiten eröffnet. Werde ich mich sicher noch damit beschäftigen. Derzeit bin ich aber noch überhaupt nicht an dem Punkt, an dem ich anfange die Welt zu bauen bzw die "Level" aufbaue welche ins fertige Spiel kommen.


    Aktuell baue ich an den Spielmechaniken und alles was in Richtung Level geht, dient nur dem testen dieser.




    Zu dem "Tor" und Beitragsthema:

    Was es dann wirklich für Funktionen sind die beim Overlap gefeuert werden ist erstmal nebensächlich. Es geht darum, dass ich die Overlapfunktion an den verschiedenen Stellen, wenn ich das "Tor" verwende überschreiben kann. Möchte einfach nicht für jede Funktion einen neuen "Tor"-Actor mit eigener Overlapfunktion erstellen.

    Hallo Leute,


    könnt ihr mir einen Denkanstoß geben?: Ich habe einen Actor, ein "Tor" durch das ich mich bewegen kann und ein OverlapEvent triggert.

    Diesen Actor "Tor" habe ich in einen anderen Actor geladen (als Child). Ich könnte jetzt im Parent natürlich die Funktion festschreiben, welche bei overlap ausgeführt werden soll. Da ich aber das "Tor" gerne für verschiedenste Sachen verwenden möchte und nicht für jede Aktion einen neuen Actor (Parent) anlegen möchte, brauche ich eine Art Liste an möglichen Aktionen und etwas was angibt, welche Aktion ausgeführt werden soll.


    Als Beispiel würde ich gern an einer Stelle einfach einen Zähler hochschalten, wie bei einem Hinderniskurs oder sowas. Bei einer anderen Anwendung möchte ich, dass der Player automatisch zu einer Position läuft/fliegt. Wieder bei einer anderen vllt ein Level geladen wird etc... Hier möchte ich die Erweiterbarkeit erhalten.


    Wie würdet ihr sowas umsetzen?


    PS: Gibt es vllt eine Art FunctionsBilbliothek die ich an verschiedenen Stellen (Actors) einbinden kann und aufrufen?

    Huhu,

    Exaran

    Ich habe mir deine Beitrag zu deinem Editor Performance Problem durchgelesen und diesen neuen Post auch. Da du in deinem anderen Beitrag geschrieben hast, dein Item/Datenmanagement baut derzeit auf großen Arrays auf, wirst du wenn du dein Spiel als multiplayerfähiges Spiel im großen Stil anbieten willst, nicht um Datenbanken herum kommen. Auch das Durchsuchen der SQL Datenbanken über PrimaryKeys (einzigartige) ist wie beschrieben der Suche nach Stings vorzuziehen. Schon alleine aufgrund des Fehlerteufels der sich viel zu leicht einschleicht ;).


    Als Beispiel:

    Du hast eine Datenbanktabelle in der du deine Spieler/Benutzerdaten verwaltest. Ein Benutzer hat z.B. in dieser Tabelle den einzigartigen PrimaryKey "23452", nun werden deine erstellten Helden über diesen Key "23452" in einer eigenen "Helden"Tabelle mit dem Benutzerkonto verbunden. Die Helden haben eigene einzigartige PrimaryKeys, über welche du jetzt in einer weiteren "Inventar"Tabelle das Inventar des Helden verbindest. In dieser speicherst du aber auch keine Itemdaten, bzw wieder nur Keys, die auf eine weitere Tabelle zeigen und dort dann endlich die Itemdaten drin stehen.


    Ist einfacher umzusetzen, als es sich hier ließt, wenn man es ein bisschen verstanden hat. Auch ist es ordentlich und recht leicht anpassbar.

    Ich arbeite mit großen Datenbanken, leider (noch) nicht mit der UE. Denke aber, es wird sich nicht sehr groß unterscheiden. Daher kann ich dir leider jetzt auf zackzack aber keine Blueprintbeispiele posten. Muss ich mich erst selbst mit befassen wie es bei UE geht und was geht.


    tl:dr

    Daher empfehle ich dir, dich mit der Mechanik Datenbanken zu beschäftigen. Das wird dein Spiel für multiplayerfähigkeit ganz sicher brauchen. Möglicherweise, soll ja oft vorkommen, eröffnen sich dir ganz neue Wege ans Ziel zu kommen, an die du jetzt noch gar nicht gedacht hast, weil nicht bekannt.

    Die Frage ist, warum hast du überhaupt LOD-Stufen? Was willst du damit erreichen?

    Hast du das Mesh selber erstellt und dir dabei etwas gedacht oder ist es ein Mesh, das du irgendwo heruntergeladen hast und das jetzt Probleme macht?

    Ja, das ist schnell beantwortet, weil ich keine Ahnung hatte ;) Ich hab mit LODs bisher noch nichts umgesetzt. Ich wusste was es ist aber nicht wie und wo man es richtig einstellt. Jetzt bin ein ein bisschen schlauer.


    Lösung: Ich habe jetzt wie du vorgeschlagen hast alle LOD Stufen gelöscht, so nur noch eine vorhanden war, die LOD 0. Das hat jedenfalls mein Problemchen gelöst. Beim Reimport b.z.w initialen Import werden aber komischerweise immer mal LOD Stufen angelegt, obwohl ich die Option in den Importeinstellungen deaktiviert habe. Danach lösche ich die Stufen einfach wieder. Also erstmal nicht weiter tragisch.


    Danke für deinen Hinweis Sleepy

    Hallo Forum,


    es ist mal wieder soweit, ich habe eine Seltsamkeit festgestellt (Problem).


    Ich habe ein .fbx in die UE importiert, dieses mit den richtigen Materialien eingestellt und als Modell für meinen PlayerCharakter verwendet. Alles hat wunderbar funktioniert. Jetzt stelle ich aber fest, wenn ich das .fbx über die UE REimportiere (auch wenn sich im .fbx nichts verändert hat) treten Fehler bei der Darstellung meiner Materialien auf.


    Ich habe DynamicMaterials erstellt um eine simple Düsenantriebsfunktion darzustellen und an- und ausschaltbare Scheinwerfer. Der Fehler betrifft aber auch Materialien und Teile des Mesh, bei welchen ich in diese Richtung nichts eingestellt habe. Nenne dies nur der Vollständigkeit halber.


    Fehler: Wenn ich im Editor nahe an meinem Mesh bin, werden die Materialen mitsamt der Texturen alle richtig angezeigt. Scrolle ich jetzt aber vom Mesh weg, tauscht sich das Material eines Teiles des Mesh aus durch andere Materialien. Schwer zu erklären, siehe Sceenshots.

    Das Problem verschlimmert sich zunehmend, mit jedem weiteren reimport.


    Fehlersuche: Habe bemerkt, dass sich das Problem beseitigt wenn ich im Editor LOD auf 0 stelle, bei allen anderen Einstellungen erscheint weiterhin der Fehler. Dies funktioniert allerdings nur im Editor, nicht in der Spielesimulation.



    Jemand eine Idee was hier los ist, wer hat einen Tipp in Richtung der Lösung? Vielen Dank

    Also ich habe natürlich innerhalb von Blueprints, zB meinem Character Funktionen angelegt und auch schon Makros genutzt. Diese sind aber ja auf den Blueprint in dem Sie gebaut sind beschränkt (wenn man nicht von wo anders darauf einen call ausführt und so die Funktion startet).


    Ich meinte mit meiner Frage eher ob es einen Blueprint oder eine "Bibliothek" gibt, die man einfach in andere Blueprints zB Actor einbinden kann und dadruch alle Funktionen für diesen zur Verfügung stehen, die in der Biblieohek angelegt sind.

    Wenn du weißt wie man per Blueprints das Landscape verändern kann. Dann kannst du diese Funktionen ja nach dem Laden durchführen und danach erst anzeigen lassen.

    Danke, das ist genau das worauf ich hinaus wollte. Damit wird es auch möglich (denke ich) prozedural, mit Werten/Parametern die im laufendem Level gesetzt oder manipuliert wurden, das Landscape des Sublevels zu "formen". Beispielsweise, wie stark die Landmass durch eine Textur - in deren dunklen Bereichen nach oben und in den hellen nach unten gezogen wird. Als ganz simples Beispiel.


    Wenn man also die Position des Landscape (Sublevel) im PersistentLevel dadurch auch verändern kann, ist es möglich eine Art DungenCrawler aufzubauen der sich wie ein Puzzle spielt und immer etwas verschieden ist (oder sehr). Schöne Idee.

    Danke Tomarr, für deine Mühe. Ja, wenn man nicht von Anfang an Ordnung hält und alles strukturiert, dann ein paar Tage nicht weiter daran arbeitet, kann man schon mal verwirrt sein was man da eigentlich zusammengestöpselt hat ;)


    Du baust die Actors wie hier beschrieben anders auf als ich das bisher habe. Die wichtigsten Parameter oder wie hier Tags über weitere "Dateien" in den Actor zu laden (wenn ich das richtig verstehe) ist sicherlich eine weitere Ausbaustufe die auch ein Flexibilitätsgewinn sein kann. Einige neue Begriffe die du hier nennst mit welchen ich mich erst mal befassen muss um zu verstehen was du da machst :).


    Aber gleich eine Frage: Was meinst du genau mit "FunctionsLibs"? Bibliotheken (eigene Datei?) mit Funktionen die du bei Bedarf in Actors oder Level und weiteres laden und wieder entladen kannst?

    Hallo Tomarr, nein nicht mit Tick, mit Timelines habe ich es erstellt.

    Was ich machen möchte ist eine Liste, die Actors im Level auflistet die sich in einer bestimmten Distanz zum Player befinden. Die Distanz ist ein flexibler Wert, auch die Häufigkeit der Aktualisierung der Liste kann in einem bestimmten Rahmen, zB alle 1-5 Sekunden beeinflusst werden. Auch bewegt sich natürlich der Player, sowie die aufzulistenden Actors können sich bewegen.


    Über die Liste können Aktionen gestartet werden, die den ausgewählten Actor betreffen. Was genau möglich ist wird jedesmal abgefragt (bei Klick auf ListItem. IsAttackable, IsDestroyable... und so weiter. Denn, auch diese Möglichkeiten können sich ändern.


    Ich habe es nun so wie oben beschrieben über einen Array aller Actors im Level (mitTag toOverview) umgesetzt. Aus diesem Array wird nach Actors die sich in (flexibler) Reichweite des Players befinden gesucht und in der Liste angezeigt. Funktioniert mit "DestroyActor" mit vorangehender Abfrage ob dies möglich ist, sehr gut.


    Bis gestern Abend hat es noch nicht funktioniert, jetzt habe ich es hinbekommen, zumindest bis zu diesem Punkt ;) Ich bin mir (fast) sicher, es gibt noch eine "hübschere" Möglichkeit dies umzusetzen und ich möchte lernen :D. Zum Beispiel mache ich es bisher mit "ListItemClicked", hab aber schon erfahren, dass man es mit einem Interface möglicherweise besser machen kann.

    Codeabschnitte kann ich gerne mal liefern, allerdings sind es natürlich mehrere Funktionen in mehreren Blueprints. Wenn ich es aufgeräumt habe kann ich die kritischen Abschnitte fotografieren und zeigen.

    Hallo Leute,

    wie würdet ihr folgendes umsetzen?:


    Ich habe einen "Overview" gebaut, der Actors im Level mit einem bestimmten Tag (toOverview) auflistet, die sich innerhalb einer bestimmten Distanz zum PlayerCharacter befinden. Es wird der Name und die Distanz in der Liste angezeigt.


    Nun würde ich gerne beim Klick auf den Listeneintrag wieder den Actor abfragen, ob zum Beispiel eine bestimmte Variable (bool) gesetzt und entweder TRUE oder FALSE ist... oder den bestimmten Actor markieren, also sozusagen auswählen. Weitere Aktionen wie das öffnen eines kleinen Dropdowns in Mausposition ist geplant die weitere Interaktionsmöglichkeiten mit dem Actor bereitstellt.


    Wie kann ich wieder von der Liste auf den Actor zugreifen oder was würdet ihr versuchen? Vielen Dank :)



    NACHTRAG:

    Ein Weg der mir einfallen würde ist, in der Funktion die nach Actors im Level und Distanz zum PlayerCharacter sucht ein Array zu erstellen und den Array Index mit an die Listeneinträge zu schicken. Beim Klick auf den Listeneintrag wird der Index abgefragt und so erhalte ich die Actor bzw Object Reference im Array und kann somit dessen Werte/Variablen abfragen. Problem allerdings, welches ich sehe ist, dass das Array immer wieder neu aufgebaut wird sobald die "Overview" Liste aktualisiert wird. Was derzeit jede Sekunde passiert. Irgendwann wird das auf die Performance gehen denke ich. Die Liste und somit das Array muss immer wieder aktualisiert werden können, da die Actors die angezeigt werden sowohl zerstört werden können als auch spawnen.


    Ach, wie ich bei Klick auf den Listeneintrag zugreife um den Array Index wieder zu bekommen, das muss ich auch noch rausfinden ;)


    Ja, soviel noch meine Überlegungen, danke .

    Das klingt alles sehr spannend. Mir stellen sich jetzt natürlich Fragen, da ich werde ich mich noch einlesen und sehen ob ich Tutorials finde um das auszuprobieren. Um das Gespräch hier aber ein wenig weiter zu führen, gerne eine der Fragen die ich jetzt habe:


    Das PersistentLevel (in dem sich wie ich verstanden habe auch kein Landscape oder ähnliches, also wirklich nichts befindet) ist im Prinzip auch nicht in seiner Größe beschränkt. Landscape kommt erst mit einem Sublevel (genauso wie Häuser oder Bäume mit anderen SL etc.).


    In wieweit sind diese Sublevel beeinflussbar/manipulierbar, bevor sie tatsächlich in das PersistentLevel geladen und angezeigt werden. Kann beispielsweise das Landscape durch Parameter verformt werden? Kann die Position des Landscape verändert werden?


    Danke @Sleppy für die schönen Denkanstöße

    Vielen Dank, Sleppy für deine ausführlichen Tipps. Mit Level Streaming habe ich mich noch gar nicht befasst. Ich fange gerade erst an, mache aber jeden Tag Fortschritte. Level streaming finde ich spannend, da ich damit wenn ich dich richtig verstehe auch ein aktuell geöffnetes Level, durch nach Bedingungen ausgewählte "Level" erweitern kann... Also die Karte wird größer oder sowas... Ich les mich mal ein ins Thema. Danke

    Hallo Leute,


    eine Frage, gibt es einen Level übergreifenden Blueprint. Also einen Blueprint, welchen ich wie zB einen Character Controller für alle betreffenden Level einstellen kann. Für andere Level dann vllt einen anderen.


    Es geht darum, dass ich z.B. meinen DayNightCycle und weitere Funktionen die für mehrere Level geschrieben sind, nicht jedes mal im LevelBlueprint copy und pasten möchte.


    Was kann ich da nehmen oder habt ihr eine andere Idee?


    Danke