LoginSignup
0
0

【UEFN】BGMやSEなどのサウンドをVerseで操ってみる

Last updated at Posted at 2023-12-08

背景

ゲームの要素として重要なものの一つとしてBGMやSEがあります。それらを柔軟に扱ってみたかったので今回調べ始めました。

音声素材をインポートする方法

UEFN には .wav、.slac、.ogg、または .aif 形式のオーディオ ファイルをインポートできます。このエディタでは、これらのファイルを認識して直接使用できます。また、それらを サウンド キュー として保存することで、追加の機能を利用することもできます。

上記の形式に沿ったオーディオファイルをコンテンツドロワーにインポートorドラッグアンドドロップするとサウンドウェーブファイルができます。
image.png
この形式のままでも良いのですがもっとサウンドに編集を加えたいときが来ると思うのでこのファイルを右クリックしてキューを作成をするのがよいかもしれません。
image.png
image.png
キューファイルをダブルクリックすると以下のようなノード画面が開きます。ここで様々な事ができます。
image.png

BGM素材について

ループにチェックを入れておくと無限に流れるようにできます。
image.png

Verseでサウンドを鳴らしてみる

動画

利用するDevice

オーディオプレイヤー
image.png
切り替えるスイッチ?
image.png

配置

image.png

全体コード

using { /Fortnite.com/Devices }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/Diagnostics }

sound_manager_device := class(creative_device):

    @editable
    bgm1_player:audio_player_device=audio_player_device{}

    @editable
    bgm2_player:audio_player_device=audio_player_device{}

    @editable
    se_player:audio_player_device=audio_player_device{}

    @editable
    bgm_player_switch:switch_device=switch_device{}

    @editable
    bgm_change_switch:switch_device=switch_device{}

    @editable
    se_player_switch:switch_device=switch_device{}

    var is_play_bgm : logic = false
    var bgm_order : int = 0

    OnBegin<override>()<suspends>:void=
        bgm_player_switch.StateChangesEvent.Subscribe(PlayAndStopBGM)
        bgm_change_switch.StateChangesEvent.Subscribe(ChangeBGM)
        se_player_switch.TurnedOnEvent.Subscribe(PlaySE)

    PlayAndStopBGM():void=
        if (bgm_order = 0, is_play_bgm = false):
            set is_play_bgm = true
            bgm1_player.Play()
            bgm2_player.Stop()
        else if (bgm_order = 1, is_play_bgm = false):
            set is_play_bgm = true
            bgm2_player.Play()
            bgm1_player.Stop()
        else if (is_play_bgm = true):
            set is_play_bgm = false
            bgm1_player.Stop()
            bgm2_player.Stop()

    ChangeBGM():void=
        if (bgm_order = 0):
            set bgm_order = 1
        else if (bgm_order = 1):
            set bgm_order = 0

    PlaySE(Agent:agent):void=
        se_player.Play(Agent)

プレイヤーを指定してPlay関数を呼ぶだけで音が鳴り始めるようです!

    bgm1_player.Play()
    bgm2_player.Stop()

Play関数の引数にagentを入れるだけでそのagentと紐づいているプレイヤーのみに向けて音を鳴らせます。

    se_player.Play(Agent)

まとめ

サウンドキューをVerseで保持できるようになればトランジションなどのBGM切り替えが簡単にできそうだなぁと感じましたw
サウンド関連のデバイスは思った以上に多くてもっと深ぼっていきたいと思いました。
↓これをちょっと使いこなしたい。。
image.png
image.png

余談

この度UEFN/Verseに関するオープンコミュニティサーバーを建ち上げました。ちょっとでも興味があれば奮ってご参加くださいませ。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0