[2D] Playerの接近を感知して弾を発射する

記事作成 2020年10月05日
PlayMaker 1.9.0 p20 / Unity 2019.3.3f1

このようなイメージです。
Playerが操作する機体の接近を感知して、砲台が回転し弾を射出します。

エディタ画面では、こんな感じ。
砲台の周りの円は、「コライダ(Collider)」で、トリガとして作用しています。
機体が円の中にいるのを感知すると、砲台の回転と弾の射出の
アクションに繋げます。

-----------------------------------

オブジェクトの設定をして、実際のノードを組んでいきます。


砲台は、「2Dスプライト」で画像は下のもの(表示のため200%化)を割り当てています。
2Dスプライトの「正面」は(大体)右になります。
アクションの対象として、「指定した方向を向かせる」必要がある場合は
注意が必要です。


インスペクター上は、Circle Collider 2D を付け is Trigger にチェック。
Radius(半径)は適当に。

-----------------------------------

トリガに接触する2Dスプライト、自機(Player機)も設定します。(表示のため200%化)

インスペクタでは、Rigidbody 、Collider を付けます。

再生時、WASD 、方向キー、パッドで動かすためには、
[2D] 十字キーでの8方向移動  の方法が使えます。アクション3つだけで
8方向に動きます。
上記の記事と違うところは、Rigidbody の「Gravity Scale」を 0 にしていない( 0.1 )
「 Tag 」 に「 Player 」を設定している、という所です。

面倒なら、シーン再生時に自機をエディタ上で動かして下さい。

-----------------------------------

砲台の方に戻ります。砲台に、状態遷移を付けます。


ノードとアクションをこのようにしてみました。
はじめのステートで、[ Trigger2D Event ] アクションを2つ並べます。
一方は、Trigger のタイプを 「 Enter 」もう一つは、「 Stay 」に選択します。
感知する対象は、Tag 「 Player 」を持ったオブジェクトである、と選択します。

「 Enter 」 は感知範囲内に入ってきたことを、「 Stay 」 は範囲内にいることを
感知。共に、感知するとイベント、「 Yes 」を発信し、次の状態に遷移します。
(イベント「 Yes 」は作成しておきます。作らずに「FINISHED」でも構いません)

次では、[ Smooth Look At 2d ] アクションで、砲台自身を自機の方へ回転させます。
Speed は適当に。そして[ Wait ] で設定した時間が経つと、再び、Player が感知範囲
にいるか、確認に戻ります。
この間が長いと、自機が感知範囲外に出ても回転して自機を追い続けること
にもなります。

(ターゲットにシーン上の「Spr 自機」を直接設定していますが砲台をプレハブに
する場合等は変数にして適宜代入します)


シーンを再生してこのように動作すれば、1段階完了。


次で弾を発射しよう。

0 件のコメント:

コメントを投稿