Beiträge von Phoenix-100

    Der Ladebildschirm freezed, weil er auf dem Game Thread läuft und dieser für das Laden blockiert.

    Damit das nicht passiert, kann das Level auf einem extra Thread geladen werden.


    Genau das macht die Async Load Asset Node. Sie erstellt ein Thread, lädt das Asset und zerstört diesen auch wieder.


    Die Garbage collecting Node musst du nicht mal aufrufen, der läuft regelmässig 30-60 Sekunden oder sogar noch öfter. Du kannst in den Projektsettings auch einiges dazu konfigurieren. Ausserdem ist die Node geqeued, es passiert also nicht sofort. Ausserdem kann es sein, dass der Thread noch Referenzen auf das Level hält und deswegen ist garbage Collection noch nicht möglich. Der wird das aber schon noch cleanen. Deswegen ist das Laden auch noch so schnell.


    Ich habe es nie so gemacht, scheint mir aber eine elegante Lösung. Ich würde den Memory Usage mit den Profilingtools genau anschauen. Sollte aber eig. Kein Problem sein.


    Gruss

    Hallo


    Das ist ja mal ein interessantes Projekt.

    Mit t.maxFps kannst du die FPS auf 60 setzen oder in den Settings.


    Dann kannst du überlegen, ob du die Simulation in mehrere einzelnen Threads packen kannst.

    Das wird zum Beispiel beim Animation BP so gemacht.


    Alternativ und deutlich einfacher kannst du es vermutlich auch mit der Tick Group deines relevanten Actors umsetzen, also mit einer custom tick group.

    So kannst du eine Gruppe von Actors maximal priorisieren. Das bedeutet mehrere Ticks pro Frame, statt wie normalerweise einmal zu irgendeinem Zeitpunkt im Frame.


    Hoffe, das hilft dir weiter.

    Gruss

    Doch, das eignet sich schon sehr gut.

    Vom Ablauf wäre grob etwa so:

    Ein Spieler "beschwört" oder aktiviert die Axt über eine Gameplay Ability.

    Danach verteilt die Axt allen Spielern in Reichweite ein Gameplay Effekt, z.B. Direkter Schaden, Schaden über Zeit oder sonstiger Debuff.

    Gleichzeitig würden noch Gameplay Cues für die nötigen Effekte sorgen.


    Die Spieler müssen natürlich die entsprechenden Attribute haben, etwa Health und Energie o.ä.

    Hallo


    Richtig ist, dass diese Attribute numerisch sind. Das müssen sie sein, weil die ganzen Berechnungen über die Effects gemacht werden.

    FGameplayAttributeData ist einfach ein Struct mit Current und Base Value.

    Das ist wichtig für Buffs etc.


    Ansonsten kannst du natürlich trotzdem replizieren, was immer du willst.

    Gruss

    Du setzt bei beiden die Target Arm Length des Spring Arms direkt.

    Du willst vermutlich beim Wheel Event nicht direkt den SpringArm editieren sondern erst einmal die lokale TargetArm Variable, wenn du FInterpTo nutzen willst.

    Oder anders gesagt, die beiden Events kommen sich die Quere und Tick gewinnt.

    Hallo

    Der Konstruktor wird nicht erst dann ausgeführt, wenn du das Objekt in die Szene ziehst.

    Ich vermute, dass du nicht alle "Trigger Componente" nennen darfst. Der Name muss unique sein.

    Vielleicht fängt die Engine das auch ab und erstellt dann selber ein anderer Name, zur Sicherheit habe ich hier die Iterationsnummer hinzugefügt.

    Also einfach erstellen hinzufügen.

    Code
        for (int i = 0; i < 5; i++)
        {
            FName MyFName = FName("MyFName_" + FString::FromInt(i));;
            UBoxComponent *B = CreateDefaultSubobject<UBoxComponent>(MyFName);
            B->SetupAttachment(GetRootComponent());
            BoxComponents.Add(B);
        }

    Es zeigt es dir dann an und du kannst es editeren.


    Was du brauchst ist Client-Side Prediction.

    Die Grundidee besteht darin, die Aktionen des Spielers auf der Client-Seite zu simulieren, bevor er eine Bestätigung vom Server erhält, sodass das Spiel auch bei einer Verzögerung auf dem Server reibungslos weiterlaufen kann.


    Das laufen beim Character ist zum Beispiel Client-Side predicted, weil es sonst extrem clunky würde, falls man das komplett synchron hält.

    Die Unreal Engine unterstützt es in diversen Bereichen.

    Du kannst also Dinge auf dem Client machen, bevor der Server das bestätigt hat. Sehr wichtig, selbst bei normaler Internetgeschwindigkeit.
    Wenn es ein Cheater o.ä. ist, kommt es zu einem Rollback. Im Falle des Chracters wird die Position korrigiert.


    Hoffe das hilft dir weiter.

    Hallo


    Verstehe dein Setup nicht ganz.

    Falls du Unreal Engines Listen oder Dedicated Server nutzt kannst ein ein Multicast Event erstellen und dort drin dann dein Level wechseln. Wenn dein Editor nicht der Server ist musst du zuerst mittels run on Server zum Server.

    Das ist ganz einfach und geht in Blueprint.


    Wenn nicht kannst du die Remote Control API verwenden, dann kannst du es mittels Webanwendung die Funktion Level wechseln aufrufen.


    Gruss

    Hey zusammen


    Ich erinnere mich an ein ähnliches Problem.

    Ich musste das Collision Profile wieder setzen, beim Aktivieren von Physics und nachher wieder beim Deaktivieren.


    Code
        WeaponComponent->SetCollisionProfileName("IgnoreOnlyPawn");
        WeaponComponent->SetGenerateOverlapEvents(false);
        WeaponComponent->SetSimulatePhysics(true);
    
    Später:
        WeaponComponent->SetSimulatePhysics(false);
        WeaponComponent->SetCollisionProfileName("NoCollision");

    Vielleicht hilft dir das ja.


    Gruss

    Wenn die Units auf dem Weg zum Ziel keine Formation brauchen, ist es simpel, du berechnest einfach eine Formation am Zielpunkt mit Positionen für jede Unit, und erteilst den entsprechenden MoveTo Befehl.


    In den meisten RTS soll die Formation aber auch unterwegs eingehalten werden und sich dynamisch an das Terrain anpassen.

    In diesem Fall muss man die Units zuerst zusammen ziehen. Hier muss man entscheiden, in welchem Radius das geschehen soll. Die Formation kann nicht auf weit entfernte Einheiten warten, nahe Einheiten müssen aber aufschliessen können, typischerweise verlangsamt die Formation, um das geschehen zu lassen.

    Dann muss die Formation in Laufrichtung berechnet werden. Je nach Rotation muss dabei die ganze Formation neu berechnet werden.


    Auch kleinere Rotationsänderungen unterwegs führen dazu, dass die Formation auseinanderfallen würde, das passiert zwangsläufig, weil diese eine höhere Distanz zu gehen haben bei Kurven. Entsprechend muss die Formation auch hier verlangsamen. All das erlaubt es dann, dass sich in die Bewegungsrichtung orientiert und dabei stets in Formation.


    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.

    Hi


    Habs kurz angeschaut. Scheinbar kann Ue4ProjektMobile nicht compiliert werden.

    Diverse Fehler.

    Empfehle dir einen kompletten Rebuild in Visual Studio zu machen und wenn du da immernoch Fehler bekommts, diese genau anschauen.


    Gruss

    Hi


    Ja, die engine bietet sehr umfangreiche Profiling tools, du kannst so gut wie alles analysieren.

    Hier die docs dazu.

    Profiling ist sehr wichtig zur optimierung, denn Spiele müssen auch auf schwächeren Rechnern laufen können. Zudem ist es immer ein Kompromiss, ressourcen sind grundsätzlich knapp und man muss diese entsprechend möglichst effizient einsetzen für das beste Resultat. Du hast ja ziemlich starke hardware, wenn dein Projekt nur 20 FPS schafft ist es wohl weit ausserhalb vom Performance target. Du kannst auch die verschiedenen View Modi benutzen, die färben dir gewisse Probleme auch gleich ein.


    Gruss

    Hi


    Du nutzt version control, git oder?

    Es liegt an dem:

    Code
    VR_Testprojekt_Hbf/Content/Objekte/20220729_komplettMelange/Geometries/\357\277\234berbau.uasset

    Schau mit git status das alles richtig commited ist und der lokale Stand sauber ist.


    Gruss

    Hallo


    Du musst unter "VRTemplate/Blueprints", BP_Texturentest öffnen. Diesen compilieren und saven. Das dürfte dir Fehler anzeigen. Du erstellst dort ein struct, dort ist wohl die referenz rausgefallen. Die musst du wieder setzen.


    Gruss


    // Edit: Ups, das hatte ja kyodai schon geschrieben.