敵当たり判定とコルーチンを用いた弓矢の生成&射出処理の作成

Unity タワーディフェンスゲームの作り方


Unity入門の森オリジナル本格ゲーム制作講座はこちら
7種類の本格ゲームの全ソースコード公開・画像&動画による解説付き

前回(第6回)では、ウェーブを作って、敵オブジェクトの出現パターンを制御する仕組みを用意しました。

前回の記事↓

敵の生成処理の作り方 ウェーブの作成とレベルデザインまで
前回(第5回)では、経路に沿って実際に敵オブジェクトが移動する仕組みなどを作りました。 前回の記事↓ 今回は敵オブジェクトの作成を制御する仕組みを作っていきます。 Waveの概念も入ってきてあなたのレベルデザインの見せ所になります...

見た目だけは大分ゲームらしくなってきましたが、まだ敵を倒すことが出来ません。 今回は敵の当たり判定(Collider2D)の作成、弓(Bow)と矢(Arrow)の作成をやっていきたいと思います。

通常、ゲームを作る場合はプレイヤー(遊ぶ人)の手触りの部分ー
例えばシューティングゲームなら自機の移動や弾を撃つところ -
などから作り始めることが多いのですが、タワーディフェンスは「守る」ゲームなので敵が来ないと始まらないため、このような順番になっています。

【Line登録者限定のプレゼントもあるよ!】

敵オブジェクトに当たり判定を付ける

敵オブジェクトを攻撃(探索)するためには、画像だけでは駄目で、当たり判定(Collider2D)レイヤーをセットする必要があります。

用意した敵オブジェクトのprefabが Assets/Prefabs の中にあると思います。

まず、このEnemy (1) に当たり判定(Collider2D)を追加したいです。

既に作ってあるプレハブに何かComponentを追加するには「プレハブ編集モード」に入る必要があります。

Enemy(1) をダブルクリックしてください。

すると、HierarchyビューとSceneビューが、このようにダブルクリックしたEnemy(1)のコンテンツだけになると思います。

これが「プレハブ編集モード」です。  

敵キャラの当たり判定(Collider2D)の追加

この状態で Enemy(1) を選択し、InspectorビューAddComponentをします。

この敵は四角いので、BoxCollider2D というものを追加します。

この薄い緑色の線が当たり判定です。
ですが見ての通り実際の画像に比べてあたり判定が大きくなってしまっているので調整しましょう。

InspectorのBox Collider 2DEdit Collider というボタンを押します(画像内赤枠)

するとSceneの方のCollider表示に緑の小さい■がつきます。

これをドラッグすることで、Sizeを変更することができます。画像に合わせて調整をしてください。

(※もしくは、Size の X に直接 0.6 と入れてもよいです。マウス操作が苦手な方はこちらの方法で)

敵キャラクターのレイヤーの指定

次に、レイヤーの指定をします。

Inspectorの上部に Layer という項目があります。何も設定していないので、「Default」になっているはずです。

このLayerをクリックしてドロップダウンからEnemyを選択します。

すると、以下のダイアログも表示されると思います。 これは、子要素を持つオブジェクトのレイヤーを設定しようとすると必ず出てきます。

子要素のLayerも一緒に変更するかどうか。
を尋ねられているので、Yes change children を選択します。

Layerの設定が終わりましたら、プレハブ編集モードから抜けます。

プレハブ編集モードから抜けるにはHierarchyビューの「<」またはSceneビューの「Scenes」をクリックします。

その他全てのEnemyオブジェクトに当たり判定とLayerの設定を行いましょう。

同じ要領で、Enemy(2)にもColliderを付け、LayerをEnemyに変更します。

最後に、Enemy にもColliderを付けたいのですが、Enemyは四角ではなく楕円なので、BoxCollider2D ではなくCapsuleCollider2Dを付けます

こちらもちょっと画像とColliderがあっていないので、Edit Colliderボタンを押して修正します。

