愛だけでゲームを作るよ!

アクツクMVでゲームを作ってます。_(:3 」∠)_

【アクツクMV】愛だけでMobの作成に着手するよ!その3【自作ゲーム】

はは…いやいや…ウソだよね…?
ウソだと言ってくれ…。たのむぅぅぅぅ。ぬわぁぁぁぁぁん。

ある3月の昼下がり、ととすけはある通知を受けて膝から崩れ落ちる。


4月にまた異動だってさ!!!


やっと北海道に慣れてきたのに!
まだ気になってるお店のご飯食べてないのに!!

そして六花亭ジンギスカンスープカレー、お寿司、サッポロクラシック…。

わたしの新しいお気に入り達ともお別れが… くそぅ… くそぅ…。
でもどんな場所へ行こうとも、ゲーム制作は止めないぞ!絶対に!!


おはこんにちわ、ととすけです。_(:3 」∠)_
さて、さっそく最近の状況です!


今どんな感じなのさ?


今回も久しぶりな感じのブログタイトルですが、今回は敵Mobについてです。
ゼロのZセイバーによる通常攻撃、特殊攻撃は概ね完成しました。

残るはEX技…と、このまま進めたいところですが…。
ふと「敵Mobに対して有効な攻撃になり得るのか」という疑問が過ってしまい、ちょっと使用感が気になってきました。

そこで何体か敵Mobを作ってみて、攻撃の感触を確認してみることにしました。
もちろん、敵Mobの行動パターンは可能な限りオリジナルに近づけてみたいと思います。


ということで、今回は敵Mob回(?)です。
アクションプログラムの考え方をメインに進めていきますので、アニメーションやオブジェクトの詳細な設定値については触れまていせん。ご了承くださいませ。

今回チョイスしたのは下記の3体。
左からスパイキー、バットンボーン、ディグレイバーです。




まずはスパイキーから作ってみました。
ゲームで動きを観察すると、下記のような仕様のようです。
<スパイキー>
・直進することしか出来ず、壁に衝突すると少し跳ねて方向転換する。
 この時、最初の進行方向はプレイヤーの位置に向かっていく。
・残りHPが1になると横転し、自滅する。その際に当たり判定は残っている。
・どのような状態でもHPが0になれば即爆発する。

上記の内容から、下記のようなアクションプログラムが出来ました。



最初に向きの判定を行い、壁に衝突するまで直進。
残りHPが1になると横転し、自滅…といった流れです。

最初の向き判定では下記のように、変数を用いて自身のX座標とプレイヤーのX座標を比較して判断しています。


画像は敵Mobを左向きにしたい場合のリンクに指定した条件です。


ロックマンXでは「プレイヤーに向かって最初は進行する」という敵Mobが殆どですので、この方法は結構使いそうですね。

爆発時の爆発エフェクトは、その他の実行アクションの「弾を発射」で出力しています。


続いてバットンボーンです。
ゲームで動きを観察すると、下記のような仕様のようです。
<バットンボーン>
・出現時は天井にぶら下がっており、プレイヤーが近づくまで動かない。
・一定距離まで近づくと、ゆっくりと移動してくる。
 この時、移動は重力の影響を受けず、壁も貫通している。
・プレイヤーに接触すると真上に移動し、天井にぶら下がる。
・初期スポーンの位置から一定距離まで移動すると、上昇し画面外に消える。
・どのような状態でもHPが0になれば即爆発する。

上記の内容から、下記のようなアクションプログラムが出来ました。




プレイヤーが一定距離まで近づいたら、待機状態からプレイヤーに向けて移動。
プレイヤーに触れると上昇。天井に張り付いたら待機状態に戻る。
初期スポーンの座標から一定距離まで移動すると離脱…といった流れです。

初期スポーンの登録を1度だけ行いたいため、スイッチで座標取得の有無を管理しています。
その後、プレイヤーをロックオンする処理がありますが、プレイヤー1人しかいないゲームであれば不要のような気がします。


プレイヤーに向けての移動は、その他の実行アクション「テンプレート移動の設定」を使いました。
自身に壁の接触判定があっても、それを無視して移動できる設定がありますので、バットンボーンにはピッタリの設定ですね。


画像は「移動」アクション内の「テンプレート移動の設定」


一定距離まで移動した場合に画面外へ離脱する仕組みについては、先ほど取得した初期スポーンの座標と現在の座標を比較して、規定値に達したら離脱アクションに遷移するようになっています。


最後にディグレイバーです。
ゲームで動きを観察すると、下記のような仕様のようです。
<ディグレイバー>
・待機状態から3秒後に、放物線を描くようにピッケルを投げる。
 この時、プレイヤーの頭上位置へ正確に投げる。
ピッケルがプレイヤーにヒットすると笑う。
・どのような状態でもHPが0になれば即爆発する。
 この時、破片がいくつか飛び散る。

最後のオレンジ色の部分は、わたしが追加した仕様です。
上記の内容から、下記のようなアクションプログラムが出来ました。




向きの変更はスパイキーでも使用した、自身のX座標とプレイヤーのX座標とを比較する方法で行っています。
ただ、この処理だけでは向きが変わるたびに3秒待機しなくてはならず、向き変更を繰り返せばピッケルの投擲処理に進むことができません。

