ゲームの流れを管理する

記事作成 2019年6月
PlayMaker 1.9.0 / Unity 2018.2.6f1

「状態遷移」で全体の流れを管理して、ゲームに仕立てます。

前回の 弾に当たった敵を消す プロジェクトを利用して、
「ゲーム開始」で敵が現れ、すべてを撃ち倒したとき「ゲームクリア」になるような
ゲームにしてみます。

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


まず、ゲーム内で使用するオブジェクトを作成します。
UIとして、『タイトル』 『ゲーム開始ボタン』 『クリア時の表示テキスト』を作ります。

----------------------------------------------
Canvas の設定はお好みで。

『タイトル』はこんな感じ。実際の表示を見ながら自由に作ってください


『クリア時表示テキスト』


『ゲーム開始ボタン』

Event の設定はグローバルイベントを作成した後になります。
2020 / 09/14
* Play Maker U Gui Component Proxy を使うためには、エコシステムか
公式アドオンページで「 Package for uGUI Proxy With Full set of Actions 」
を入手し、インポートしてください。
参考 [UI] ボタンでイベントを送信する
----------------------------------------------
----------------------------------------------
敵の設定です。 弾に当たった敵を消す の敵をプレハブにしたものです。
(単にTag  [t 敵] が付いただけの Cube です。)
ゲーム開始時にシーン上に生成します。

----------------------------------------------
----------------------------------------------
空オブジェクトをつくり、「emp ゲーム管理」などと名前をつけ、状態遷移を設定します。
はじめの状態で、『タイトル』と『開始ボタン』を表示します 。 [Activate Game Object]

----------------------------------------------
図のようなイベントを作成し、チェックを入れてグローバルイベントとします。
これで、『ゲーム開始ボタン』の送信イベントに [ゲーム開始] を指定できるので、設定します。
(文字はコピペしないと上手く設定できないかもしれません)

----------------------------------------------
ボタンからの送信 [ゲーム開始] があると「タイトル、ボタン非表示」の状態で
『タイトル』『ボタン』を非アクティブ(非表示)に。


次の状態で、用意した敵オブジェを生成します。
出現場所は適当に位置で指定しています。

----------------------------------------------
流れとしては飛びますが、[ゲームクリア] のイベント送信を受けると「「ゲームクリア」表示」
の状態で、『クリア時のテキスト』を表示し、その状態で Time 5 待ちます。



次の状態で、『クリア時のテキスト』を非表示にして、最初の「タイトル、ボタン表示」に戻ります。

----------------------------------------------
----------------------------------------------
「emp 敵撃破数管理」 などと名前をつけた空オブジェクトに、倒した敵の数をチェックし、
ゲームクリアを判定する状態遷移を設定します。

「「int 倒した敵の数」リセット」 では、[ゲーム開始] のイベント送信を受け、
撃破数をリセットします。 [Set int Value]

作成した変数です。

----------------------------------------------
「状態」に他の状態遷移内で作った、グローバルイベントを付けるには、図のように
カスタムイベント内から選択します。

----------------------------------------------
また、流れは飛びますが、実際に敵を倒したときには、
[敵倒した] のイベント送信を受け取ります。 [敵倒した] のイベントはここで作ってください。


[敵倒した] からの状態で、変数 [int 倒した敵の数] に1を+します。[Int Add]

---------------------------------------------
次の状態で、クリア条件数を上回ったかをチェックします。[Int Compare]

----------------------------------------------
クリア数、2以上であればイベント「Yes」から遷移した状態で
[ゲームクリア] を、イベント送信します。[Send Evant By Name]

「No」 の場合の状態「なし」は空(ノーアクション)です。
----------------------------------------------
----------------------------------------------
さて、「emp 敵撃破数管理」に [敵倒した] を送信するのはどこなのか?
弾プレハブの子オブジェ「接触判定」です。
プレハブ上のオブジェを選択し、状態遷移を変更します。
(プレハブ状態のままで変更できます。)


新たに作成した状態 「「敵倒した」送信」に [敵倒した] を送信するアクションを付けます。
これで、弾が、敵に当たったときに 「emp 敵撃破数管理」に、[敵倒した]が届きます。
(アクションは、状態「敵を消す」の先頭に付け足すこともできます)

これで、無事ゲームとして動作するでしょうか。

ここまで見てきた方なら、あそこはこうやった方がいい、こうしてみたい…
とアイデアが浮かぶかもしれません。トライ・アンド・エラーでどんどん試して
みるといいです。

自分がゲームオーバーになる判定や、様々な効果、セーブやロード等々
落ち着いてやれば、組み上げることができるはずです。
----------------------------------------------
今回のプロジェクトをWebブラウザ用にビルドしてみました。
日本語表示の問題のため、フォントは変更してあります。
移動は方向キー。加速 Zキー、射撃 Xキーで操ってください。

https://sino.sakura.ne.jp/games/nagare_r/
別ウィンドウで開きます。



0 件のコメント:

コメントを投稿