(※もしくは、Size に直接 X 0.6、Y 0.97 と入れてもよいです) そして、忘れずにLayerをEnemyに変更しておいてください。

これで、攻撃をする準備が出来ました。

弓(Bow)の作成 コルーチンを用いて指定時間ごとに処理を行う

次に攻撃をするためのユニット、弓(Bow)を作りましょう。まず、弓の空オブジェクトを作っていきます。

Hierarchyビューに、新規オブジェクト(CTRL+SHIFT+N)を作成し、新規ScriptもAddComponentしておきます(いつもの流れですね)

  • 名前:Bow
  • スクリプト名:Bow

なお、Transform の Position は

  • X : -2
  • Y : -2
  • Z : 0

にしておいてください。 次に弓の画像として、Assets/Images/item_bowを使います。

このitem_bowHierarchyビューの先ほど作ったBowオブジェクトの子要素になるようにドラッグアンドドロップします。 この子要素として配置されたitem_bowは

  • Transform を Reset(PositionのX,Y,Zを0に)
  • Order in Layer を 10

にしておきます。

今から作成するのは弓なのですが、矢がないとちょっと分かりづらいですね。

というわけで、矢の画像も追加しましょう。

Assets/Images/item_arrowを使います。
このitem_arrowHierarchyビューの先ほど作ったBowオブジェクトの子要素になるようにドラッグアンドドロップします。

この子要素として配置されたitem_arrowは

  • Transform を Reset(PositionのX,Y,Zを0に)
  • Order in Layer を 11

にしておきます。

Hierarchy上はこのような階層になります。

では、Bowスクリプトの中身を書いていきます。 このBowに必要な要件としては

  • 一定間隔で周囲の敵を探す
  • 矢(Arrow)を撃つ

になります。
まだ、矢(Arrow)は作ってませんので、この「一定間隔で周囲の敵を探す」を実装していきます。

この「一定間隔」で処理を行いたい場合、Update関数で上手く時間を計測して処理をするように書くこともできますが、コルーチンという機能を使うと直感的に処理を書くことが出来ます。

Bowスクリプトを以下のように書き換えます。

続きを読む

このコンテンツはパスワードで保護されています。 コンテンツを読みたい方はUnity入門の森ショップ(https://unityforest.stores.jp/)で講座閲覧権を取得してね。

おさらいと次回予告

今回は当たり判定の設定と、弓矢の作成をしました。

ついに攻撃が出来ました。 次回はこの弓矢をプレイヤーが配置出来るようにしていきます。

次回の記事↓

プレイヤーの管理処理の作成 HPやゴールドの表示・弓矢のレベルアップ処理の作成
前回は弓(Bow)と矢(Arrow)を作成し、敵(Enemy)に攻撃できるようになりました。 前回の記事↓ 今回はプレイヤー(Player)を作成し、弓矢の配置やUI(HPなど)の表示をやっていきます。 プレイヤー(Player)...


Unity入門の森オリジナル本格ゲーム制作講座はこちら
7種類の本格ゲームの全ソースコード公開・画像&動画による解説付き

コメント

  1. 匿名 より:

    弓矢を作成した段階で実行を押すとUnity自体がフリーズしてしまい先に進めません。
    弓矢のオブジェクトを削除すると動くのでBowScriptに問題があるのだと思いますがエラーが出ないため解決策が分かりません。
    どうすればいいでしょうか?解決策などがあれば教えて頂けると幸いです。

    • ばこ@Unity入門の森 より:

      最後までちゃんとできるはずですし、できた読者さんがいるので過去の記事含めて作ってる途中でどこかミスしてるのかなと思います。
      この質問だとちょっと答えようがないです汗

  2. TK より:

    Physics2Dのところですが、弓の向きを固定し、円の範囲を変えて「自分より前の長方形の形」にする関数はありますか?
    イメージだとこんな感じです↓

    ➡:弓とその向き
    □:範囲

    □□□□
    ➡□□□
    □□□□

    お手数をおかけしますがよろしくお願いします。

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