【Bakinでアクションゲーム開発】プレイヤーの剣による攻撃を実装してみる

Bakin

Bakinでのゲーム制作

最近ゲーム作成にチャレンジしてみようと思い、Bakinでアクションゲームを作り始めました。

一応、多少動くものは作ったので動画を取ってみました。未だ最低限のアクション部分しか作りこんでいないのですが、こんな感じのアクションゲームにしようと思っています。
今後作成にあたり、自分でもなぜ各アクションをこんな風に実装したのか忘れないようにかつ、今後他の人も同じようにゲーム作りの参考になればと思い、記事を作成していくことにしました。

ちなみにゲーム開発をし始めた経緯やBakinって何?って人はこちらの記事を閲覧ください。
また、前回の記事でゲームの初期設定とプレイヤーの作成は完了しているので、そちらが未だの人は先にそちらを確認して、初期状態のゲームを作成して下さい。

プレイヤーが剣で攻撃するアクションの実装

アクションゲームの基本となってくる部分として、プレイヤー(主人公)の各アクション動作が挙げられます。

具体的には、歩く、走る、ジャンプする、剣を振っての近距離攻撃、弓等での遠距離攻撃、魔法を使う、他にもゲーム固有の各アクションがあると思います。

基本的な歩く、走る、ジャンプするといった動作についてはBakinが初めからサポートしているので、特に意識する必要はありません。

ですが、剣を振る等のアクションについては開発者の方で個別実装していく必要があります。

今回はアクションゲームの基本動作となってくる、剣を振るアクションの実装方法を解説していきます。

ちなみにあくまで私の実装方法であって、他に実装する方法はいくつもありますし、今後のアップデートで実装方法を変える必要が出てくるかもしれません。

そのため、丸暗記するのではなく、実装するときの考え方を主に見ていってもらうのが良いかと思います。

近接攻撃アクションのキャスト作成

先ずは「近接攻撃アクション」として使うための「キャスト」を作成します。

「キャスト」というのはゲームの世界に出てくる「登場人物」のことです。現実でも演劇の役者さん等のことを「キャスト」と呼んだりするのと同じですね。

なぜ攻撃アクションを作るのに「キャスト」が必要なのか?と疑問に思う人が多いと思いますが、ぶっちゃけBakinの仕様だからとしか言えません。

Bakinではアクションゲームにおける攻撃を実現するためには、基本的に「透明のキャストを当たり判定として使う」必要があります。

つまり、プレイヤーが剣を振るモーションをした際に、透明のキャストを飛ばし、その透明のキャストが敵にぶつかったことをもって、敵にダメージが入るという流れで作りこみます。

もっと楽な実装方法があれば良いのですが、調べた感じだとこれ以外の方法は出来なさそうなので、一旦はこのような作りこみが必要であると覚えておいてください(今後のアップデートで楽になれば良いですが)。

そのため、「キャスト」の作成をするためにBakinの左側に表示されているメニューから「データベース」を選択して下さい。
「データベース」では次のようにゲームの世界に登場するモノについて設定が出来ます。

例えば、ゲーム世界に登場する人物である「キャスト」、各効果をもたらす「アイテム」、戦闘等で使用できる「スキル」といったものなどは全て「データベース」で定義します。

今回は「キャスト」でプレイヤーの攻撃アクション等を作っていくため、新規フォルダとして「プレイヤーアクション」を作成しました。

今後作ったアクションはこの中に入れていきます。次に「キャスト」の上部分に「+追加」というボタンがありますので、こちらを押してください。
そうすると次のように「キャスト」に設定する画像を選択する画面が出てきますが、特に何も指定せずに「なし」の状態のまま「追加して終了」を押します。
そうすると「キャスト」に新規キャストが追加されますので、名前を「近接攻撃アクション」に変更します。

その後は「近接攻撃アクション」の各設定を調整していきます。先ずは右側の「基本」タブの「種別指定」「味方」にしておきましょう。
次に「その他」のタブを開いて、「ダメージを受けない」「浮いている状態で発生」「他の生成されたイベントと接触しない」の3つを念のためチェックを入れておきます(入れてなくても動く)。

また、「イベントの消滅条件」は必ず設定する必要があります。これが無いとイベントがいつまでも残り続けるからです(イベント処理内で消すことも出来ますが・・・)。

基本的に「イベントの消滅条件」については「経過時間」「0.5」くらいの短い間隔で消えるように設定しておけばそれで問題ありません。

あとは現時点では「敵と衝突」でもイベント消滅するようにしておく方が良いです。

本当は「近接攻撃アクション」から個別に剣での攻撃や槍での攻撃等のキャストを更に追加発生させる方が汎用性が高いのですが、今回はこのキャストを攻撃に使いますので。
これで一旦キャストの設定関連は終わりです。

次はこのキャストの「キャストイベント」を作りこんでいきます。

作成したキャストのキャストイベントを作成

剣を振るアクションを実現するためには「近接攻撃アクション」の中で剣を振るモーションの設定や、斬撃を飛ばす等の設定を入れる必要があります。

そういった様々な設定は「キャストイベント」と呼ばれる中で設定するものであり、キャスト画面の「名前」の下にある「キャストイベント設定」から設定を行えます。
「キャストイベント」では「シートリスト」「シートを実行する条件」「シート実行時に変化する要素」「シート実行時に起動するコマンドスクリプト」を設定できます。

「シートリスト」「シートを実行する条件」の2つは複数のイベントを条件で切り替える際に使うもので、良くある例だと宝箱を最初に開けたときのイベントと、宝箱を2回目以降に調べたときのイベントで使い分けたりできます。

