概要
Unity PlayMaker用カスタムアクションの紹介です。
LvMixerVolumeManager は、オーディオミキサーを操作するアクションです。
1. インデックスによる「横並び」のデータ管理
このアクションの最大の特徴は、3つの配列(リスト)をインデックス番号で紐付けて管理している点です。インデックスとは、リストの各項目に振られた [0], [1], [2]… という番号のことです。
設定のルール
リストの数は揃える: Parameter Names、Volume Variables、Save Keys の Size(要素数) は必ず同じ数字に設定してください。
同じ番号(Index)はひとつのセット: Index [0] に設定した項目は、すべて「セット0」として連動します。
2. 具体的な設定例(Master / BGM / SE の場合)
設定画面のFSMにアクションを追加し、各リストの Size を 3 に設定した際の入力イメージです。
| Index | Parameter Name (ミキサー側) | Volume Variable (FSM変数) | Save Key (保存名) |
| [0] | MasterVol | vol_master | CONF_MASTER |
| [1] | BGMVol | vol_bgm | CONF_BGM |
| [2] | SEVol | vol_se | CONF_SE |
動作の仕組み: プレイヤーがSEのスライダーを動かして vol_se (Index 2) が変化すると、アクションは自動的に Index 2 のセットだけを処理し、ミキサーの SEVol を書き換え、CONF_SE という名前で保存します。
3. 導入の手順
ステップ1:Audio Mixerの準備
Audio Mixer内の各グループ(Master, BGM等)の Volume を右クリックし、Expose to script を選択。
Exposed Parameters パネルで、名前を MasterVol などに変更(これが Parameter Name になります)。
ステップ2:FSMの構築
設定画面のステートに LvMixerVolumeManager を配置。
同じステートに UI Slider Get Value などのアクションを配置し、各スライダーの値を vol_master などの変数にリアルタイムで格納するようにします。
LvMixerVolumeManager の Every Frame を ON にします。
4. この設計のメリット
- 「迷子」にならない: 「BGMの設定を変えたのにMasterが保存された」といったミスが、インデックスで管理することで防げます。
- 一括ロード: ゲーム起動時にこのアクションが実行されると、すべての Index を一気にスキャンし、保存された値を読み込んでミキサーに反映します。
- 保守性: 音の種類を増やしたい時(例:ボイス音量)、リストの Size を増やして Index [3] を追加するだけで完了します。
5. 注意点
- 0(無音)の扱い: スライダーを最小にしてもエラーが出ないよう、内部で $0.0001$ に補正してからデシベル計算($\log_{10}$)を行っています。
- セーブのタイミング: Auto Save が ON の場合、スライダーを動かしている間、常に PlayerPrefs.Save() が走ります。負荷が気になる場合は、設定画面を閉じるタイミングで一度だけセーブする等のカスタマイズも可能ですが、現在の PC/モバイル性能であればこのままで問題ありません。
ダウンロード
Zipファイルに入っているスクリプトをPlayMakerのActionフォルダー内に適当なフォルダーを作って入れてください。
このスクリプトで何か問題があっても責任は取れませんので、ご理解の上で使用願います。
このアクションが気に入ったら、何か私の作ったゲームを買っていただけると助かります!


コメント