キーボード及びゲームパッドのキー配置について

 はじめましての方ははじめまして。
水里鈴虫と申します。ツクマテのほうではにゃたま名義になってます。
 「ツクマテ にゃたま」で検索すれば驚くほどツクマテ投稿が表示される
と思うのでご存知の方は多いのではないかと思います。
 ツクマテのほうには3年間以上もお世話になっており色々と助けられています。
現時点でツクマテの投稿数では上位5位以内に入っているほどです(笑)

 今回Ci-enを開設することに至った訳は表向きにはツクールMVがリリースされ
私がこの3年の間に得た知識を書いて行こうと思ったことが理由ですが、
実はこれより深い理由でツクールMVをつかってゲーム制作されている
クリエイターの皆様へ伝えたいことがあるのです。

 それは今まで、様々なフリゲと言われるゲームを見てきましたがキーボード、及びゲームパッドへのキー配置の変更可能なゲームがほぼ皆無であるため、
操作性を改善してほしいといった思いからです。
 これはどういうことかというと、XBOX360ゲームパッドの場合、
ツクールMVではデフォルトで
Aボタン(つまりプレステの☓ボタンの位置に該当)で決定と
Bボタン(つまりプレステの○ボタンの位置に該当)でキャンセル
になっており、日本のコントローラーのボタン配置とは
異なっていることが日本人にとっては操作のしやすさに影響を与えている
といっても過言ではないかと思います。
 こと諸外国では☓で決定となり☓がキャンセルを表しているのは
日本くらいなのだそうです。これは文化の違いなのでしょうけども。
ですのでゲームパッドの決定とキャンセルが逆というだけで日本人にとって
操作がし辛いことになります。
 もっともそれくらい慣れてしまえばなんてことないって人もいるかもしれませんが、
私は日本人で日本人に向けて製作しているのでやはり日本のコントローラー仕様に
沿ったゲーム制作を心がけたいと思います。

 XBOX360ゲームパッドはAボタンが「十字キーでいう下」に該当します。
Bボタンなら「十字キーでいう右」に配置されています。
日本人にとってはAの位置がキャンセルというのが過去の流れからして常識になっています。言い換えればBの位置が決定ということになります。
 なのにツクールMVではデフォルトが上記で說明したように
Aで決定、Bでキャンセルとなるのが問題なのです。

キー配置変更プラグインMano_InputConfigのご紹介

 そこでキー配置が自由に変えられる便利プラグインのMano_InputConfigを
ご紹介します。
 これを一度導入してしまうと便利すぎてこれなくして快適操作のゲームは作れないと
思ってしまうほどです。
 現時点の最新版は以下のgithubにあります。
https://github.com/Sigureya/RPGmakerMV/blob/master/Mano_InputConfig.js
 尚、当記事は現時点2019/7/6最新版を基に記述します。

Mano_GamepadABswapについて

 Mano_GamepadABswap.jsは先程述べたAとB、○と☓が逆になる問題を解決する
ためのプラグインです。即ちこれを導入すればAとBをスワップ(入れ替え)してくれます。

プラグインのデザイン上の改変について

 先ず初期状態ではキーボード画面の下のボタンがアンバランスです。
これをプラグイン本体(Mano_InputConfig)を開いて下のコードを追加してみましょう。
できたらこれがデフォルトだと良いんですがね…

「// コマンドの並び順を変えたいときは、ここを編集してください」
の下のところを以下のような並び順に変えています。