そこで、その他の実行アクションにある「タイマー機能」を使用することにしました。


画像は「タイマー開始」アクション内の「タイマー機能」


カウントダウンを行い、規定時間を過ぎると投擲処理を行うというものです。
投擲処理が終わったら、再度タイマーをセットしなおして待機状態に移行します。


ピッケルの投擲は、その他の実行アクションの「弾を発射」で出力しています。
発射されたピッケルの挙動はピッケル側のプログラムで決まるのですが、常に移動するプレイヤーの場所へ正確に放物線を描いて投げさせる必要があります。

実行アクション内を探してみたのですが、アクツクMVにはそのようなお手軽機能が存在しないようなので、自作するしかないようです。

投擲処理が行われた際に、プレイヤーの位置によってピッケルの移動速度を変えれば良いわけですから、下記のような計算をその他の実行アクションで①~⑤の順番に処理します。
① 計算用 =  自身のX座標
② 計算用 -= プレイヤーのX座標
③ 計算用 /= 画面解像度:Xの半分の数値
④ 計算用 *= 自身の左右の移動量
⑤ 左右の移動量 = 計算用

※予め変数を用意しておきます。今回は「計算用」を使用。
※③の画面解像度はプロジェクト設定で確認できます。
※上記は左向き用の計算式です。
 右向きの場合は①と②の処理が以下のように変わります。
 ① 計算用 =  プレイヤーのX座標
 ② 計算用 -= 自身のX座標

ピッケル側のアクションプログラムはこのような感じです。
左向き計算、右向き計算のアクションでそれぞれ計算させます。




実際にその他の実行アクションで計算させる場合は、下記のように上から「スイッチ・変数を変更」の処理を順に設定します。




ピッケルの消滅処理までのアクションを登録したら、テストプレイで画像のように敵Mobが表示されるギリギリの位置に立ち、ピッケルが届くか確認します。




ピッケルがプレイヤーの手前で落ちたり、頭上を飛び越えてしまうようであれば、ピッケル側のオブジェクト「移動とジャンプ」の設定からジャンプの初速左右の移動量重力の影響の数値を増減させます。

ピッケルが高く飛んでいるのであれば、基本的に左右の移動量を変えるだけで大丈夫だと思います。
落下速度が速い場合は、落下の最大移動量の数値を下げると良いかもです。

プレイヤーの頭上にヒットする設定を見つければ、あとは先ほどの計算式によりプレイヤーとの距離に応じてピッケルの移動速度が変わり、プレイヤーの頭上に落ちてくるようになるはずです。


それでも上手くいかない場合は、ごめんなさいです…。
わたしの紹介した方法はかなり力技で、ゲームの開発環境(プロジェクト設定等)によってはまったく使えないと思います。

「プレイヤーとの距離に応じて移動速度を変える」という考え方は、方法としてアリだと思うのですが…。わたしにはこれが限界です!許して!!_(:3 」∠)_


あとピッケルがプレイヤーにヒットした際、ディグレイバー側を笑わせる必要があります。
ヒットした際には、その他の実行アクション「オブジェクトのアクションを実行」よりディグレイバーの「笑う」を指定して実行するよう命令しています。


画像は「ヒット」アクション内の「オブジェクトのアクションを実行」


では最後に、ディグレイバーを倒した際に破片を飛ばす処理についてです。
これも爆発エフェクトと同様に、その他の実行アクションの「弾を発射」で出力しています。

破片側のアクションプログラムはこのような感じです。




最初に乱数設定とありますが、これは破片の飛び方を毎回ランダムにする為にです。
破片側のオブジェクト「移動とジャンプ」の設定値を乱数で再設定し、毎回吹き飛ぶ高さや移動速度が変わるようにしました。


画像は「乱数設定」アクション内の「スイッチ・変数を変更」


いい感じに破片がバラけて、撃破すると気持ちいいゾ!_(:3 」∠)_
これでゼロの攻撃を当てるのが楽しくなりそうです。


以上が敵Mobのアクションプログラムの考え方になります。
実際に動いている様子は、次回の進捗動画でお見せできると思います。

ディグレイバーのピッケルがゼロの頭上を常に狙ってくる様子も、是非見ほしい!
動画編集中ですので、早ければ今月中に上げられるかも…?


ああ、でも引っ越しの準備があるんでした…。
ぐぬぬ…。動画の編集を急がねば…!



最後に


座標を取得する変数がとにかく便利で、使いこなせれば面白いギミックがたくさん作れそうです。
ザコ敵でアクションプログラムの修業を積んで、ボスもしっかり再現しますよ!

敵Mobを実装して、ゼロの技の使用感を確認してみましたが…。
まだ粗削りな印象ですが、良い感じです。

敵Mobがひと段落したら、ステージの作成に取り掛かりたいと思います。
本当はすぐにでもボスを作りたいのですが、ステージの作成でカメラやイベント関連を勉強したいので、その後になりそうです。


引っ越し準備等でどうなるか分かりませんが、進捗動画、頑張って作ります!


とまぁ、今回はこの辺で。
ではでは、また次回のブログでお会いしませう!しーゆー_(:3 」∠)_