この記事はプラグイン初心者、JavaScript初心者に向けて書いた記事です。
もし分からない部分がありましたらコメント欄やtwitterで気軽に質問して下さい。


RPGツクールMVは基本的にイベントコマンドを組み合わせてゲームを作っていきますが、イベントコマンドの中に『スクリプト』という項目がありますね。
よく『スプリクト』と間違えられることがありますが『スクリプト』です。
プラグインを作る前に、まず簡単なスクリプトを使えるようになりましょう。


よく使うスクリプトをいくつか紹介します。

・$gameVariables.value(変数番号)
これは、指定した番号の変数の値を取得するスクリプトです。
たとえば『$gameVariables.value(5)』と書けば変数5の値を取得することが出来ます。

・$gameVariables.setValue(変数番号,数値)
これは、指定した番号の変数に任意の値を代入するスクリプトです。
たとえば『$gameVariables.setValue(6,10)』と書けば変数6に10を入れることが出来ます。

そしてこれらは組み合わせて使うことも出来ます。
たとえば『$gameVariables.setValue(10,$gameVariables.value(3))』と書けば変数10に変数3の値を入れることが出来ます。

また、このスクリプトで求めた値同士を足したり引いたり掛けたり割ったりすることも出来ます。
たとえば『$gameVariables.value(1) + $gameVariables.value(2)』と書けば変数1の値と変数2の値を足し算することになります。


・var ○○
上でスクリプト同士の足し算を書きましたが、足して出てきた値はどのように扱うのでしょうか?
スクリプト内で『var a』と書くとそのスクリプト内でだけ使える一時的な変数『a』を用意することが出来ます。
この変数の名前は『takashi』でも『apple』でも何でも構いません。自由に付けられます。
また、『var』は最初にその変数を用意する時にだけ付けて、それ以降は『var』は付けません。
『var takashi = $gameVariables.value(1) + $gameVariables.value(2)』と書くことで変数1と変数2を足し算した値が『takashi』に入り、
『$gameVariables.setValue(3,takashi)』と書くことで変数3に『takashi』の値を入れることが出来ます。

a1


さて、ここまで見てきて、スクリプト初心者の方の中には「見慣れない英語がたくさん出てきて覚えられない!」と思った方もいるんじゃないでしょうか。
そこで、これらをもう少し簡単に書けるようにするプラグインを作ってみましょう。

プラグインを 作る際には、専用の編集ツールを使うと見やすいです。
有名なものでは VisialStudioCode や Brackets などがあります。
私はVisualStudioCodeを使ってます。
あまりこういった難しそうなものを使いたくないという場合はパソコンに付属している普通のメモ帳などで書く事も出来ます。
(とはいえ本格的にプラグインを自作するようになったら専用の編集ツールを使った方が便利です)


プラグインを書く準備が整ったら、まずプラグインの基盤として、
(function()){

})();

と書いて下さい。
これについてはどういう意味なのかは今は覚えなくてもいいです。
というか私も上手く説明できません。とにかくこういう風に書くものと覚えておけばいいでしょう。
そうしたらこのカッコ内に実装したい処理を書いていきます。


では手始めに簡単なことを。
先ほどのスクリプトでは、$gameVariables.~~~~~というのがとても長くて覚えにくかったと思います。
なのでこれをもっと短く書けるようにしてみましょう。
上のカッコ内に
GV = function(a){
    return $gameVariables.value(a);
};

と書いてみて下さい。

1つ用語を説明していませんでしたが、$gameVariables.value() などのような ~~~() という形のものを『関数』『メソッド』と呼びます。
厳密に言うと『関数』『メソッド』はやや違うものなのですが、あまり使い分けなくても大抵伝わります。

そして、上の
GV = function(a){

}
というのは『新しい関数をGVという名前で定義する(創りだす)』という意味です。
GVという名前は今回$gameVariables.valueの略ということでGVにしたのですが、好きな名前を付けて構いません。
このカッコ内に、この関数ではどういうことをするかというのを書いていきます。


