Unityに関連する記事です

 前回実装した、同一シーン内において異なる設定を行ってシーン内容を切り替える機能を拡張します。

 今回は、探索パートと侵入パートにおいて障害物の内容と配置場所をスクリプタブル・オブジェクトにて設定し、各パートがスタートしたら、同じシーン内で異なる設定を行うようにしています。
また侵入パートの場合にはゴール地点を生成する機能も追加します。


<実装動画>
動画ファイルへのリンク




設計


 各パートの情報を登録するためのクラスについては前回の手順でスクリプタブル・オブジェクトとして作成してあります。
こちらに機能を追加し、各パート内で配置したい障害物(敵など)の情報と位置を登録できるようにし、その情報を利用して設定を行うようにします。

 そのため、障害物のデータをまとめたスクリプタブル・オブジェクトを新しく作成し、どの障害物を配置するかは、このデータベースから取得出来るようにします。
データの取得には DataBaseManager スクリプトに取得用のメソッドを追加し、障害物の番号で検索をして必要なデータを取得出来るようにします。

 障害物の生成位置やゴール地点については、事前にシーン内に空のゲームオブジェクトを作成しておいてプレファブにして活用します。
プレファブになっていることで、スクリプタブル・オブジェクトに登録することが出来るようになります。

 すべての準備が出来たら、GameSceneManager クラスを修正して、各パートの設定を行うメソッド内に、障害物の生成とゴール地点の生成機能を追加します。


PartData スクリプトを修正する


 EnterObstacleData クラスを新しく入れ子クラスとして作成し、各パートでの障害物の生成情報を登録出来るようにします。
生成したい障害物の数だけ List の Size を登録し、障害物の番号と生成位置を設定することで、この情報を GameStateManager 内で生成する際に活用します。


PartData.cs

<= クリックすると開きます


 スクリプトを修正したらセーブします。


ObstacleDataSO スクリプトを作成する


 ObstacleData クラスを内包(入れ子クラス)にした ObstacleDataSO スクリプトを作成します。
このスクリプトはスクリプタブル・オブジェクトとして作成しますので、MonoBehaviour ではなく、ScriptableObject を継承します。

 このスクリプタブル・オブジェクトは障害物のデータベースとして利用します。
今回はデータの内容は別途設定せず、プレファブに設定されている情報をそのまま利用しています。


ObstacleDataSO.cs

<= クリックすると開きます


 スクリプトを作成したらセーブします。


シーン内に障害物の配置地点用のゲームオブジェクトとゴール地点用のゲームオブジェクトを配置してプレファブにする


 探索パート用と侵入パート用に分けて(同じでもいいです)、障害物の配置地点とするためのゲームオブジェクトを新しく作成して配置します。

 ヒエラルキーの空いている場所で右クリックをしてメニューを開き、Create Empty を選択します。
配置したら、名称を分かりやすいもの(ObstacleTran など)に変更してプレファブにしてください

 探索パートに3つの障害物、侵入パートに5つの障害物を配置する場合には、重複して利用するもの以外は、その数だけ配置用のゲームオブジェクトを作成します。


インスペクター画像(数・座標などはゲームにより変わりますので、これは参考例です)





 同じようにして、ゴール地点用のゲームオブジェクトを新しく作成して配置します。
新しく Goal タグを作成して設定してください。その後、こちらもプレファブにしてください


インスペクター画像(座標などはゲームにより変わりますので、これは参考例です)



 プレファブ後はヒエラルキーから削除してください。


ObstacleDataSO スクリプタブル・オブジェクトを作成する


 Datas フォルダ内で右クリックをしてメニューを開き、Create => Create ObstacleDataSO を選択します。
新しいスクリプタブル・オブジェクトが作成されますので、名前はそのままで問題ありません。

 インスペクターを確認し、ObstacleDataSO 変数の Size を 0 から 1 以上に変更します。
これが障害物のデータの総数になります。現在プレファブになっている障害物のゲームオブジェクトの数に合わせてください。


インスペクター画像




StageDataSO スクリプタブル・オブジェクトの設定を追加する


 PartDatasList 内に新しい List である EnterObstacleDataList 変数が追加されています。
この部分が、各パートにおいて生成したい障害物の情報を登録する場所になります。

 EnterObstacleDataList 変数の Size の値を生成したい障害物の数分に変更し、各 Element に障害物の番号と生成位置のプレファブをアサインして設定ください。

 またゴール地点についてもプレファブになっていますので、侵入パートの方だけでよいので、こちらにもゴール地点のプレファブをアサインしてください。



 参考データを掲載しておきます。デバッグしやすいように調整してありますので、この通りに作成する必要はありません。

インスペクター画像



 以上で作成完了です。


DataBaseManager スクリプトを修正する


 障害物のデータベースである ObstacleDataSO スクリプタブル・オブジェクトをゲーム内で利用できるようにします。
また、障害物の番号を指定することで障害物のプレファブのデータを取得できるメソッドも合わせて用意しておきます。


DataBaseManager.cs

<= クリックすると開きます


 スクリプトを修正したらセーブします。


DataBaseManager ゲームオブジェクトの設定を行う


 新しくスクリプタブル・オブジェクト用の変数を追加しましたので、
Datas フォルダ内にある ObstacleDataSO スクリプタブル・オブジェクトをドラッグアンドドロップしてアサインします。


インスペクター画像



 以上で設定は完了です。


GameSceneManager スクリプトを修正する


 新しく変数の宣言を3つ追加します。
内容は、生成した障害物の情報を管理するための List、生成されたゴール地点の情報を管理するための変数、ゴール地点のプレファブの情報を登録するための変数になります。

 前回作成した SetUpScene メソッドに処理の追加と TODO 部分の実装を行い、各パートごとの障害物の生成と侵入パート時にはゴール地点の生成を行います。
パートが変わる際には、前のパートの障害物の情報は不要になりますので、パートが切り替わるタイミングで障害物が残っている場合には削除して、重複しないようにしています。
 
 この部分は、管理方法を検討し、パートの切り替え時に障害物の削除は行わずに前と同じままで利用することも可能です。


GameSceneManager.cs

<= クリックすると開きます


 スクリプトを修正したらセーブします。


ゲームを実行して動作を確認する


 想定している挙動になるか、ゲームを実行して確認を行います。
デバッグ用に、探索パートのゲーム時間を短くしておくといいでしょう。


<実装動画>
動画ファイルへのリンク



 以上でこの手順は完成です。

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Menu



技術/知識(実装例)

2Dおはじきゲーム(発展編)

2D強制横スクロールアクション(発展編)

3Dダイビングアクション(発展編)

2Dタップシューティング(拡張編)

レースゲーム(抜粋)

2D放置ゲーム(発展編)

3Dレールガンシューティング(応用編)

3D脱出ゲーム(抜粋)

2Dリアルタイムストラテジー

2Dトップビューアドベンチャー(宴アセット使用)

3Dタップアクション(NavMeshAgent 使用)

2Dトップビューアクション(カエルの為に〜、ボコスカウォーズ風)

VideoPlayer イベント連動の実装例

VideoPlayer リスト内からムービー再生の実装例(発展)

AR 画像付きオブジェクト生成の実装例

AR リスト内から生成の実装例(発展)

private



このサイト内の作品はユニティちゃんライセンス条項の元に提供されています。

管理人/副管理人のみ編集できます