pushKeyconfigCommand(Window_KeyConfig_MA.COMMAND_DEFAULT,  setting.commandWidth.DEFAULT);
pushKeyconfigCommand(Window_KeyConfig_MA.COMMAND_CHANGE_LAYOUT,  setting.commandWidth.LAYOUT);
pushKeyconfigCommand(KEYS.NULL,3);
pushKeyconfigCommand(Window_KeyConfig_MA.COMMAND_APPLY,  setting.commandWidth.APPLY);
pushKeyconfigCommand(Window_KeyConfig_MA.COMMAND_EXIT,  setting.commandWidth.EXIT);

 それから「drawItemText(keyName, symobolText, x, y, width) {」の下の行に
以下を追加するとキーボード画面の文字が小さくなり見やすくなります。
通常だと文字が大きすぎて逆に見にくいです。

this.resetFontSettings();//ADD
this.contents.fontSize -= 8;//ADD

 上記2点改変するだけで見やすくなりおすすめです。


ダッシュ専用ボタンになっている件

 いわゆるスーファミや初代プレステ時代のファ○ナルファ○タジー操作に
慣れてしまっているとキャンセルキーでダッシュ(走る)仕様に慣れてしまっている
ことと思います。
 余談ですが昔、ファミコンやスーファミ時代にBダッシュと呼ばれるほど
B=ダッシュという図式が成り立っていましたね。
 ツクールMVではデフォルトでダッシュキーは専用のキーに
配置されており、キーボードではShiftキー、コントローラーでは
Xキー(プレステでいう□ボタン)でキャンセルキーと兼用しておらず
無駄にボタンが増えます。
 これをFF同様に兼用できるプラグインがあります。
このプラグインを導入するだけでキャンセルボタンでダッシュができるように
なる為、キーを余分に使わずに済みますのでもし導入してない方は是非入れてみてください。

NYA_CancelInMenuDeleteAndDashAdd.js (738.00B)

ダウンロード

Mano_InputConfigの使い方

 初めてMano_InputConfigを見た時すごいパラメータいっぱいあって面倒くさそう…
と思ったりしませんでしたか?私が実はそうでした(^^;
 でもだいたい変更するところは決まっているのでいざ慣れてしまえばなんてことはないです。
 パラメータの例を下に示します。

textグループについて

 先ずは前回に引き続き見た目上の改良からですがtextグループ内は表示のされ方
に関わってくる部分で、それぞれ決定ボタンなどどのように画面に表示すれば
良いのかを決定します。
 これの設定は必須ではありませんが見た目が気になる人はやっておいて損はないはずです。

 内部的にはsymbolといういわゆるキーを区別するための名前があり、
symbolに対応する表記のされ方を設定する感じです。
 たとえばsymbol「ok」の時表示するキー名称は「決定」ですよといった感じです。
textOKならtextを外した「ok」の部分だけ見れば良いです。
 恐らくtextOKという表記なのはokのときのtext=表記方法という意味でtextがついてるんですね。
 あくまでsymbol「ok」の表記は「決定」と関連付けているだけでキーの配置とsymbolの関連はここではできません。キー配置は次の項目で說明します。

 textEmptyまでの項目は特殊なキーの為上のような感じに【】をつけて
わかりやすくしました。
 このtext項目の表記方法は人それぞれ好みが変わってくるのですが
ユーザー目線でわかりやすい表記を心がけると良いと思います。

キーマップを使ったキー配置の変え方

 そもそも「決定」キーの初期時のキー配置を違うキーに変えたいということなら
キーマップというスクリプトを別に追加する必要があります。
 私は以下のような追加のキーマップを定義しています。
以下のコードをプラグインファイル(keymap.js)として読み込みます。


(function () {
    //使用可能になるキー登録
    Input.keyMapper[16] = 'shift';   //shift
    Input.keyMapper[27] = 'cancel'; // escape
    Input.keyMapper[65] = 'menu';   //A
    Input.keyMapper[88] = 'cancel'; // X
    Input.keyMapper[90] = 'ok'; // Z
    //同様に使用したいキーを登録していく
})();


 これを定義することでデフォルトのキーマップに上書きする形になります。
[ ]内の数字がキーコードになってますがキーコードを調べるには
こちらのサイトがおすすめです。
 例えばキーコード90即ちZキーに登録してあった'ok'というsymbolをやめて
空欄にしたいのであれば

 Input.keyMapper[90] = undefined; // Z

のようにundefinedを代入します。
 このときundefinedはsymbolではないため' (シングルクォーテーション)で囲いませんので気をつけてください。
 symbolのみシングルクォーテーションで囲います。

 デフォルトのキーマップはrpg_core.jsにあります。以下のようになってます。

Input.keyMapper = {
    9: 'tab',       // tab
    13: 'ok',       // enter
    16: 'shift',    // shift
    17: 'control',  // control
    18: 'control',  // alt
    27: 'escape',   // escape
    32: 'ok',       // space
    33: 'pageup',   // pageup
    34: 'pagedown', // pagedown
    37: 'left',     // left arrow
    38: 'up',       // up arrow
    39: 'right',    // right arrow
    40: 'down',     // down arrow
    45: 'escape',   // insert
    81: 'pageup',   // Q
    87: 'pagedown', // W
    88: 'escape',   // X
    90: 'ok',       // Z
    96: 'escape',   // numpad 0
    98: 'down',     // numpad 2
    100: 'left',    // numpad 4
    102: 'right',   // numpad 6
    104: 'up',      // numpad 8
    120: 'debug'    // F9
};

 例えばZキーはキーコード90に該当する為、
Zキーを'ok'ではなく'cancel'に変えたいということなら

Input.keyMapper[90] = 'cancel'; // Z

のようにして上書きします。

 プラグインの中にはこのsymbolに機能を割り当ててくれるものが存在します。
例ではトリアコンタン様のMessageWindowHidden.jsというメッセージウィンドウを
隠すプラグインがあるのですがそのプラグインパラメータにtriggerButton(ボタン名称)
という項目があります。
 これはウィンドウを隠す機能を割り当てたいsymbolを設定する
とそのsymbolに対して機能が追加されます。
例えばツクールのデフォルトに無い新しいシンボル'hide'に機能を割り当てることもできます。もちろんその場合は、hideというシンボルがキー配置と関連付けされてない為、
先程のキーマップ定義に追加してやる必要があります。
 Hキーに追加なら

Input.keyMapper[72] = 'hide'; // H

といった具合です。
 こちらのプラグインは割り当てたいsymbolをユーザーが指定できるようになっていて
親切な設計になっています。

textSymbol6〜8について

 3つまでならsymbolとキー表記の関連を追加できます。
なので先程プラグインで'hide'という新しいsymbolを追加したなら'hide'は「ウィンドウを隠す」という表記ですよってことを追加できます。
 ただしあくまで3つまでなので4つ以上関連付けしたいということならMano_OneButtonCommonEventCall.jsプラグインで表記の関連を追加します。

symbolsについて

 これはそれぞれのキーに機能を割り当てる際、リストに表示される機能の羅列です。
このリストにあるものが設定できる機能全てになります。
 つまりいくらキーマップに定義してあってもここにそのsymbolが入ってないと
その機能を割り当てることができないってことです。

mandatorySymbolsについて

 簡単に言えば必須シンボルです。このリストにあるものが全て割り当てられてないと
確定しても無効になりますよってことです。

ボタン及びキーボードの初期設定について

 数字の羅列はゲームパッドのボタンの順番とボタンの設定が有効かどうかを表します。
例えば0を削除するとbutton0の設定ができなくなります。
 button?のbuttonNameではゲームパッドの画面での表記を設定します。
例の場合、button0がbuttonName「①A」となっているのはゲームパッドのキー配置は
使っているゲームパッドにより異なる為Aが必ずしもbutton0とは限らない為です。
なので補助的に①のようにボタン番号を併記してあります。
 action項目はゲームパッドのそれぞれのボタンに対する割当となります。
button0のactionにokとすればbutton0にデフォルトで「決定」キーを配置したことになります。
 因みにactionに割り当てずともキーマッププラグインからも追加は可能です。
[ ]内は要素なので0から始まります。即ち0がbutton0即ち「①A」に該当します。

Input.gamepadMapper[0] = 'ok';   // button0

これで上記と同様button0にデフォルトで「決定」キーを配置したことになります。

 InputConfigではこれだけが必須項目になるので他の項目に関しては
自分のゲームデザインに応じて変更すればよいかと思います。

Mano_OneButtonCommonEventCallについて

https://github.com/Sigureya/RPGmakerMV/blob/master/Mano_OneButtonCommonEventCall.js
 これはInputConfigと連携するプラグインでInputConfigより上に配置すると
InputConfigの設定を上書きして更にボタンを押した時にコモンイベントを
自動的に呼んでくれるという優れたプラグインです。
 例えばsymbolに'map'として「M」キーにマップを開く機能を割り当てたとします。
「M」キーを押した時にコモンイベント「マップを開く」が実行するように設定すれば
Mキーを押すとマップを開いてくれます。
 同時にキーボードのキーだけでなくゲームパッドのキーも設定でき、
シンボルへの機能の登録とシンボルの表記の設定を同時にこなすことができ
キーマップにすら追加する必要はありません。
 非常に強力なプラグインですので是非利用してみてください。

まとめ

ずいぶん長い話になってしまいましたがここまで呼んでくださった方ありがとうございます。最後までお読みいただいた方は「いいね」していただけると励みになりますので
よろしくおねがいします。尚、記事で誤りなどあれば連絡ください。
たまに思い込みで執筆してたりするのでその可能性は無きにしもあらずです。
執筆した内容に対し誤りがあってもその責任は負えません。ご了承くださいませ。

この記事が良かったらチップを贈って支援しましょう!

チップを贈るにはユーザー登録が必要です。チップについてはこちら

月別アーカイブ

限定特典から探す

記事を検索