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

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

[2D] Playerの接近を感知して弾を発射する の続きにになります。

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

砲台に、弾を発ばす為の目印となる、子オブジェクトを付けます。
オレンジが弾の飛ぶ目標で、赤は弾の発射位置(生成地点)です。
(生成地点は、砲台からの相対位置でもいいのですが、わかりやすく作ってみます)

図は2Dスプライト画像ですが、位置を取得するだけなので、空オブジェクトでもよいです。


そして、「spr 弾目標」を代入するため、GemaObject型のグローバル変数を用意します。

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

つづいて肝心の弾を、2Dスプライトで作成。画像はこのようなものを割当てました。


この弾に状態遷移を付け、はじめのステートに [ DO Tween Transform Local Path ]
のアクションを置きます。
Path は1 、Element に先程作ったグローバル変数を選択。
Path Mode はTopDown。
Duration は目標到達までの時間です。適当に設定しておいて、実際に発射して
みた後で調節するといいでしょう。

Finish Event で 次のステートへ遷移するように設定します。


次のステートで、自身を消滅させます。[ Destoroy Self ] アクション。


そして、準備のできた弾をプレハブとしてフォルダに収めます。


砲台の、状態遷移のノードに、ステートを追加します。
開始時に「弾目標代入」ステートで、[ Set Game Object ] アクションを使い、
先に作成した、グローバル変数に、シーン上のオブジェクト「Spr 弾目標」をセット。


更に、Playerを感知して回転した後に、「弾発射」ステートを追加し、アクション
[ Create Object ] で、弾を生成します。
Game Object にプレハブ化した「Spr砲台の弾」を選択かドロップ。
Spown Point(生成位置)に、「Spr 発射位置」を選択かドロップ。


シーン再生してみて、このように機能すれば成功です。
弾発射位置のスプライトは、Sprite Render のチェックを外せば割当画像を非表示にできます。
(シーン上のオブジェクトは、はじめから非アクティブでも代入や、位置取得はできるよう)


しかし、何かこれでは弾の発射間隔が均等すぎて、面白みがないような…
そこで、回転した後の弾発射に移るまでの間隔を 数値固定の[ Wait ]アクションから、
[ Random Wait ]を使ったランダムにしてみました。

設定範囲内の数値がランダムに設定されます。

おまけに、自機からの弾発射を付けてみて、このように。
それっぽい雰囲気はでてるかな。


今回はここまでです。それでは。

0 件のコメント:

コメントを投稿