[UE4.25 + Multipayer Dedicated Server] PlayerController und MyCharacter Fragen

  • Eigentlich so wie ich es beschrieben habe ^^

    Wenn dieses actor eine sehr geringe Geschwindigkeit aufweist, dann Schlafmodus. Wenn du unbedingt die Rüstung bewegt haben möchtest, wenn man dadurch läuft, dann kannst du die mit Kollision wieder erwachen lassen. Das natürlich ein größeren Radius hat als der Charakter.

    Ja aber wie genau geht da?


    EventBeginOverlap bei dem Gegenstand am Boden -> Activate Sleep oder wie genau?

    Oder

    EventBeginOverlap -> set Physic/replication = 1


    EventEndOverlap -> delay 10 sekunden, set Physic/replication = 0


    Danke für die Info :)

    • Offizieller Beitrag

    Musste mal ausprobieren. Evtl könnte sehr gut funktionieren, über Event Tick die Geschiwndigkeit (GetVelocity) zu überprüfen. Wenn es unter 10 ist, dann physic und replication movement aus. Dann könnte man ausprobieren, ob dieser Gegenstand bei Berührung mit dem Player sich auch wieder aktivieren lässt, ohne das die Physik plötzlich verrückt spielt.

    In meinem Spiel habe ich das so gelöst, dass alle Physik objekte ausßerhalb der Kamera sich nicht mehr replizieren. War aber sowas wie ein super mario spiel, das war noch einfach ^^

  • So habe es nun ausführlicher getestet:


    Class Defaults -> Replication -> ReplicationMovement und Simulate Physic deaktiviert = keine Veränderung

    Class Defaults -> Replication -> Replicates deaktiviert = lädt sofort (hier liegt der Fehler)


    Alle anderen Kombinationen zeigen auch keinerlei Veränderungen.


    Wenn es wirklich nur an "Replicates" liegt ist das sehr merkwürdig!


    Denn alle ausgerüsteten Waffen sind dann unsichtbar, bzw. aufgesammelte Gegenstände am Boden bleiben liegen, werden aber eingesammelt.

    Die reinste Katastrophe!



    Kann mir jemand vielleicht sagen wie man ein Gegenstand (z.B. Eisenbarren) richtig im Multiplayer als Gegenstand setzt?


    Danke für eure Antworten :)

    • Offizieller Beitrag

    Physik setzt kaum ein Spiel wein, wenn diese Objekte wichtig sind. Diese Objekte könnten auch mal durch Wände buggen und wären dann für immer weg. Überleg dir genau, was du mit Physik machst. Borderlands macht zb das was ich dir vorgeschlagen habe. Es hat Physik, aber nur bis zu dem Moment, wo alles ruig auf dem Boden liegt, danach bleibt es still. Denn Borderlands hat auch malmit sehr vielen Objekten zu tun.

    Da du das überprüft hast, gehen ich einfach mal davon aus, dass du auch deine BP überprüft hast, und auch mal mit Abfrage gecheckt hast, ob die wirklich nicht repliziert sind.

    Eins weis ich noch nicht, was das replicates NetLoadOnClient bei vielen Objekten verursacht, wenn die schon in der Welt platziert sind. Ob es die alle nach und nach ladet und den maximal Transfare sich anpasst, oder es total ignoriert und alles gleichzeitig laden möchte, dass natürlich ein mega lag verursacht. Übrigneds, NetLoadOnClient bitte auch überprüfen, "Replicates" deaktiviert alles, "NetLoadOnClient " braucht "Replicates" damit alle Clients auch die Modelle zusehen bekommen. Wenn du bemerken solltest, dass es an NetLoadOnClient liegt, dann musst du wohl es erstmal so hinnehmen, dass es am Anfang mega laggt, oder du richtiest es so ein, dass die Objekte nach und nach geladen werden, oder du erhöst die Config, die ich dir gegeben habe.

  • Ich habe bisher 4 Monster im Spiel und diese verwenden die gleichen Waffen wie die Spieler.


    Ein Monster mit Schwert + Schild.

    Eines mit Schwert.

    Eines ohne

    Eines mit 2x Schwert (Dual).


    Beim starten sehe ich ganz genau wie die Waffen einzeln geladen und an die Monster angehängt werden.


    Auf der anderen Seite habe ich die Karte geleert und ca. 100 Eisenbarren auf den Boden plaziert und das laden dauert auch ewig. Aber die Physik ist halt in meinem Spiel sehr wichtig, daher würde ich das schon sehr gerne so regeln wie es Dj EKI mit Borderlands meint.

    Wie genau ich das mache muss ich noch gucken.


    Jedenfalls habe ich SimulatePhysics und ReplicatesMovement in beiden Fällen ausgeschaltet und es gibt in der Ladezeit überhaupt keinen Unterschied.

    Auch das Struct in den Gegenständen (mit den ganzen Informationen), es macht keinen Unterschied ob das Replicated ist oder nicht. Wenn nicht ist es eben fehlerhaft (also gewisse Funktionen gehen dann nicht).


    Letzendlich ist nur das "Replicates" daran schuld warum alles so lange lädt, aber wenn es läuft, läuft es wunderbar und auch korrekt!


    Ich muss dafür eine passende Lösung finden bevor ich das Projekt am Ende des Jahres vorstellen kann.





    Könnte es eventuell daran liegt, dass das System was ich verwende (MasterItem -> Child Actor (für die Gegenstände)) das Hauptproblem dafür ist?

    Angenommen ich würde jedes Item einzeln als Blueprint machen... was ist total mega großer Aufwand wäre, wäre die Performance dann besser?


    Andererseits habe ich sowieso schon mehrere Datenbank-Pfade gemacht, so das z.B. nur Waffen+Rüstungen eine Datenbank haben, während Essen, Tränke, Möbel eine separate Datenbank verwenden.

    Eben das nicht alles über eine Datenbank läuft, denn wenn ich z.B. einen Heiltrank modifizieren möchte, muss das Programm ja überhaupt nicht bei Schwertern oder Rüstungen schauen (so ganz grob gesagt).


    Hätte ich eine Datenbank mit allem darin, müsste bei jeder Anfrage, alles durchgeschaut werden was ja noch viel mehr Performance kostet. Abgesehen davon braucht ein Heiltrank auch keine Schadenswerte usw.

    Also die Datenmenge ist auch geringer weil nur das vorhanden ist, was auch explizit gebraucht wird.


    Housing ist teilweise drinnen aber muss ich auch noch überarbeitet.

    Was noch neu dazu kommt ist das Fahrzeug-System mit Waffen usw.



    Wie habt ihr das bei euch geregelt?

    Alles über eine Datenbank (wirklich alles)?


    Danke für eure Infos!