Soundlautstärke und Bewegungsgeschwindigkeit

  • Guten Abend alle zusammen!


    Ich habe mir eine Murmel soweit zurecht programmiert, dass sie in jede Richtung rollt, in die ich möchte. Soweit, so gut. Ich möchte der Murmel einen Roll-Sound verpassen. Das Problem an der Sache ist aber, dass ich keine Idee habe, wie ich einen halbwegs realistischen Sound programmiert bekomme. Logischerweise ist beim Stillstand der Murmel nichts zu hören. Sobald ich aber anfange, los zu rollen, soll der Sound, je schneller die Murmel wird, immer lauter werden. Wie bewerkstellige ich das?


    EDIT: Einen passenden Sound habe ich bereits aufgenommen.


    Ein Bild der programmierten Steuerung ist im Anhang.


    Danke schon mal!

  • An deiner Sound-Funktion wie "play sound at location", hast du wenn du unten an der Node den Pfeil aufklappst, einen Wert für Multiplier. Hier kannst du die Lautstärke über eine Variable (float) bestimmen.

    Du müsstest erstmal die Geschwindigkeit deiner Murmel kalkulieren. Sollte mit "GetVelocity" gehen.

    Also "GetVelocity" --> "VectorLength" --> dann brauchst du einen "Map Range Clamped". Der wandelt deine Geschwindigkeit am besten in einem Wert zwischen 0 und 1 um. Dass kannst du dann in den Multiplier von deinem Sound packen.


    Das ist mein Weg für geschwindigkeitsbasierte Sounds / Lautstärke. Benutze ich z.B. für Footsteps.


    EDIT: Ich sehe gerade dass du statt deinen ganzen Actor nur die Mesh Component bewegst. Da gibt es statt "GetVelocity" auch "GetComponentVelocity".

  • Bralligator


    Ich hab jetzt mal ein bisschen recherchiert und das hier gebaut. Aber ich werd' das Gefühl nicht los, dass ich es falsch gebaut habe, denn der Sound spielt die ganze Zeit normal ab. Ohne leiser/lauter oder höher/niedriger zu pitchen. Ich wette, dass meine Logik total falsch zusammen gesetzt ist ^^

  • Schau mal mit einem Pint String was du für Werte erhältst vom VectorLength. Oder vom Clamp.
    So wie du es aber jetzt aber mit dem Event BeginPlay hast wird da aber nichts passieren wenn du die Kugel bewegst.
    Das Event feuert ja nur einmal zu Beginn halt. Du brauchst aber einen Tick oder machst die Funktion an einer deiner Input Axis ran. Du musst ja dauerhaft checken wie schnell gerade sich deine Kugel bewegt.


    EDIT:
    Vergiss den letzten Teil was ich gesagt habe. Also ja, du musst regelmäßig die Geschwindigkeit auslesen. Aber du hast ja einen Sound der wahrscheinlich gelooped ist? Oder anderes. Jedenfalls wenn du den ja in ein Tick haust startest du den ja jeden Frame von neu :D
    Mit geloopten Echtzeit Sounds wie zB bei einem Auto kenne ich mich noch nicht aus. Müsste ich selbst auch mal schauen.


    NOCHMAL EDIT:
    ich sehe auch gerade dass du ja dein Sound als Comoponent hast und von dem die Werte als funktion ansteuerst.
    Wenn du einen Endlosen looping Sound hast dann kannst du den natürlich bei BeginPlay starten und das Set Volume etc musst du dann über einen Tick laufen lassen.

  • Jaaa, das mit dem EventTick funktioniert. Ich musste ihn nur mit dem EventBeginPlay austauschen. Dass ich da auch nicht selber drauf gekommen bin...


    Danke!


    Jetzt tut sich bei mir die nächste Frage auf: Sobald meine Murmel in der Luft ist, darf kein Sound mehr abgespielt werden.

    Mal schauen, ob ich das gelöst bekomme. Wenn nicht, melde ich mich noch mal. Ansonsten mach ich nen neue Thread auf oder ich such mal, ob es so etwas hier im Forum schon gab.

  • Da kannst du evtl. die Z-Achse von der Velocity checken. Halt die Richtung für hoch und runter.

    Wenn dieser Wert höher als 0,1 ist, dann setzt du die Volume auf 0.
    Vorteil, dadurch hast du dann nicht nur das Springen, sondern auch das Herunterfallen einbezogen. Wenn die Murmel mal von der Bahn fällt :) :P

    Da weiß ich aber nicht wie sich die Z Achse bspw. bei Loopings verhält. Müsste man halt ausprobieren.

    Wenn ich aber darüber nachdenke, dann glaube ich es ist doch nicht so geeignet, Falls Gefälle und Steigungen vorhanden sind.


    - Könntest es aber auch über einen sehr kurzen Trace machen. Dieser überprüft halt ob du Kontakt hast oder nicht.


    - Oder ganz einfach über deinen CanJump Bool. Brauchst dann auch einen fürs fallen..


    Du siehst, es gibt bestimmt 100 Möglichkeiten :D