Beiträge von Dj EKI

    Es sollte module geben, die sowas verbessern. Natürlich wäre das eine Waffe die man schnell ersetzen möchte gegen eine bessere. Mit einer höheren Anzahl an Waffen wäre das natürlich wieder gut ausgeglichen.

    Python als Sprache kennen zu lernen wäre auch machbar, hat zwar nichts mit der ue4 zu tun, aber der Ablauf ist der selbe. ist sogar einfacher. BP gehört auch zum programmieren. sind alles gleiche funktionen wie in c++ auch. Nur optisch schöner und übersichtlicher.

    So wie ich deine entwicklung gerade mitbekommen habe, würde ich dir auch echt ein Buch empfehlen. Oder viele youtube HowTos. Da fehlten sehr viele Grundkenntnisse. Ohne solche sachen kommst du nicht mal auf die einfachsten Lösungen.

    Unser Nobody hatte zb ein schönes Buch veröffentlicht.

    https://www.amazon.de/gp/product/3446452907

    Das ist ja total unlogisch ^^

    Schau dir bitte den Array Bereich an wie sie funktionieren. https://docs.unrealengine.com/…kingWithArrays/index.html


    Der Name Remove Index sagt ja schon der Name, dass ein Index entfernt wird. Du hast 3 elemente mit ein MakeArray erstellt, somit hat dein Array nur 0-2 Index. Last Index ist dann 2. Ist also kleiner als 625. Komischerweise konvertierst du den Bool zu Int. Somit ist Int 1. RemoveIndex nimmt das Element 1 weg und wird somit nur 2 mal in der loop abgespielt. 3 insgesammt wegen dem ersten spawn.

    Es gibt viele Wege, wie du deine Pflanzen setzen kannst, man müsste nur den Werdegang kennen, wie es im Spiel funktionieren soll. Ich kann dir paar grundlegende möglichkeiten geben. Ich gehe einfach mal davon aus, das eine Planze ausgewählt wird und gepflanzt wird.


    1. Es gäbe die einfachste Möglichkeit für jede Pflanze ein BP zu erstellen. Die Pflanze die ausgewählt wird, wird dann gespawnt, wenn man eine Fläche markiert hat mit LineTrace oder so. Wenn jede Pflanze ein komplizierten Script hat, dann erstelle einen sogenannten Master Pflanze BP und mach daraus Child BP. https://docs.unrealengine.com/…s_Advanced/2_5/index.html Das MasterBP benötigt dann ein static Mesh Component und den kompletten Script von dir, und alle Childs können einen Static Mesh in Static Mesh Component zugewiesen bekommen mit ein paar bestimmte Werte in Variablen die für die Pflanze wichtig sind. Somit ist der gesammte Teil des Scripts im MasterBP und das aussehen und die Daten sind im Child. Child wird dann gespawnt, und da sie vom Master erben, wird der Script ausgeführt.


    2. Möglichkeit, du benutzt eine DataTable. Dann brauchst du nur ein BP Actor und mit dem DataTable Row Name sagst du, welche Pflanze gesetzt werden soll und da eine DataTable aus Struct besteht, kannst du gleichzeitig die Daten dazu entnehmen, die für die Pflanzen benötigt werden. Hier wird wieder eine static Mesh Component benötigt, die aber leer ist. Für die Datatable benötigtst du eine Struct, da wird eine Variable erstellt StaticMesh als Object Referenz. Die ist wichtig und dann kannst du weitere Variablen erstellen die wichtig sind, zb Wachszeit usw.. In der Struct kannst du standard Werte einstellen, aber unnötig, weil alles wird in der Datatable eingestellt. Im BP muss nur noch dein Static Mesh Component mit einer StaticMesh gefüttert werden. Die Variable StaticMeshComponent bekommst du, wenn du von der Componentliste diese in den BP ziehst.

    Externer Inhalt www.youtube.com
    Inhalte von externen Seiten werden ohne Ihre Zustimmung nicht automatisch geladen und angezeigt.
    Durch die Aktivierung der externen Inhalte erklären Sie sich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.

    GetActorOfClass ist nach meiner Meinung die sinnloeseste Funktion aller Zeiten. Diese Funktion sucht im Level alle arten von Actors die von der Class, die als Eingang gesetzt wurde, gefiltert wird. Das bedeutet, wenn im Level ein Actor steht und die heißt Blume und GetActorOfClass wird im Level Blueprint ausgeführt und die Funktion hat den Eingang Blume. Dann werden alle Actors gesucht die den Namen Blume hat. Der Class Eingang ist nur sowas wie ein Suchfeld, wonach es suchen soll. Die Blume wurde nun gefunden und wird als Blume Actor als variable ausgegeben. Jetzt kommt das sinnlose an dieser Funktion. Sind 3 Blumen als actor in der welt, dann sucht die Funktion nach alle Actors die den Namen Blume haben und gibt irgend eine Blume als variable aus. Man weis jetzt also nicht, welche Blume er gewählt hat.

    GetAllActorsOfClass sucht auch nach alle Actors die als Class eingestellt sind und geben alle gefundene Actors als Array aus. Damit kann man also speziel eine Blume ansprechen.


    Eine Class Datei zu nutzen um dieses Actor in der Welt anzusprechen funktioniert nicht. Class Dateien sind eher Rohe daten die in der Welt nicht sind. Sie werden eher nur gelesen und als Actor in der Welt platziert. Class sind alle in deinem Content.


    Wenn du eine Variable erstellst, zb Actor als Class Referenz. Dann bemerkt du, dass man die Class auswählen kann für die Variable. Solltest du eine Variable als Actor Objekt erstellen, dann kann man kein Wert für die Variable einstellen. Mit einer Actor Class variable kann man nur sachen verwenden, wie actor spawnen, oder nach actors suchen. Wenn du einen Actor Objekt hast, dann kann der direkt mit dem Actor verlinkt werden. Das geht aber nur, wenn einer dieses Actor gefunden hat, und in den Actor Objekt gesetzt hat. Erst dann ist diese Variable gefüllt und hat ein direkten Bezug zum Actor, die man immer ansprechen möchte. zB führe dies und das aus.


    Dein BP macht praktisch nichts anderes, suche nach diesem Actor und gebe irgend ein actor, falls mehrere vorhanden sind, als variable aus. Hier schaut es so aus, als wurde kein Actor gefunden. Also ist der ausgabe wert vom GetActorOfClass NULL. Somit ist nichts vorhanden. Ist nur ne Vermutung, Value Not in Scope hatte ich bestimmt auch mal als Fehlermeldung, aber kann sie jetzt zu nichts zuordnen. Wenn der Wert NULL ist, wird eher ein Error kommen das der Wert NULL ist. Jede Funktion reagiert aber unterschiedlich, wenn ein Wert NULL ist.

    Sie verändern bei jeder version die reihenfolge der tickrates. Wenn etwas nicht wie gewohnt funktioniert, dann liegt das eher am timing. Das die tickrates reihenfolge sich änedert, liegt nur daran, dass neue funktionen dazwischen sind. unbedingt danach forschen, warum bei dir das anders ist. Denn Fehler in solcher art wurde bisher nicht gemeldet, grad mal selber geschaut.

    Damit ists auch möglich, während des Loops, nen Delay einzubauen ^^

    Es ist so gewollt, dass zwischen den loops kein delay funktioniert.



    Ich empfehle dir die 4.24 zu nutzen, ist die einzige Version die ich kenne, wo ein Print String auch problemlos während des Loops funktioniert ^^

    Da wirst du eher andere probleme im Script haben. denn das kann ich mir nicht vorstellen.

    Aber Achtung: Dafür haben die Loop Makros andere Probleme, zumindest bei mir, wie z.B., dass sie teilweise abbrechen obwohl sie noch nicht fertig sind, hehe (kann man aber fixen)

    Wie gesagt, dein Script überprüfen, das kannst du hier nicht veralgemeinern. Ich hab manchmal auch mit den gedanken gespielt, das einige sachen Bugs in der ue4 sind, aber dann doch ein logischer Fehler war von mir. Wenn die Bugs reproduzierbar sind, dann sind es richtige Bugs.

    oh gott, exaran, was los mit dir ^^

    Das was du hast ist Binding zu einem Text bestimmt. Dieser Return von deiner Funktion ist in einer Loopschleife und zeigt somit nur das letzte an. Da musst du schon "complete" vom loop nutzen. Nur dann zeigt es trotzdem das letzte an, denn dafür musst du auch was bauen. Sowas hier zb. Ich habe kein Binding genutzt, ist aber das selbe. {String}Shift+Enter{Enum} eingeben, dann bekommste die eingänge. Geht auch mit Append für String.


    Dann bekommste das hier:

    Es kommt darauf an wo es angezeigt werden soll.

    Ist es nur ein Text oder Rich Text, dann sollte ein Zeilenumbruch funktionieren. Die einfachste Methode ist mit Shift+Enter in einer Append. https://answers.unrealengine.c…ne-inside-a-text-var.html . Praktisch gesehen musst du erstmal dein String vorher bauen und dann anzeigen lassen.

    Ist es eine Scrollbox oder ähnliches, dann als children hinzufügen. Dafür muss man aber ein widget erstellen, dass nur text enthält und es als children zur box hinzugefügt wird und das für jeden loop vorgang. Die Childrens werden vorher mit SetText verändert.

    Ein Ausschnitt aus meinem alten Projekt. Da sind alle StaticMeshComponents wichtig und müssen unabhängig repliziert werden, deswegen ein Array. Ansonsten ohne Loop. Einmal den kompletten Wagen replizieren und die Reifen auf dem Client berechnen lassen, sodass es aussieht, als würden die etwas tun. Auf dem Server haben die Reifen tatsächlich eine Funktion. Die Drehung der Reifen werden also nicht repliziert. Wenn du das nicht so programmieren kannst, dann würde ich nicht jedes Rad replizieren, sondern die Achse. Aber ich glaube du schaffst es mit einer transform variable alles zu replizieren. Die Reifen können auf dem Client durch ihren eigenen Gamepad Input und Geschwindigkeit vom Actor berechnet werden und können somit drehen.

    Das wäre eine Variante, die billig ist. Da wäre replicate Movement viel besser. Aber damit lässt sich schlecht an den Daten manipulieren. Falls eine Rotation nicht so gewünscht ist.

    Ich finde es lohnt sich auch nicht auszutauschen, wenn es um replizieren geht, muss Exaran wissen, welche repliziert werden müssen und welche nicht. Die nur auf dem Server ablaufen, brauchen zb nicht repliziert werden. Soll der Client mit den Daten etwas anfangen, dann muss es repliziert werden.

    Hier musst du etwas anders denken. Das Problem ist, das bei Physik nur der Server berechnen darf. Wenn der Server die Sachen berechnet, darf nicht jeder Kram repliziert werden. Der Client muss dann alles simulieren. Ich könnte mir vorstellen, dass der Client nur Daten senden muss, sowas wie ich fahre los, und ich bremse. Der Server berechnet komplett die Physik und gibt nur Location und Rotation raus für die Karosserie. Die Reifen hängen nur herunter und drehen sich. Die Schwerkraft macht dann alles. Sodass es nur visuell gezeigt wird. Es darf kein Objekt mit movement repliziert werden, ansonsten fließen Unmengen an Daten.