ところで、最初に少し紹介したスクリプトで、$gameVariables.value()は変数の中身を取得して外に出す関数でしたが、$gameVariables.setValue()は関数の内部で変数に数値を入れる処理をしているだけで、この関数自体が外に何かを出すことはありません。
(この違い分かりますか?)
value()のように何かを外に出して取得したい場合は return という書式を使います。
GV = function(a){
    return $gameVariables.value(a);
};
return $gameVariables.value(a); は、$gameVariables.value(a)の値を外に出すということになります。
もし return を付けなかった場合この関数は何の数値も返してくれません。


少し説明が長くなってしまいましたが、とりあえずここまで出来たら一旦保存して使ってみましょう。
適当な名前を付けてファイルを保存して下さい。

a2

保存する際に2つ注意点があって、まず1つ目はファイルの拡張子を『.js』にして下さい。
それから、文字コードは『UTF-8』で保存して下さい。
文字コードはスクリプト編集ツールを使っている場合は最初からUTF-8が設定されていると思いますが、メモ帳などを使っていると別の文字コードになっていることがあるので注意です。
文字コードが違っていると文字化けします。


これで、イベントコマンドのスクリプトでGV()という関数が使えるようになりました。
先ほどのスクリプトで$gameVariables.value()と書いていた部分は全てGV()に置き換えることが出来ます。

a3

いちいち$gameVariables.value と書くより大分簡単に書けるようになりましたね。
ちゃんと動いていますでしょうか?
もしエラーが出てしまった場合、ゲームを起動させた直後のタイトル画面でF8キーを押してみて下さい。
そうするとデベロッパーツールというデバッグ用のツールが開きます。

a4

タイトル画面の時点で赤字のエラーメッセージが出ていたら、プラグインの読み込み自体に失敗しているということです。
ファイル名や拡張子がおかしかったり、プログラム内でカッコの付け忘れ、余分に付けてしまっている部分など無いか確認して下さい。

(↑ 今回作っているプラグインの場合は、です。プラグインの内容によっては、タイトル画面の時点でエラーメッセージが出ているからといって必ずしも読み込みに失敗しているとは限りません)


では次に、$gameVariables.setValue の方も同じように短いコマンドで入力出来るようにしてしまいましょう。
こちらもほとんど同じ書き方で出来ます。
GSV = function(a,b){
    $gameVariables.setValue(a,b);
};

先ほどのは数値を返す関数なので return を付けましたが、こちらは返すものがないので return を付ける必要はありません。

a5

これで $gameVariables.setValueGSV に置き換えることが出来るようになりました。

a6

とてもすっきりしましたね。
最初は本格的なプラグインを作れなくても、このようにスクリプトでよく使うものを簡単なコマンドに置き換えるだけでも大分スクリプトを使いやすくなります。

ただしここでまた1つ注意点があります。

関数の名前は基本的に自由に付けることができますが、あまりにシンプルな名前にすると、他のプラグインで同じ名前が使われていて競合することがあります。
今回は説明のために分かりやすさを優先して『GV』『GSV』というかなりシンプルな名前を付けましたが、もし色々なプラグインを導入している場合、自分が入力しにくくならない範囲でなるべく独自性のある名前を付けた方が問題は起こりにくいです。

よくある手法としては、名前の頭に自身の名前を付けたりします。(hanako_GV など)
こういう風にすれば被る可能性は0ではないですがそうそう被ることは無くなります。
もちろんあまり他者作のプラグインを使わない場合は入力しやすさを優先して『GV』『GSV』のままでも大丈夫です。




ちなみに、もし上のスクリプトのように『変数1と変数2を足してその値を変数3に代入する』という一連の流れを頻繁に使う場合、ここまでを全て引っくるめて1つの関数にしてしまうことも出来ます。
その場合はこんな風に書きます。

tashite_dainyuu = function(a,b,c){
    var d = $gameVariables.value(a) + $gameVariables.value(b);
    $gameVariables.setValue(c,d);
};

プラグインでこういう関数を作っておけば、スクリプトに『tashite_dainyuu(1,2,3)』と書くだけで変数1と変数2の値を足してその値を変数3に代入する処理を一気にやってくれます。

次回はこのように少し発展した関数の書き方を紹介していこうと思います。