- 概要
- 公式
- C++で用意したAtomComponentで3D再生
- ループSEを再生しながら再生位置を動的に変化させる
- 再生をやめる
- BP側で距離減衰の設定を上書き
- リスナーの位置をカメラではなくキャラの位置と向きで連動
- アニメーションから音を再生
- Anim Notifyから音を再生
- シーケンサーから音を再生
- 生成してアタッチする
- 停止・一時停止
概要
【UE5】【CRI ADX LE v2】基礎からおさらいしてみる vol.1 - プログラマーの卵の日記
前回の続き的な立ち位置。
公式
今回はこれを主に見つつ勉強
C++で用意したAtomComponentで3D再生
Vol.1でC++から再生できるようにしたと思うのですが、3D音源だとアタッチもしていなければ座標も指定できていないので、0,0,0の座標から音が再生されるようになってしまいます。
変にハマったことですが、ループSEを再生しながら音源の位置移動は出来ないようで、位置移動したら再度停止して再生する必要があるみたいです。
アクター.h
publicにしてBPから弄れるようにします
-
public:
UPROPERTY(EditAnywhere, BlueprintReadWrite)
TObjectPtr<UAtomComponent> AtomComponent;
アクターBP
座標を常に更新するようにします。
Componentのノードとなり、AtomComponent特有のものではないです。
C++でもSetWorldLocation(FVector)で同じことができます。試行錯誤してBPに落ち着いただけです。
ループSEを再生しながら再生位置を動的に変化させる
とりあえず見つけたやり方なので、正しいかはわからないです。
そもそもループSEをそういう風に扱わないかも。
再生をやめる
Stop()という関数/ノードで止められます。
止める際には再生しているかチェックしたほうが安全かもしれない。
BP側で距離減衰の設定を上書き
簡易確認用とかデバッグ用としては良いかもしれない。
上書きとなりAtom Craftでいくら設定しても変わらないということになってしまうので、最終的にはやらない方がいいようには思う。
Override Attenuationを有効にしてAttenuation関係のパラメータを設定すればそれなりに起こせる。
リスナーの位置をカメラではなくキャラの位置と向きで連動
公式を見て行ってみたけど左右が逆…?一旦必要としていないのでスルー
アニメーションから音を再生
Add NotifyのPlay Atom Soundというのをくっつけることで、アニメーションのタイミングで再生が行える。
Followを有効にしてAttach NameをSkeleton Treeにある名前を入れれば、そこから再生されるようになる。
Anim Notifyから音を再生
専用のAnim Notifyを作成し、socketの位置に生成をして再生をさせる。
ちょっとした処理を加えたい場合に有効そうに思われる。
直前と同様にアニメーションにこのAnim Notifyを設定させる。
シーケンサーから音を再生
シーケンサー触ることないから色々雑。
TrackからAtom Trackを選択
Atomに右にある「+」からキューを選択して配置できる。
ただし、ループ設定の曲でもループされないようなので、終了までループしたければ最後まで個数分配置する必要があるように思われる。
生成してアタッチする
再生の生成は基本的にAtom Sound Baseから行います。
Spawn Sound AttachedでAtom Componentを生成しながらアタッチが行えるようです。
停止・一時停止
SetPausedがtrueで一時停止、falseで再開
Stopが停止(終了)
Atom Componentから命令が出来る。
-
/** Stop sound, issue any delegates if needed */
UFUNCTION(BlueprintCallable, Category = "Atom|Components|Sound")
void Stop();/** Cues request to stop sound after the provided delay, stopping immediately if delay is zero or negative */
UFUNCTION(BlueprintCallable, Category = "Atom|Components|Sound")
void StopDelayed(float DelayTime);/** Pause sound playing, issue any delegates if needed */
UFUNCTION(BlueprintCallable, Category = "Atom|Components|Sound")
void SetPaused(bool bPause = true);