Unityに関連する記事です

 敵の移動経路用の PathTranSet ゲームオブジェクトを複数作成し、それらをランダムに指定して
敵キャラの生成地点と移動経路を自動的に分岐する機能を実装します。

 今回の実装で重要な部分としては、システムとして敵の生成機能と移動経路の自動的な読み込みを実現することで、
必要なデータを用意すれば、あとはすべてプログラムが自動的に判別してくれる仕組みを考えて実装を行います。


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


 以下の内容で実装を進めていきます。

手順15 ー異なる生成地点での敵キャラの自動生成処理の実装ー
26.複数の PathTranSet ゲームオブジェクトを作成する
27.EnemyGenerator スクリプトを修正し、複数の PathTranSet の情報をゲーム内に運用できるようにする



 新しい学習内容は、以下の通りです。

 ・Random.Range メソッドと配列を利用した実装の組み合わせ例



26.複数の PathTranSet ゲームオブジェクトを作成する

1.設計


 敵キャラ用の移動経路を複数作成することができれば、敵の生成位置だけではなく、その地点からゴール地点までを異なるルートとして用意することが出来ます。

 そのため、敵キャラの生成と絡めてロジックを考えることにより、現在までに準備している機能と組わせて新しい処理の実装を行います。

 まずは現在の機能の振り返りをします。

 敵キャラの経路情報として PathTranSet ゲームオブジェクトがあり、そのゲームオブジェクトには PathData スクリプトがアタッチされていています。
PathData スクリプトには generateTran 変数に敵キャラの生成地点を登録し、pathTranArray 配列変数をに経路の情報を順番に登録できる設計になっています。


PathTranSet ゲームオブジェクト インスペクター画像



 PathTranSet ゲームオブジェクトはプレファブになっていますので、こちらを活用して、同じ構造のゲームオブジェクトを複数作成し、
完成したゲームオブジェクトを再度プレファブにするよう設計にします。

 この情報を利用する処理はすでにスクリプト内に組み込まれていますので、PathTranSet ゲームオブジェクト自体を複数用意すれば
あとはスクリプトが自動的に処理を行ってくれます。このとき、同じ構造であることが重要です。

 敵キャラの生成地点は generateTran 変数を利用していますので、必ず生成地点としては、この情報を登録する必要があります。
そうしておくことにより、変数の値(生成地点の情報)が異なるため、同じ処理を実行しても生成される地点が自動的に変更になる仕組みです。

 変数をうまく利用した処理になりますので、仕組みとロジックをしっかりと理解しておいてから進めるようにしてください。


2.異なる情報を持つ PathTranSet ゲームオブジェクトを作成する


 Prefabs フォルダ内にある PathTranSet ゲームオブジェクトをヒエラルキーにドラッグアンドドロップして設置してください。
PathTranSet ゲームオブジェクトを選択して右クリックをしてメニューを開き、Prefab => Unpack Completely を選択します。
こうすると、このゲームオブジェクトはプレファブではなくなり、通常のゲームオブジェクトに戻ります。

 この状態にしてから、自由に子オブジェクトである PathTran ゲームオブジェクトの位置を変更してください。
設定方法は以前と同じです。そのため、同じ構造になるように作る必要がありますので、注意点が2つあります。

 GenerateTran 変数に登録されている StartPos ゲームオブジェクトが敵の生成地点になりますので、PathTranArray の最初の要素には
必ず StartTran ゲームオブジェクトを設定します。

 ゴール地点は変更しないでください。

 あとは PathTran ゲームオブジェクトは曲がるタイミングで自由に配置してください。
以下は参考例です。なお、道中の PathTran ゲームオブジェクトの数も任意です。


Sceneビュー画像



インスペクター画像






Sceneビュー画像



インスペクター画像




3.PathTranSet ゲームオブジェクトをプレファブにする


 完成した各 PathTranSet ゲームオブジェクトを Prefabs フォルダへドラッグアンドドロップしてプレファブにします。
同じ名前のゲームオブジェクトは自動的に採番されます。名前を変更してもよいですし、自動採番でも構いません。

 プレファブにしたら、ヒエラルキーにある各 PathTranSet ゲームオブジェクトを削除してください。


Prefabs フォルダ



 以上で完成です。


27.EnemyGenerator スクリプトを修正し、複数の PathTranSet の情報をゲーム内に運用できるようにする

1.設計


 複数の PathTranSet ゲームオブジェクトが完成しましたので、こちらをゲーム内で利用するための方法を考えていきます。

 同じ種類の型は、配列を利用することで1つの変数内に複数の同じ種類の型の情報を管理できます。
現在 EnemyGenerator スクリプトでは PathData 型の情報を宣言して利用していますが、こちらを配列に変更して、
複数の PathTranSet ゲームオブジェクトをこの変数内に登録できるように変更しましょう。

 配列の要素番号(インスペクターでは Element で表される番号)を指定することで、その番号の PathData スクリプトの情報を活用することが出来るようになります。

 固定値でもよいですが、折角ですので配列と相性のよい Random.Range メソッドを活用して、
敵が生成された時に、配列内でランダムな PathData を選択できるようにしてみてください。


2.EnemyGenerator スクリプトを修正する


 PathData 型の変数を配列に変更します。変数名も複数形にしておきましょう。
修正の際にはそういった細部にも目を配るようにしておいてください。
第3者の方がみてもすぐに把握できるようなソースコードを記述することが理想です。

 ランダムの処理は敵の生成処理の前、ラインの生成処理の前に記述すればよいでしょう。
具体的には、敵の生成位置の情報や、Vector3 型の paths 配列変数に利用する PathData がランダムな情報になるようにすればランダム化できます。

 ロジックを考えて実装に挑戦していきましょう。


EnemyGenerator.cs


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


3.EnemyGenerator ゲームオブジェクトの設定を行う


 配列化した pathDatas 変数の Size の値を変更し、Prefabs フォルダに作成済の PathTranSet ゲームオブジェクトを順番にドラッグアンドドロップしてアサインしてください。
Size の値は、PathTranSet ゲームオブジェクトの数と同じ数にしておいてください。Element 内に空いている部分があるとエラーになります。


インスペクター画像



 以上で設定は完了です。


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


 ランダム化した処理が上手く機能しているか、ラインの生成と敵の生成の両方を確認していきます。


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


 移動経路用のライン表示も自動的に移動経路に合わせて生成を行っていることがわかります。
上手くプログラムが機能すると、このように、変数の値を参照を変更するだけで全く異なる処理を実現してくれます。



 以上でこの手順は終了です。

 次は 手順16 −ロジックの学習,肇好リプタブル・オブジェクトの作成− です。

コメントをかく


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

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

Menu



技術/知識(実装例)

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

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

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

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

レースゲーム(抜粋)

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

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

3D脱出ゲーム(抜粋)

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

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

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

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

VideoPlayer イベント連動の実装例

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

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

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

private



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

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