チュートリアル: スクリプトコース#3 剣攻撃を作ってみよう。

このコースでは、ACTION GAME MAKERでの基本的なスクリプト作成方法を学んでいきます。
第三回では、剣での攻撃を作っていきます。

コース開始の事前準備

第一回、第二回で使用したプロジェクトを引き続き利用します。
それではプロジェクトを開いて準備してください。

STEP1: 剣を追加しよう。

  1. Object_Sampleplayerを開いてください。
  2. 現在銃を持っているため、一度非表示にしましょう。W005 Gunの:eye:をクリックして非表示にしましょう。
  3. 代わりに剣をもたせます。ファイルシステムを見てください。銃と同じく、templates>objects>weapons>P_otherにいくつか剣があります。
  4. B_Weaponの子として好きな剣を配置しましょう。ここではW_001_sword.pngを使います。
  5. 角度がおかしいのでプロパティを直します。x:17 y:-16 回転(Rotation):48あたりが良いでしょう。
  6. AnimationPlayerで動きを確認します。033_Swingを再生してみましょう。違和感があればW001Swordのプロパティで微調整しましょう。
  7. 剣に攻撃判定をつけます、このオブジェクトにはすでにAttackAreaが設定されていますが、足元にありますのでこれを移動しましょう。AttackArea2DをB_Weaponの子にしてしまいましょう
  8. AttackArea2Dの位置を調整します。剣に合うように位置を動かします。x:13 y:-11 回転(Rotation):-42あたりが良いでしょう。
  9. AttackCollisionのサイズと位置を調整します。PositionとRotationがずれてしまっているのでリセットして0にしましょう。また、攻撃範囲が少々狭くみえるのでコリジョンの形状を少しいじって長くしておきましょう。この時コリジョンの形状に応じてx座標は自動で調整されます。
  10. もう一度Swingアニメを再生してみましょう。剣と共に攻撃範囲が移動するはずです。

解説

Spriteキャラクターでの攻撃範囲
スプライトシートを使ったキャラクターの場合は、攻撃範囲をアニメーションに応じて位置・サイズを変化させるように設定すると良いでしょう。
CollisionShape2Dのシェイププロパティを展開すると、シェイプのサイズを変更する入力画面が表示されますので、そちらをキーフレームとして挿入することでアニメーションの中でコリジョンのサイズを変更できます。

STEP2: 剣攻撃のヴィジュアルスクリプト

  1. ヴィジュアルスクリプトを開きます。
  2. 新しいステート、Swordを作成し、アニメーションにはSwingを設定しましょう。

    3.Swordには攻撃を設定アクションを追加し、攻撃が敵グループにのみ当たるように設定します。
  3. IdleからSwordにリンクをつなぎ、条件はY(キーボードではV)が押された時と設定します。
  4. IdleからSwordのリンクを選択したまま、Ctrl+Cキーを押すか、右クリックメニューでコピーしましょう。
  5. Moveを選択して、Ctrl+Vキーを押すか、右クリックメニューでリンクをペーストを選び、Swordにつなぎましょう。これで移動中にも剣攻撃ができるようになります。
  6. 最後にSwordからIdleのショートカットにリンクをつなぎます。遷移条件はアニメーションが終了したとしましょう。
  7. これで近接攻撃ができました。動作をチェックしてみましょう。うまく設定していればコントローラーのYキーかキーボードのVキーで剣攻撃ができ、ゾンビを斬り伏せることができるはずですが、いくつかの問題があることに気づくはずです。
  • ずっと剣を持ったままで射撃の時も銃が出ない。: 剣と銃の切り替えを作る必要があります。
  • 攻撃しなくても剣にあたればゾンビがダメージを受ける。: 剣の攻撃判定がずっと出ているからです。

次のSTEPではこれらの問題を直していきましょう。

STEP3: ヴィジュアルスクリプトを改善しよう。

  1. Idleステートを選択して、アクションを3つ追加します。1つ目はプロパティを変更(ChangeObjectProperty)です。自身のノードのプロパティ、W005GunのVisibleをオフにする、と設定しましょう。
  2. 2つ目もプロパティを変更(ChangeObjectProperty)です。自身のノードのプロパティ、W001SwordのVisibleをオフにする、と設定しましょう。
  3. 3つ目も・・・プロパティを変更(ChangeObjectProperty)です。自身のノードのプロパティ、AttackCollisionのDisabledをオンにする、と設定しましょう。
  4. テストプレイをしてみてください、剣と銃が消え、ゾンビに体当たりをしてもゾンビはダメージを受けないはずですが、今度は消えたままなので次は表示を有効にしていきます。
  5. Swordステートで先程の逆をしていきます。2つのアクションを追加します。プロパティを変更(ChangeObjectProperty)で、自身のノードのプロパティ、W001SwordのVisibleをオンにする、と設定しましょう。
  6. プロパティを変更(ChangeObjectProperty)で、自身のノードのプロパティ、AttackCollisionのDisabledをオフにする、と設定しましょう。
  7. テストプレイをしてみましょう。うまく設定できていれば、剣攻撃の間だけ剣が見えるようになっているはずです。
  8. 次は銃です。Shootのステートに1つだけ、同じくプロパティを変更(ChangeObjectProperty)で、自身のノードのプロパティ、W005GunのVisibleをオンにする、と設定しましょう。
  9. テストプレイをしてみましょう、銃を撃つ時だけ銃が見えるようになりました。

TIPS

アニメーションを使ったプロパティの切り替え
本コースでは、プロパティ変更アクションを使って各スプライトの表示/非表示を切り替えましたが、こちらの動作はAnimationでも行うことができます。
プロパティをキーフレームとして設定することができるためですが、アニメーションがその地点まで再生されないと切り替えが行われない=途中でアニメーションを切り替えてしまったりすると表示/非表示の切り替えがうまくいかなくなる可能性があることにご注意ください。
実際に026_Crouch等の一部のアニメーションではアニメーションを使って表情ポリゴンの切り替えを行っています。
なお、AnimationPlayerの使い方はグラフィックコースをご確認ください。

第四回はこちら