power spot. 2023/03/12 00:19

カスタムメニュープラグイン講座(第7回)「簡単なメニューの拡張」

RPGツクールMZ向けのトリアコンタン氏のプラグイン「カスタムメニュープラグイン(SceneCustomMenu.js)」の使い方講座です。

リンク:
カスタムメニュー作成プラグインを調べてみた(とんびさん)


前回は簡単なメニューを作成してみました。今回はそのメニューを応用・拡張したいと思います。


【1】「固定の項目」から「任意の項目」に変更してみる 


前回作成したメニュー(サウンドテスト)では、指定の項目のみを表示・選択可能でした。
この状態では使い勝手が限定されてしまいます。任意の項目(曲)を表示させるためにはどうすればいいでしょうか。
答えはデータスクリプトにありそうです。

以前にも紹介したデータスクリプトのプリセットです。
この中に、任意の曲を表示させるプリセットはあるのでしょうか。
プリセットを選択するまえにツクールのデータベースを開いてみましょう。
アイテムの設定画面で、こんな項目があります。

隠しアイテムA」というパラメータが存在します。こちらは、プレイヤーが取得してもアイテム欄に表示されることはありません。
この設定項目を使い、「隠しアイテムAに曲を設定し、アイテムを所持している場合のみ表示させる」ということをやってみましょう。

まずは曲リストはアイテムとして作成します。

次にデータスクリプトで「$gameParty.items(); // 所持消耗品」を選択します。

また、前回作成したコマンドリストを削除します。

イベントで、曲のアイテムを所持品に追加させます。

実際にテストします。

表示出来ました。しかし、この状態では、所持しているアイテムすべてを表示してしまいます。

特定のアイテムのみを表示させたいところですね。そこで次は「フィルタスクリプト」を設定します。

プリセットの一番上にある「item.meta['value']; // メモ欄に<value>の記述がある」を選択します。
こちらはプリセットの説明通り、メモ欄に<value>という記述がある場合のみ表示させる、というものです。<value>はプリセットの内容なので、別の名前に変更します。今回は<sound>とします。


先程設定したデータベースの曲用のアイテムのメモ欄に<sound>を記述します。

テストしてみます。

項目の取得は成功しました。


【2】選択項目格納変数の利用

さて、表示させることは成功しましたが、このままでは前回同様に決定キーを押しても何も起こりません(前回の決定イベント用に設定したコモンイベントがそのままであれば、曲は再生されますが、項目と紐付けされているわけではないので意図しない曲が再生されます)。
分岐条件を考えてみましょう。

  • 選択項目を取得(アイテム) → アイテムのパラメータで分岐 → 曲を再生

こんなイメージで考えれば良さそうです。実際に設定してみます。
この時、役に立つのが「選択項目格納変数」です。【重要!】

パラメータの説明にもありますが、「選択中の項目オブジェクトが常に格納される変数」とあります。ツクールMZのゲーム用変数は、数字や文字だけでなく、オブジェクトも格納することが出来ます。【重要!】

オブジェクトの説明はまた別の機会にすることにします。今回の場合は、「変数にアイテムのデータベース情報を格納出来る」という感じです。
実際に選択項目格納変数に代入されたデータが以下の通りです。

色々とパラメータが存在します。わかるのもあればわからないものもあると思います。
今回はアイテムのパラメータで分岐が目標です。何か使えそうなパラメータを探してみましょう。
パラメータにidという項目があります。これはアイテムデータベース用IDで、40となっているのはデータベース上の左の数字です。

このIDで条件分岐をすることが出来れば曲を個別に再生することが出来そうです。
決定イベント用のコモンイベントを開き、条件分岐ウィンドウを開いてみましょう。
タブ4の下にスクリプトとあります。ツクールMZでは、スクリプトの評価で条件分岐を設定することが出来ます【重要!】
では、どのように記述するのでしょうか。

まず、n番目のゲーム用変数を取得するスクリプトは「$gameVariables.value(n)」となります。【重要!】 スクリプト、英語が苦手という方もいるかと思いますが、変数を取得するスクリプトは最低限覚えておきましょう。

項目格納変数nからパラメータidを取得するコードは「$gameVariables.value(n).id」です。

このことから、項目格納変数nのパラメータIDがmと同値の場合、という条件分岐を書くためのコードは「$gameVariables.value(n).id == m」です。

今回は「選択項目格納変数IDは3、アイテムIDが40で戦闘曲を再生」をするとします。実際に条件分岐に記述するコードは以下のようになります。

同様にして他のアイテム用IDから分岐条件を設定します。

わかりやすく曲を入手出来るイベントを配置し、テストしてみます。

思い通りに作ることができました。
今回のようにデータスクリプトを活かすことで、例えば行ったことの無い場所に行ったときに曲目を追加や、楽譜アイテムを入手して曲目を追加、などが出来ると思います。


【3】さらに別のメニュー「テレポート」メニューを考えてみる

サウンドテストメニューに関しては以上になりますが、似たようなメニューで「テレポート」用のメニューを作成出来そうです。
アイテムや条件分岐などは先程の設定を参考に設定します。
次に呼び出し方法ですが、スキルやアイテムでコモンイベントを指定できるので、そちらから呼び出しが出来そうです。今回はスキルから設定してみます。
カスタムメニュープラグイン上で各パラメータを設定後、スキルから呼び出すコモンイベントにカスタムメニューを開くスクリプトを記述します。今回は「Scene_Teleport」としました。

次にスキルにコモンイベントを設定します。

あとはアクターに習得させましょう。

これで設定出来ました。テストしてみます。

上手く動きました。

【4】まとめ

今回サウンドテスト及びテレポートの隠しアイテムを利用する案は、筆者がネットのどこかで拝見したものを参考にしました。ありがとうございました。

選択項目格納変数は大変便利なパラメータです。上手く利用すればいろいろなことが出来るでしょう。
さて今回まで簡単なメニュー作成を紹介してきました。
次回はより規模が大きい場合のパラメータをリストにして、管理を簡単にする方法を紹介したいと思います。