RPGツクールMV

RPGツクールMVでプラグインのデータを保存する方法

この記事では、プラグインコマンドでカウントを増やす・カウントを表示するだけの簡単なプラグインを作って、プラグインのデータを保存する方法を解説します。

RPGツクールMVのセーブデータに保存される内容

RPGツクールMVのセーブデータには、DataManagerオブジェクトが持っている以下のグローバル変数の内容が保存されます。

  • $gameSystem(Game_Systemオブジェクト)
  • $gameScreen(Game_Screenオブジェクト)
  • $gameTimer(Game_Timerオブジェクト)
  • $gameSwitches(Game_Switchesオブジェクト)
  • $gameVariables(Game_Variablesオブジェクト)
  • $gameSelfSwitches(Game_SelfSwitchesオブジェクト)
  • $gameActors(Game_Actorsオブジェクト)
  • $gameParty(Game_Partyオブジェクト)
  • $gameMap(Game_Mapオブジェクト)
  • $gamePlayer(Game_Playerオブジェクト)

$gameTemp、$gameMessage、$gameTroopの内容は保存されません。

プラグインのデータを保存する方法としては、次のうちどちらかになります。

  • 上記のグローバル変数に入っているオブジェクトにプロパティを追加する
  • DataManagerのメソッドをオーバーライドして、自分のプラグイン用のグローバル変数を作って保存する

ほかの人のプラグインを見てみたところ、Game_Systemオブジェクトにプロパティを追加する方法が一般的なようです。

Game_Systemオブジェクトにプロパティを追加する

JavaScriptの場合、プロパティに値をいれた時にプロパティが存在しなければ自動的に作ってくれます。

Game_Systemの initializeメソッドでプロパティの値を初期化しておきます。

カウントを増やす addMyCountメソッドとカウントを表示する showMyCountメソッドもGame_Systemに定義しておきます。

サンプルコード1

サンプルコード1の実行結果

イベントの設定です。
RPGツクールMV プラグインのデータを保存する イベントの設定

イベントが実行されるごとにカウントが増えていきます。

セーブしてからデータをロードすると、前回のカウントの値から増えていきます。
RPGツクールMV プラグインのデータを保存する サンプル実行結果

Game_System直下にプロパティを追加する問題点

Game_System直下にプロパティやメソッドを追加していくと、ほかのプラグインと名前がかぶって競合してしまう場合があります。

プロパティが多くなりそうな時は、自作オブジェクトを作ってデータをまとめておくと便利です。

自作オブジェクトを作ってデータを保存する

Game_Systemに自作オブジェクトを返すプロパティを追加します。

プロパティの名前をプラグイン名と同じにすることによって、 $gameSystem.プラグイン名().メソッド名()という風に呼び出すことができます。

プロパティやメソッドの定義はGame_Systemではなく、自作オブジェクト側で定義します。

変数をローカル化するために即時関数で囲っている場合は、自作オブジェクトのコンストラクタ(※)は即時関数の外に出す必要があります。

※Newでオブジェクトを生成した時に実行される関数。
 JavaScriptではオブジェクトと同じ名前の関数を作るとコンストラクタになる。

即時関数の中でコンストラクタを定義した場合、セーブデータをロードした時に自作オブジェクトのprototypeがundefinedになってしまい、メソッドが呼び出せなくなります。

サンプルコード(全文)