宝箱を最初に開けたときは当然アイテムを手に入れられますが、2回目以降はアイテムが手に入ってしまうと不味いので、シート条件で切り替える必要が出てくるのです。

「シート実行時に変化する要素」はキャストの「衝突設定」「移動設定」「グラフィック設定」等が出来ます。

今回は「衝突設定」を変更して「プレイヤーとぶつかる」のチェックは外しておきます。

最後にキャストイベントのメイン部分となる「シート実行時に起動するコマンドスクリプト」ですが、これは複雑なので使いながら覚えるほかありません。

とりあえず今回の「キャストイベント」としては次の画像のような内容で設定する必要があります。
「シート実行時に起動するコマンドスクリプト」「+」ボタンを押すことで次のような画面が開きます。

どの種別にどの設定が有るか最初は分からないと思いますが、基本的にはイベント関連の操作を行い時は「イベント」の種別を見る等のやり方で必要なスクリプトは大体は見つかると思います。

流石に全部解説するのは大変なので、先ほどの一覧の内容に該当するスクリプトは各自で探してください。
次に先に表示した一覧の流れについての解説をしていきます。

先ず、「イベントの開始」については今回は「自動的に開始(1回だけ実行)」にしておきます。

このイベントはゲーム定義の発射ボタンから動かす予定なので、これで問題ないのですが、他のトリガーの場合は並列的に動かす方が良いことが多いです。

それ以降のスクリプトについては、プレイヤーの操作禁止→プレイヤーが剣を振る→効果音が鳴る→斬撃を飛ばす→プレイヤーの操作禁止解除という流れで作りこんでいます。

本来は即座に剣を振るモーションを設定したいところですが、先にプレイヤーの操作を禁止しておかないと、剣を振っている最中に勝手に動いてしまうためです。

次に「キャストのモーションを変更」で「勇者A」「attack_A_01」の剣を振るモーションを設定します。

これはBakinに最初から入っているモーションなので使わせてもらいましょう。
その次に「効果音の再生」で剣を振った時の音を鳴らします。

これもBakinに最初から入っている「SE_hit_Sword_01」を設定しておきます。
そのあとに「0.1秒の間ウェイト」を入れているのは、これを入れないと剣を振った瞬間に相手にダメージが入って違和感があったためです。

必ずしも必要ではないですが、今後他の武器のモーション等も違和感が出ないようなウェイトは毎回個別で調整する必要があります。

こういう僅かな違和感等がプレイしている時には結構大きなストレスになってしまうため、極力違和感が出ないような作りにしておきましょう。

そのあとにイベントを1マス歩かせているのは、該当のキャストを当たり判定そのものとして使うため、この1マス分が斬撃が飛んでいる範囲となります。

これも武器の画像と違和感が出ない範囲で収める必要があります。極端に長くても短くてもプレイヤーは違和感を持ってしまうものですので。

剣を振る攻撃が全て終わったら、プレイヤーの操作禁止を解除して、通常の歩きモーションに変更したうえで終了します。モーション変更は不要な気がしましたが念のため入れています。

これが剣を振る攻撃の一連のキャストイベントの流れです。これで完成と言いたいところですが、最後にこのキャストイベントを呼び出すトリガーを設定する必要があります。

ゲーム定義の発射ボタンにキャストを割り当て

作成した「キャストイベント」を呼び出すためにはBakinのマスターメニューにある「ゲーム定義」を選択します。
開いた画面の「ルールと操作」を選択し、2列目を下にスクロールすると「イベントの発射(動的生成)」が有るので、これの発射ボタン1の割り当てに作成したキャストを設定します。
これでゲーム中に発射ボタン1を押下すれば、「近接攻撃アクション」のキャストが呼び出されるようになりました。

そして「近接攻撃アクション」が呼び出された後はキャストイベントの処理が呼び出されるため、先ほど作成したキャストイベントが実行されることになる訳です。

実際にゲーム上で動かしてみる

それでは実際に作成した剣を振る処理が正常に動くか確認しましょう。

「テストプレイ」を実行して、「発射ボタン1(デフォルトなら「Z」キー)」を押してみてください。

問題なければプレイヤーが剣を振るようになったと思います。
ただ、実際の当たり判定も想定通りになっているかどうか、このままの表示だと分からないと思います。

そこで、テストプレイ中の画面の上部にある「オプション」から「コリジョン表示」を選択し、「プレイヤーとイベント」にチェックを入れてみて下さい。
そうすると実際の当たり判定がどうなっているか、赤い線で表示されるようになります。

この赤い線で構成された四角形が「近接攻撃アクション」のため、この赤い線に触れた相手にダメージを与えることになります。

こうして見れば想定通りに実装できていることが分かると思います。この「コリジョン表示」機能は今後様々なシーンで利用しますので、必ず覚えておいてください。

ゲームが上手く動かないことがあれば、大体はこのコリジョンに問題があることが非常に多いのです。

まとめ

今回はBakinでアクションゲームとして剣を振る動きの部分について解説しました。

この時点では未だ敵キャラも存在しませんし、ダメージ処理等も作りこんでいないので、本当にただ剣を振れるだけとなっています。

次回以降の記事で敵キャラの実装とダメージ処理についても解説するので興味があれば閲覧ください。

【Bakinでアクションゲーム開発】ゲーム環境の新規作成とプレイヤーの初期設定 – センコの活動記録 (senkohome.com)

コメント

タイトルとURLをコピーしました