Beiträge von Exaran

    Vom logischen her dürfte das so aufgebaut sein:


    Masterfahrzeug (leer), enthält die Variablen für die Lenkung, Beschleunigung, Bremsen usw. (diverse Variablen).


    Masterfahrzeug (leer) -> Child -> Blaupause (darin werden alle Bauteile angeheftet)


    Masterfahrzeug (leer) -> Child -> Bauteile (Panzerung usw.)


    Masterfahrzeug (leer) -> Child -> Antrieb (Reifen, Ketten, Beine usw. die Physik und Animation)


    Masterfahrzeug (leer) -> Child -> Waffen (Für alle Waffen oder sonstiges)


    Daraus werden wiederum entsprechende Child erstellt die dann später an die Blaupause angebaut/angeheftet werden. Live im Spiel.


    Die Frage die ich mir nur stelle ist, wie kann ich ein Pawn (Antrieb) an ein Pawn (Blaupause) anheften und darin speichern?

    Wäre das eine Array-Variable, die zugleich auch ein Vector enthält?


    So das z.B. Reifen 1 an X:Y:Z am Hauptbauteil in der Blaupause hängt.


    Das muss entsprechend repliziert werden, damit andere Spieler das sehen.

    Danke du bist mein Held :)


    Ich sags euch, die Unreal Engine 4 ist das reinste Irrenhaus, bis man da was findet...


    Jetzt kann es endlich mit der Fahrphysik weitergehen.


    Demnach gleich eine neue Frage:

    Habe nun "MasterFahrzeug" Blueprint was als ParentClass: Wheeled Vehicle hat.


    Ich möchte nun das dieses MasterFahrzeug als Basis-Fahrzeug dient (sozusagen die Karosserie), an diesem setzt man nun Reifen, Waffen, Panzerung daran.


    Wo genau müssen diese Zusatzteile (Reifen, Waffen usw.) in dem MasterFahrzeug eingetragen werden.

    Wäre das eine Art SkeletalMesh-Array?

    Diese Bauteile sollen im Klemmbaustein-System an das Fahrzeug angebracht werden.


    Das ganze muss im Live Betrieb beliebig wechselbar sein, Reifen durch Panzerketten austauschen, neue Waffen usw.

    Zugleich sollen alle Bauteile zerstörbar sein (hört sich nach viel Arbeit an).



    Meine Frage bezieht sich mehr darauf, wie kriege ich einen Reifen mit Fahrphysik an das Fahrzeug, damit beides funktioniert?

    Ich weiss leider nicht wie man das nennt wenn etwas mehrfach wiederholt in einer Funktion einzeln angezeigt werden soll.



    Im Grunde ist in diesem Beispiel zu den Waffen (was auch bei dem Fahrzeug für die Reifen zählt) in einem Array mehrere "Dinger" vorhanden und diese müssen entsprechend einzeln aufgezählt werden.


    Bei dem Waffenbeispiel im Bild geht es um die "Waffenkunde", das wäre Einhändig + Schwert, das beides soll angezeigt werden, tut es aber nicht. Da immer nur das erste angezeigt wird. Da das erste immer auch das zweite überschreibt.

    Das in eine Variable zu packen macht auch keinen Sinn, da die Variable auch wiederum überschrieben wird.


    Bei den Reifen brauche ich das, um zu wissen wie der Antrieb zum Bodenkontakt der Reifen ist, da es eine größere Anzahl an Reifen gibt (mehr als 4 oder unbekannt X) muss jeder einzelne mit seinen Werten angezeigt werden.

    Habe leider ein paar Fehler in der komischen Datenbank gehabt die mich daran gehindert haben hier weiter zu machen.


    Um das ganze besser analysieren zu können.

    Wie kann man in einem Array die Namen in der Reihenfolge anzeigen lassen, ohne ein Print String zu verwenden?

    Ich möchte gerne im Spiel in einem Widget den Inhalt eines Arrays (z.B. Anzahl der Reifen) anzeigen lassen, mit dessen Namen und Umdrehungen.


    Array -> ForEachLoop und das Ergebnis muss in einen String zum Return Node, leider zeigt der immer nur eines an und nicht alle in Reihenfolge.

    Kann man da irgendwie ein Add-String machen, so das die Namen in Reihenfolge gesetzt werden?


    Beispiel:

    ReifenLinksVorne

    ReifenRechtsVorne

    ReifenLinksHinten

    ReifenRechtsHinten

    usw.


    Das soll entsprechend nacheinander angezeigt werden, aber das tut es nicht da man immer nur eines anzeigen lassen kann.

    Am besten ohne Variable damit es sauber bleibt, wie geht das?

    Danke dir Dj EKI


    Was mit aufgefallen ist (bei einer anderen Art von Fahrmechanik) das dort die Reifen mit einem komischen "Strudel-Sog-Effekt" haben, wenn man eine gewisse hohe Geschwindigkeit erreicht. Leider war diese Fahrmechanik veraltet und unbrauchbar.


    Grundsätzlich ist das Low Poly Teil schon ne prima Sache, nur das ganze zu replizieren ist ne quälerei.

    Die lokalen Variablen habe ich natürlich auch schon ausgetauscht und getestet, es brachte leider keine Besserung.


    Das Low Poly Paket ist inhaltlich extrem gut und beinhaltet fast alles wichtige.

    Im offline Modus funktioniert das ganze System extrem gut, nur brauche ich das eben für den Multiplayer.


    Darin enthalten.

    Reifen, Ketten, Spinnenbeine, Hover und Schneckenantrieb. Alles wichtige für diverse Kombinationsmöglichkeiten.

    ---

    ... Die nur auf dem Server ablaufen, brauchen zb nicht repliziert werden. Soll der Client mit den Daten etwas anfangen, dann muss es repliziert werden.

    Verstehe ich das richtig. Blueprint ist Replicated und das mit dem Server wird entsprechend über "CustomEvent" -> Server im Blueprint abgespielt (HasAuthority) -> remote und die Variablen für die Rotation bzw. für die Beschleunigung (Float aus InputAxis) ebenso replizieren.


    Oder meinst du mit "Server" anderweitig?

    Im Grunde ist vieles soweit richtig gemacht.

    Hierzu einige Bilder.

    Wenn ich das soweit replizieren könnte, wäre das super.

    Leider sind viele Variablen LOCAL :(


    Die Rotation des Geschützturmes:


    ---

    Die Kettensteuerung:


    Welches Multiplayer Tutorial für diese Art von Fahrzeugsteuerung gibt es?

    Es gibt unzählige aber häufig nicht das womit ich die Bewegungsteile einzeln steuern kann.

    Hallo zusammen!


    Ich suche schon seit längerem nach einer Fahrphysik die sehr performant im Multiplayer ist und modular zugleich.

    Mit modular meine ich das die Fortwebungsmittel (Reifen, Kette, Beine usw.) für sich selber stehen.

    Das bedeutet wenn man 2 Reifen + 2 Ketten an das Fahrzeug dran baut, steuert man natürlich alle Fortbewegungsmittel gemeinsam, jedoch wenn man im laufe des Spiels die 2 Reifen verliert, soll das Fahrzeug trotzdem noch steuerbar sein. Auch wenn es nur ein Reifen oder nur eine Kette am Ende übrig bleibt (die Steuerung ist natürlich dann schwierigier).


    Im Grunde soll das Fortbewegungsmittel alleine funktioniert und nicht als ganzes Fahrzeug wie es üblicherweise so gemacht wird.

    Habe schon ein paar Fahrphysiken aus dem UE 4 Marketplace gekauft und eingebaut, jedoch funktionieren die nicht so wie gewünscht.

    Es funktioniert zwar als ganzes, aber nicht für jedes Teil selber.


    Gekauft habe ich nun: "Modular low poly robots"

    https://www.unrealengine.com/m…s?sessionInvalidated=true


    Das ist genau das wonach ich gesucht habe, auch wenn die Teile nicht einzeln sind, jedoch die Funktion ist soweit super.

    Leider ist es überhaupt nicht angepasst an den Multiplayer, was ich dann gemacht habe, nur leider funktioniert das nicht so wie es sollte und wenn, dann verbraucht das zu viel performance, was zu starken rucklern führt, obwohl die Karte leer ist. Bei 2 Spielern wohlgemerkt.


    Es sollen im Spiel später max 100 Spieler gleichzeitig (50 pro Seite) spielen, weshalb das so nicht funktionieren kann.

    Hat hier jemand eine Idee wie ich das gewünschte Ziel von mir erreichen kann und wie ich das mache?


    Man soll im Spiel sein eigenes Fahrzeug bauen können. Eine Fahrerkabine (die fest vorgegeben ist) dient als Basis und Kommunikationsplatform für alle anderen Teile (Pawn Blueprint), daran setzt man das Fahrgestellt und dort die Fortbewegungsmittel seiner Wahl. Ob Reifen, Ketten, Beine oder fliegende Dinge.

    An dem Fahrzeug montiert man zuletzt frei die Waffen die man möchte (es gibt natürlich entsprechende Einschränkungen das man nicht zu viele Waffen nutzen kann).

    Das ganze soll entsprechend über die Physik funktioniert, wodurch das Gewicht des Fahrzeugs (anhand der Bauteile) auch die Fahrmöglichkeit beeinträchtigt, so wie die Rammfähigkeit im Kampf usw.


    Freue mich auf Antworten!

    Ich wünsche euch allen ein frohes Weihnachten 2020 und bleibt gesund!


    Schenkt euch etwas (da es aufgrund von Corona *corona* ja ziemlich eingeschränkt ist) und genießt die Feiertage.

    Mein eigenes Geschenk ist der Ryzen 9 5950x + eine Nvidia 3090 :love: .

    Dann kann ich endlich die Weltgestaltung in angriff nehmen und die Unreal Engine 5 soll ja auch schon 2021 offiziell erscheinen.

    Mal schauen was noch alles im nächsten Jahr kommen und passieren wird.


    Bleibt gesund und möge ab 2021 ihr tolle Fortschritte in euren Projekten erzielen können ;):thumbup:

    Dazu habe ich mal 2 Fragen. Hast du das Inventar geöffnet, und dann wurden in dem Moment 300 Gegenstände per Loop reingepackt, oder gab es bereits 300 Gegenstände?


    Zweite Frage. Kannst du mir mal einen Screenshot von deiner Inventaroberfläche zeigen? Ich würde zu gerne mal wissen wie du dem Spieler 25.000 Gegenstände präsentieren willst und dieser trotzdem nicht die Übersicht verliert.

    Ja, jedes mal wenn das Inventar geöffnet wird wird der Inhalt geleert und alle Gegenstände im Inventar über ein Loop neu eingelesen.


    Screenshot habe ich dazu noch nicht da es derzeit noch unwichtig ist.

    Vom Prinzip her ist es sehr einfach, man erstellt ein Fenster mit diversen Menüs aus denen man gezielt das auswählt was man benötigt.

    Waffen kommen in die Waffen Kategorie, dort separiert welche Art von Waffe usw. usw.


    So ähnlich wie bei Amazon, da sucht man entsprechend in den Produkgruppen und filtert das ganze heraus.

    Nimm nen for loop. Kannst den ja auf ne Taste legen wenn du ihn nicht bei Spielstart anhauen willst. Damit kannst du ja über die Index Werte einstellen wieviel du da reinkippen willst. Mit dem first und last index stellst du ein wie oft der Laufen soll. Also first index 1 last index 25000 dann läuft der 25,000 mal. Damit befüllst du dein struct oder data table, lässt mit jedem loop durchlauf 1 item adden. Wenn du es spannend machen willst nimmst du ne rnd nummer als Wert, dann steht in jedem auch was anderes drin. Am besten mit irgendwas füllen was von der Menge der Daten her realistisch ist, also wenn du sonst nen Namen wie "Das Superschwert der Meister Elfen (Ultra rar)" drinstehen hast solltest du es auch mit ner entsprechend langen string oder zahl zukotzen und nicht nur "0". Machst noch nen print string am Ende, dann siehst du auch wenn es fertig ist und weisst "Ah ok dauert 3 Sekunden das mit 25.000 Schrott Einträgen zu füllen". Dann schaust du mal ob es von der Performance Unterschiede macht gegenüber 3 items. Kannst das ganze ja auch mal kompilieren und schauen wieviel RAM der dann verbraucht mit 25.000 Items gegenüber 3 items (Im Task Manager spicken).

    Habe mal getestet mit 300 Gegenständen (nicht stapelbar) im Inventar und beim öffnet ist ein deutliches ruckeln zu vernehmen. :(

    Ich finde das Thema nicht mehr, jedoch habe ich darin gefragt wie man Werte abspeichern kann.

    Da hat man mir gesagt das man Dinge in einem Array nicht speichern kann, sondern dieser daraus erst kopiert und in ein anderes Format abgeändert werden muss.


    Danke für die Infos

    Ein Array kann man auch nicht als Datenbank machen, da man in einem Array keine Werte speichern kann.

    Denn diese Frage hatte ich schon mal gestellt, wie ich Dinge in einem Array speichern kann.

    Demnach muss der Inhalt des Arrays in eine externe Datei gespeichert werden (am besten Account-Datei), um von dort abgerufen/abgespeichert zu werden.


    Jetzt bin ich maximal verwirrt.

    Laut meiner Vorstellung ist eine Datenbank in der ich Informationen speichern/abrufen und dort Werte verändern kann, was mit dem Datatable exakt möglich ist. Ich muss ja nichts im Livebetrieb in das Datatable speichern (macht auch keinen Sinn), sondern nur daraus lesen.


    Wie genau speichert ihr eure Gegenstände?

    Hehe ja das mit der Bezeichnung ist schon ne witzige Sache.

    Gibt ja noch viel mehr andere Bezeichnungen die für Verwirrung und Unterhaltung führen.

    Siehe "Twink" als weitere Charaktere an, obwohl das ja was ganz anderes ist.



    Warum ich zur Datatable Datenbank sage ist weil das Datatable genau die Funktion einer Datenbank übernimmt.

    Eine Datenbank ist ja nur ein Ort an dem Informationen gespeichert werden.

    Da der Datatable entsprechend an die Struct gekoppelt ist und schreibgeschützt ist, beziehe ich meine Informationen (Gegenstände und mehr) aus diesem Datatable.



    Wie mache ich aus einer Datatable eine Database die ich direkt im Editor benutzen kann, dabei müssen die Werte IMMER 100% richtig sein, auch wenn sich später etwas im Datatable verändert?


    Warum gibt es überhaupt ein Datatable, wenn man normalerweise eine Datenbank benutzt würde?





    Mit 1000 Spieler gleichzeitig schreiben, meine ich allgemein das System.

    Da jeder Gegenstand einzigartig ist, kann dieser auch entsprechend verändert werden ohne das andere davon betroffen sind.

    Ich meine damit nicht das 1000 Spieler etwas in der Datatable/Database verändern, sondern die Informationen daraus in den einzigartigen Gegenstand fließen und diese dann selbst verändert werden können.

    Vor diesem Problem wird jeder Entwickler stehen, wohin mit den ganzen Gegenständen und wie damit umgehen.


    Gut das man zumindest selbst entscheiden kann wie man das alles macht und nicht bereits von der Engine fest vorgegeben ist (z.B. das man Gegenstände nur so und so verwalten kann).


    Ich sehe das so das wenn z.B. 1000 Spieler zur gleichen Zeit zugriff auf die Datenbank (umgangssprachlich) haben und alle Gegenstände in dieser einen Ansammlung sind würde der Server zu sehr belastet werden. Dies ist jedoch nur eine Vermutung von mir, ob das keine Auswirkung hat weiss ich nicht.



    Wie kann ich sicher gehen, dass der gewünschte Gegenstand aus dem Inventar auch wirklich aus dem Array gelöscht wird?

    Derzeit verwende ich das so:


    Ich habe noch manchmal das Problem das ein Gegenstand nicht richtig aus dem Array entfernt wird.

    Remove Index bei dem gewünschten Array.

    in 90% der Fälle funktioniert das auch.


    Den Index bekomme ich entsprechend von dem Widget das in dem Inventar-Menü ausgewählt wird (was letzendlich der Gegenstand ist).

    Mit Gegenstände Modifizieren meine ich natürlich den Actor und nicht den Gegenstand im Datatable.
    Man möchte ja live den Gegenstand im Spiel verändern und nicht über externe Dinge.


    Für das Inventar habe ich auch eine ID, nennt sich bei mir "Index".

    Ich dachte mit ID sei die ID in der Datatable gemeint!


    ID im Inventar (also temporäre ID), dass habe ich auch.

    Nur habe ich keine feste ID für die "Datenbank" gemacht.

    Da ich gerne flexibler sein möchte.