複数のキャラクターを切り替えながら進むRPGを作りたい方へ向けて、マップごとに操作キャラクターを自動的に切り替えるプラグインを作成しました。
1. 概要説明
RPGツクールMVでは、複数のキャラクターを切り替えて操作する機能を実現するために、通常は「パーティリーダーの変更」イベントを各マップに配置する必要があります。しかし、この方法には以下のような問題があります:
- マップごとにイベントを配置する手間がかかる
- キャラクター不一致などのバグが発生する可能性がある
- 設定内容の確認や管理が煩雑
このプラグインでは、マップのメモ欄に簡単な記述をするだけで、自動的に操作キャラクターを切り替えることができます。
2. プラグインのインストール
- プラグインファイルを
js/plugins
フォルダに配置 - プラグイン管理画面で
UM_MapActorSetting
を有効化
3. 基本設定
プラグインパラメータの設定
プラグインパラメータで、アクターIDとキャラクター名を紐づけます:
- プラグイン管理画面で
UM_MapActorSetting
のパラメータを開く ActorSettings
の+
ボタンを押して新しい設定を追加- 以下の項目を設定:
- Character ID: マップメモで使用する識別子(例:hero)
- Actor: データベースに登録されているアクターを選択
マップメモの設定
切り替えたいマップのメモ欄に以下のタグを記述:
<Player:識別子>
4. 具体的な使用例
例えば、「勇者と姫」が登場するRPGで以下のような設定ができます:
1. プラグインパラメータの設定:
キャラクターA
- Character ID: hero
- Actor: 1(勇者)
キャラクターB
- Character ID: princess
- Actor: 2(姫)
2. マップメモの設定:
マップ1: <Player:hero>
マップ2: <Player:princess>
これにより:
- マップ1では自動的に勇者が操作キャラクターになる
- マップ2では自動的に姫が操作キャラクターになる
5. 注意点
- マップ遷移時に自動的にキャラクターが切り替わります
- セーブ&ロード時も正しく切り替わります
- メモタグの記述を間違えると切り替えが機能しないので、識別子は正確に入力してください
- 新しいアクターを追加した場合は、プラグインパラメータの設定も忘れずに行ってください
6. プラグインコード
下記プラグインはご自由に利用・改変等してください。
//=============================================================================
// UM_MapActorSetting
//=============================================================================
/*:
* @plugindesc マップのメモタグに基づいて、自動的にプレイヤーキャラクターを切り替えます。
* @author UHIMA
*
* @param MapActorSettings
* @text アクター設定
* @type struct<ActorConfig>[]
* @desc 各アクターの設定
*
* @help
* ============================================================================
* ■ 概要
* ============================================================================
* このプラグインは、マップのメモタグに基づいて自動的にプレイヤーキャラクターを
* 切り替えることを可能にします。
*
* ============================================================================
* ■ 使用方法
* ============================================================================
* プレイヤーキャラクターを切り替えたいマップには、以下のメモタグを追加してください:
*
* <Player:characterId>
*
* プラグインパラメータで「データベース」のアクターIDとキャラクター名を紐づけることができます。
* これにより<Player:harold>のような簡易的な記述でアクターを切り替えることができます。
* 新規キャラクターを追加した場合やアクターIDを変更した場合は、このプラグインの紐づけも対応させてください。
*
* 例:
* <Player:harold>
*/
/*~struct~ActorConfig:
* @param Character ID
* @text キャラクターID
* @type string
* @desc マップメモタグで使用する識別子(例:harold)
*
* @param Actor
* @text アクター
* @type actor
* @desc 切り替えるアクター
*/
(function () {
var parameters = PluginManager.parameters("UM_MapActorSetting");
var MapActorSettings = JSON.parse(parameters["MapActorSettings"] || "[]").map(
(setting) => JSON.parse(setting)
);
var _Game_Player_performTransfer = Game_Player.prototype.performTransfer;
Game_Player.prototype.performTransfer = function () {
_Game_Player_performTransfer.call(this);
switchActorByMap();
};
function switchActorByMap() {
if ($dataMap && $dataMap.meta.Player) {
var characterId = $dataMap.meta.Player;
var actorConfig = MapActorSettings.find(
(config) => config["Character ID"] === characterId
);
if (actorConfig) {
var newActorId = Number(actorConfig.Actor);
var currentLeader = $gameParty.leader();
var currentLeaderId = currentLeader ? currentLeader.actorId() : null;
if (currentLeaderId !== newActorId) {
if (currentLeaderId) {
$gameParty.removeActor(currentLeaderId);
}
$gameParty.addActor(newActorId);
$gamePlayer.refresh();
}
}
}
}
var _Scene_Map_start = Scene_Map.prototype.start;
Scene_Map.prototype.start = function () {
_Scene_Map_start.call(this);
switchActorByMap();
};
})();