Multiplayer: Footstep Sounds in World Location ?

  • Hallo zusammen,


    in meinem Multiplayer habe ich Footsteps implementiert und im AnimBP zugewiesen (via Surface Types und Physical Materials). Jetzt habe ich gemerkt, dass "Play Sound at Location" im Anim BP nichts bringt,
    der Sound wird allen anwesenden Clients sowie Server gleichermaßen abgespielt (also nichts mit Location).


    Jetzt habe ich in allen Character BPs ein Audio Component hinzugefügt, was nur dem jeweiligen Character BP zugewiesen ist. Logischerweise muss der Sound eig von da abgespielt werden (Siehe Screen).
    Ist aber leider nicht der Fall.


    Hier mein AnimBP:


    Hier mein CharacterBP Viewport (mit dem Audiocomponent):


    Hier mein Character BP Event Graph:


    Habe hier zwei Events (Run on Server, RELIABLE) erstellt die mit dem jeweiligen Soundinput vom AnimBP gefeuert werden und dann im Character BP nochmal zu zwei Events Feuern (Multicast, RELIABLE).


    Ich dachte eigentlich, das sei der richtige weg, um vom Client einen nicht replizierbaren Sound für alle Clients hörbar zu machen.


    Die Sounds sind auch für alle Clients hörbar, mein Problem ist nur, dass die Sounds immer noch nicht in der World als 3D Sounds zum klingen kommen, sondern als 2D und zwar für jeden client gleichermaßen hörbar.


    Attenuation Settings habe ich bereits bearbeitet, mit Prints geprüft ob alles korrekt feuert. Ich will einfach nur, dass wenn sich ein character bewegt,


    dass seine footsteps nur in seiner umgebung hörbar sind und nicht überall in der world.


    Hat jemand ne Idee, was ich da noch probieren könnte?


    Gruß

  • Auf dem unteren Bild ist zu sehen dass du auf jedem Client für sich selbst die Koordinaten ermittelst wo der Sound abgespielt werden soll. Also da wo du gerade bist wird der Sound für dich abgespielt. Den Teil mit der World Location würde ich auf dem Server machen und die Position per Multicast Variable rüber schicken.


    Achja, ich weiß nicht was sich hinter der blauen "Sound" Variable verbirgt aber ich hoffe du schickst nicht bei jedem Schritt eine wav Datei an den Server und zurück.


    Achja 2.0: Ich denke man kann das auch komplett über den Client lösen.

  • Achja, ich weiß nicht was sich hinter der blauen "Sound" Variable verbirgt aber ich hoffe du schickst nicht bei jedem Schritt eine wav Datei an den Server und zurück.

    Thx für die Antwort. Die "Footsteps Sound" Variable ist leer. Ein Reines platziertes Audio Component im Character BP, damit man Attenuation bzw. Spacialazation machen kann.


    Die wird sozusagen genährt von der "Attach to" (Spawn Sound Attach) Node. In die Attach Node geht der Sound aus dem Event und der Sound aus dem Event kommt wiederrum aus dem AnimBP, aus dem entsprechenden Surface Type, der einem Physical Material zugeordnet sind (Siehst du im ersten Screen). Das sind "Sound Base" Variablen, die durch die Attach Node meiner Audio Component zugeordnet werden. Ehrlichgesagt weiß ich nicht, ob ich meine Soundcues zum Server schicke.


    Wäre es denn dann nicht komplett unrepliziert, wenn ich das komplett über Client lösen kann? Sounds können meineswissens bisher nicht repliziert werden.


    Gruß

  • Ja, wäre unrepliziert. Ist ja auch der Sinn meines Vorschlages. Du hast doch die Position und die Animation des anderen Spielers bereits auf deinem Client. Du siehst wo er ist und was er macht.


    Einfacher ist es so zu machen wie du es vorgattest. Nur ist da das Verständnis für den Client Server Ablauf wohl noch nicht ganz da. Die Position muss auf dem ersten Client vor dem Server oder auf dem Server (da dort sowieso repliziert) ermittelt und verschickt werden. Oder eben die etwas kompliziertere Version. Muss man halt CPU gegen Netzwerk Auslastung Abwegen.


    Und schick lieber ne Variable welcher Sound abgespielt werden soll anstatt den Sound rüber.

  • Hat es überhaubt jemand das geschafft? Jeder Ton, der vom Erzeuger ausgeht, wird auch nur von dem Abgespielt. Das hat was mit dem 3D Sound vom CUE zu tun. Selbst das neu Spawnen von Objekten die automatisch einen Sound abspielen sollen, als Component, oder Begin Play) geht nur vom erzeuger aus. Auch Instanzen werden so behandelt. Es ist aber eher meine Meinung was ich in Erfahrung gesammelt habe.
    Die einzige Lösung die mir nur einfällt, ist alle Daten nochmal am anderen Spieler erneut abzuspielen. Dafür muss die Coords und Sound geschickt werden.


    Wenn jemand eine normale Lösung hätte mit replizieren, dann bitte als Blueprint posten, mich würde das auch brennend interessieren.

  • Also wie man den Sound 3D bekommt habe ich jetzt Raus. Die wav darf nur einen Kanal haben (Mono), was eigentlich logisch ist. Dann eine cue erstellen die ca. so aussieht.




    Ich teste aber noch wie es im Multiplayer aussieht. Muss das Ding jedes mal kochen und auf Lappi kopieren. Multiplayer Sound kann man auf einem Rechner ja schlecht testen.


    EDIT:
    Läuft jetzt. Muss nur gucken das ich auf meinem eigenen Client wieder die 2D sounds abspiele und von allen anderen Clients 3D. Momentan ist jetzt auch meiner 3D. Klingt etwas anders. 2D hat mir besser gefallen.

  • 2D für seine eigene Spielfigur. Wenn du bei CS:GO schießt dann ist das ein 2D Stereo Sound. Der Abstand zwischen Soundquelle und Kamera ist ja immer gleich und in der unmittelbaren Nähe. Wenn ein anderer Spieler schießt ist es 3D Mono.


    EDIT
    Sollte jetzt gehen bei mir. Neue Erkenntnis. Wechselt man das Target einer Node ist bei allen Nodes dahinter dieses Target gesetzt wenn man bei den Nodes keines setzten kann. Sachen gibts.


    Reicht das Bild mit dem cue für euch oder soll ich ein Beispiel erstellen wie ich es jetzt gemacht habe?

  • Vielleicht weil es zu simpel ist. :ass:


    Sorry für die Verspätung. Die chinesischen Kinder im Keller waren zu langsam mit der Socken Produktion und brauchten ein paar motivierende Peitschenhiebe.


    Ich bin hier auf dem Laptop (Player 1) hin und her gelaufen und habe F1 gespamt. Hatte Kopfhörer vom PC auf (Player 2) und der Sound hat sich je nach Position/Entfernung entsprechend verändert.


  • Ich habs getestet, leider gibt es auch dort kein Erfolg. Ich habe es mit ein Schusstreffer eingerichtet. Dort wo ich treffe, soll ein Soundabgespielt werden. Eigentlich nix anderes als deine F1 Taste.
    Wenn ich Nah stehe, dann höhre ich ton, aber es wird sicherlich vom Server sein, wenn ich vom Server aus schieße (Ich teste es mit PIE). Vom Client funktioniert es auch so. Aber wenn ich vom 2. Spieler so weit weg laufe, bis ich den Treffer nicht mehr höhre, aber der Treffer Nah am 2. Spieler ist, dann hört man leider den Treffer nicht am 2. Spieler. Egal was ich versuche, es geht einfach nicht. Genau das möchte ich gerne mal von jemandem sehen, dass es geht. Also auch mit Video. Dann weis ich, dass dieses Projekt verbuggt ist, oder allgemein meine 4.16.2 Engine

  • Als Text ist dein Problem schwer zu verstehen. Da du Sound vom Server erwähnst, wirst du wohl ein Spieler als Host haben. Ich habe einen Dedicated Server und 2 Clients probiert. Da kann ich die Auswirkung von dem Switch und dem is local controlled Nodes nicht nachvollziehen. Über meinen PC gings aber auch nicht. Auch mit der Einstellung die du oben erwähnt hast. Mit zwei unterschiedlichen PCs ging es. Wüsste auch nicht wie das gehen soll bzw. wie du überhaupt erkennst wer den Sound abspielt. Kommt doch beides aus dem gleichen Lautsprecher.


    Mach folgendes um die Fehlerquelle zu finden.


    1. Der Sound. Schieb deine cue Datei in das Level. Es müsste so aussehen wie auf dem Screenshot. Wenn die Kamera deines Spielers den Bereich im Spiel betritt muss der Sound zu hören sein. Stell den Sound dazu auf looping. Nicht vergessen. Die wav Datei bei mir hat nur einen Kanal (Mono) und Override Attenuatin muss an sein.



    2. Die Koordinaten. Erstell einen Blueprint Actor. Füg dort was sichtbares ein und lass es wie in meinem Beispiel mit den gleichen Koordinaten Spawnen. Ist es zu sehen? Ist es nur bei einem Spieler zu sehen?


    Wenn beides funktioniert dann ist alles richtig. Du kannst es dann einfach nicht auf einer Hardware testen.

  • Hab es in das Thirdperson Testprojekt eingebaut. Wenn man es ohne dedicated Server macht muss man das Switch weglassen. Hab es so eingebaut. Auf einem PC funktioniert es nicht mal wenn es kompiliert ist. Auf zwei unterschiedlichen läuft es. Ich lade es jetzt hoch. Einfach auf zwei Rechnern entpacken und über die .bat starten. IP in die starteClient.bat eintragen. (link zum Download kommt per Edit gleich rein.)


    EDIT:
    https://mega.nz/#!nwR11bJB!sZW…d0Q06IXuzWsFKoQ4OOla7_Mw4 (330 MB)