🤖

Uniteのオプションメニューの弄り方

2023/05/09に公開

RPG Maker Uniteのデフォルトゲームを開いたところ、音量調整が20%単位と幅が大きくて辛かったのでオプションメニューを改変する方法を調べました。

前提条件

  • Unity: 2021.3.24f1
  • RPG Maker Unite: Version 1.00.00
  • JetBrains Rider 2023.1.1

Uniteにおけるオプションメニューについて

Uniteには、2つのオプションメニューが存在します:

  1. タイトル画面のオプションメニュー
    • Assets/RPGMaker/Codebase/Runtime/Title/OptionMenu.prefab
    • Assets/RPGMaker/Codebase/Runtime/Title/OptionManuController.cs
  2. ゲーム内のオプションメニュー
    • Assets/RPGMaker/Codebase/Runtime/Map/Asset/Prefab/MenuWindow01.prefab

ベースとなるのはタイトル画面のオプションメニューで、ゲーム内のオプションメニューは前者を一部参照しています。

オプションメニューを編集する

見た目を変える

タイトル画面のオプションメニュー

まず、UniteのモードをRPG Maker + Unity EditorまたはUnity Editorに変更してUnity Editorを表示します。
画面下部のプロジェクトビューワーからAssets/RPGMaker/Codebase/Runtime/Title/OptionMenu.prefabファイルを開きます。
すると、デフォルトのメニュー画面が表示され、ここで編集する事が出来ます。
左側の「ヒエラルキー」タブが各UIのオブジェクトを、右側の「インスペクター」タブが選択したオブジェクトの詳細を表示しています。
以下の画像では、例としてオプションメニューの枠の色を緑にしています。
title-option-edit

ゲーム内のオプションメニュー

ゲーム内のオプションメニューはメニュー画面のprefabの中にあるのですが、実はUniteにおいてメニュー画面は6つあります。

  1. Basic
  2. Basicの反転
  3. Simple
  4. Simpleの反転
  5. Portrait
  6. Portraitの反転

これらの項目の番号はUniteのファイルにおける番号と同じです。
オプションメニューはそれぞれのprefabに存在しているため、自分のゲームで使用するメニュー画面を編集しましょう。
ここでは、デフォルト設定である5番を使用します。
Assets/RPGMaker/Codebase/Runtime/Map/Asset/Prefab/MenuWindow05.prefabファイルをUnityで開きます。
すると、メニュー画面が表示されるのでヒエラルキータブから「MainWindow」を選択し、インスペクターから名前横のチェックボックスを外します。

次に、ヒエラルキータブから「OptionMenu」を選択し、チェックボックスを付けます。

すると、タイトル画面のオプションメニューと同様にオプションメニューが表示されるので編集を行います。

ボタンの挙動を変える

プロジェクトビューワーから先ほどのprefabと同階層にあるOptionController.csを開きます。
色々書いてありますがここで重要なのは以下の6つの関数です。

  1. AlwaysDashEvent(): 常時ダッシュのオン/オフ
  2. CommandRememberEvent(): コマンド記憶するのON/OFF
  3. OnChangeBgmVolumeClicked(): BGMの音量調整ボタン押下時
  4. OnChangeBgsVolumeClicked(): BGSの音量調整ボタン押下時
  5. OnChangeMeVolumeClicked(): MEの音量調整ボタン押下時
  6. OnChangeSeVolumeClicked(): SEの音量調整ボタン押下時

これらはそれぞれの設定項目に対応した関数で、該当するボタンが押された時に呼ばれます。

例として、BGMの音量調整を10%刻みにしてみましょう。
Uniteのコードをどこまで出して良いかが分からないので具体的なコードを出さずに説明します。
161行目と163行目の20を10に変えます。
その後、保存してゲームをテストプレイしてみましょう。BGMの音量を10%刻みで変えられるはずです。

まとめ

以上、RPG Maker Uniteでオプションメニューを変える方法でした。
Uniteは良い製品だとは思うのですが、こだわってカスタムしようとすると本体について理解して弄らないといけないのが難点ですね。
Unite自体のコードベースも大きいので理解するのも一苦労です。
今後とも何か弄る事があればなるべく記事として残していこうと思います。
また、弄りたい物があるけどどうすればいいか分からないので調べて欲しい、というリクエストがあればコメントでどうぞ。

おまけ

gitでパッチを適用したい人向け
Subject: [PATCH] 設定画面での音量の調整幅を10%に変更
---
Index: Assets/RPGMaker/Codebase/Runtime/Title/OptionController.cs
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/Assets/RPGMaker/Codebase/Runtime/Title/OptionController.cs b/Assets/RPGMaker/Codebase/Runtime/Title/OptionController.cs
--- a/Assets/RPGMaker/Codebase/Runtime/Title/OptionController.cs	(revision 0f9a8c99914f837e3ef7ea90936387415e790f7f)
+++ b/Assets/RPGMaker/Codebase/Runtime/Title/OptionController.cs	(date 1683585143636)
@@ -158,9 +158,9 @@
         public void OnChangeBgmVolumeClicked(Button _target) {
             var value = 0;
             if (_target.name == "Up")
-                value = 20;
+                value = 10;
             else if (_target.name == "Down")
-                value = -20;
+                value = -10;
 
             var volume = _runtimeConfigDataModel.bgmVolume;
             volume = Math.Max(0, Math.Min(volume + value, 100));
@@ -183,9 +183,9 @@
         public void OnChangeBgsVolumeClicked(Button _target) {
             var value = 0;
             if (_target.name == "Up")
-                value = 20;
+                value = 10;
             else if (_target.name == "Down")
-                value = -20;
+                value = -10;
 
             var volume = _runtimeConfigDataModel.bgsVolume;
             volume = Math.Max(0, Math.Min(volume + value, 100));
@@ -208,9 +208,9 @@
         public void OnChangeMeVolumeClicked(Button _target) {
             var value = 0;
             if (_target.name == "Up")
-                value = 20;
+                value = 10;
             else if (_target.name == "Down")
-                value = -20;
+                value = -10;
 
             var volume = _runtimeConfigDataModel.meVolume;
             volume = Math.Max(0, Math.Min(volume + value, 100));
@@ -233,9 +233,9 @@
         public void OnChangeSeVolumeClicked(Button _target) {
             var value = 0;
             if (_target.name == "Up")
-                value = 20;
+                value = 10;
             else if (_target.name == "Down")
-                value = -20;
+                value = -10;
 
             var volume = _runtimeConfigDataModel.seVolume;
             volume = Math.Max(0, Math.Min(volume + value, 100));

:::details

Discussion