アイストマトバズーカのゲーム制作日記

いろいろ超初心者がゲーム制作に挑戦。現在RPGツクールMZでフリーゲーム制作中。フリー素材も作って置いてます。

歩行⇔ダッシュのグラフィック変更をスクリプトと通常コマンドでなんとかする(;´Д`)【RPGツクールMZ】

こんにちは。

 

RPGツクールMZでフリーゲームを制作中。メインキャラクターのキャラチップをおおかた作り終えたのでようやくですがシステム面にとりかかることになりました。

 

まずは移動できるようにしなければ(・∀・)

 

RPGツクールMZではキャラクターの歩行グラフィックを選択するだけで移動するときに歩行アニメーションが再生されるようになっています。

(データベース→アクター→歩行キャラ から選択)

 

そしてSHIFTキーを押しながらの高速移動(=ダッシュ)ではその歩行アニメーションが早く再生されます。

 

今回このダッシュ時にグラフィックを変える、ということをやりました。

 

グラフィックは過去記事でもお見せしたやつで、既に出来上がっています。

 

ダッシュ時にグラフィックを変えることはプラグインを導入することで簡単に実装できます。現在、探すと見つかるプラグインはこれ↓

制作者:しおいぬ 様

 

RPGツクールMV用のものですがMZでも動作します。

 

正直言ってコレを導入するだけで終わることだと思っていました…(-_-;)

 

しかしこのプラグインは私が使おうと思っている他のプラグインと競合してしまって同時には動作しなかったのです。

 

ちなみに使いたいプラグインはコレ↓

制作者:うなぎおおとろ 様

 

このプラグインはどうしても使いたいと思ってるんですよねー(´Д`)

 

競合をなんとかする知識や技術は私にはないのでグラフィック変更のプラグインをなんとかするしかありませんね。

 

調べたら競合しないプラグインもあるみたいですが(参考webページ)↓

たしかに同時に動作しました。が、このプラグインはイベントを使って画像変更をしてしまうとその後正しい挙動を得られないことが判明。

(私の使い方の問題である可能性もあります)

 

銃を構える動作とか使う予定なのでこれも利用はできなさそう。

 

 

まぁスクリプトと通常コマンドでなんとかなるか...と思ってやってみたのでその方法を紹介します。

 

スクリプトにはダッシュをしているかどうかを判定できるものがありまして、

 

$gamePlayer.isDashing()

 

これで判定できます。そうなるとまず思いつくイベントの形がこんな感じかと思います↓

移動ルートの設定というやつで画像変更をしていてこの例だとChara001(1)というのがダッシュ時の画像でChara001(0)が通常の歩行グラフィックです。

 

しかしこのままではいくつかの問題があります。

①常に画像変更が実行されるため動作が重くなる。

②常に画像変更が実行されるため他のグラフィックに変えられない。

③立ち止まっていてもshiftキーを押すだけでダッシュ判定になる(Chara001(1)の真ん中の画像になる)。

 

まず①と②を解決するためには歩行⇔ダッシュの”切り替わり”を捉えてその瞬間のみ処理を行わせる必要がありますね。

 

こういう処理はたしかARPGのトライアルの時にやった気がします。

私が思いつく方法はこんな感じです↓

ダッシュ時にONとするスイッチを1つ作ります。OFFの時にダッシュしたら画像を変えてスイッチをON、スイッチがONのときにダッシュを止めたら画像を戻してスイッチOFF。

 

こうすると切り替えの瞬間のみの処理になるので①は解決。②は他の画像を使う時にこれが動作しないようにしなければなりません。

 

これもスイッチを使って他の画像変更のときONとするスイッチを作っておき、条件に加えます。

 

!$gameSwitches.value(〇) 

 

これは「〇番のスイッチがOFF」の場合にTRUEとなるスクリプト。これを&&で繋いで条件に加えます。ちなみに ! を外すと「ON」でTRUEを返すようになります。

銃を構えるときに2番のスイッチがONになるようにしているのでダッシュ判定の分岐条件はこうなります。これで②が解決。

 

③がちょっと問題でした。$gamePlayer.isDashing()のスクリプトがSHIFTキー押しただけでTRUEになるのは想定外。移動してないときは歩行のグラフィックで止まって欲しいんですよね。

 

下記のスクリプトのどちらかを条件に加えたら解決できると思ったのですが↓

 

・プレイヤーが動いている

$gamePlayer.isMoving()

 

・プレイヤーが止まっている

$gamePlayer.isStopping()

 

この両方は正しく判定されませんでした(反応がない)。どうやらプラグインの影響のようですので画像変更のプラグインが動かないのはこのへんが関係ありそうですね。

 

多少強引ですが下のスクリプトを条件に付け足すことに(-_-;)

 

(Input.isPressed('up') || Input.isPressed('down') || Input.isPressed('left') || Input.isPressed('right'))

 

「方向キーのいずれかが押されている」という条件になります。タッチ操作によるダッシュ移動には無効ですがこれを追加。タッチ操作でも画像を変更するなら③は諦めるか他の方法を探らねばなりません(;´Д`)

まぁタッチ操作の場合はそもそも歩行⇔ダッシュの切り替えが無いから拘る必要はないか。


テストプレー↓

GIF画像では粗くてわかりにくいですがちゃんとうまく行っています。

 

 

正直こんな初っ端から苦戦すると思っていませんでした…記事だとすんなりやってるように見えるかも知れませんがプラグイン探しをかなり粘ったので疲れました(;´Д`)

 

もっといい方法があったら変えるかも知れません(-_-;)

 

あとキャラチップですが実は修正する予定だったりします(時間かかりそう)。

 

 

らくがき。

らくがきに使う時間の割合が膨れ上がってきているので抑制しようと思ってます。ブログ立ち上げ当初は1つで10~20分くらいのらくがきにしようとしてたのにいつの間にかゲーム制作の何倍も時間使っちゃってます。おいー(;´Д`)

 

 

 

ランキング参加中です。下のバナーをクリックして頂けるとやる気値が増幅します!!

f:id:icedtomatobazooka:20201229184218j:plainにほんブログ村 ゲームブログ ゲーム制作へ