Unityに関連する記事です

 この手順では製作してきた敵のゲームオブジェクトとコインのゲームオブジェクトをランダムに自動生成する処理を実装します。


<実装動画 
https://gyazo.com/4c17bc90d8d3fa624dbdc70b0fb5308a


<実装動画◆
https://gyazo.com/f13c8ee561efd2132feeff0827d6e5d8


手順17 −ゲームオブジェクトのランダム自動生成処理の実装−
29.敵とコインのゲームオブジェクトをプレファブにする
30.スクリプトを作成し、一定時間おきにランダムな位置にランダムで選択されたゲームオブジェクトを自動生成する処理を追加する



 新しく学習する内容は以下になります。

・配列の使用例



29.敵とコインのゲームオブジェクトをプレファブにする

設計


 手順12で空中床を自動生成する処理を実装したように、今回も、敵とコインのゲームオブジェクトを事前にプレファブにしておいて
その情報を利用して、プレファブのクローンを自動生成するようにします。


Eagle ゲームオブジェクトと Coin ゲームオブジェクトをプレファブにする


 ヒエラルキー上にあるEagle ゲームオブジェクトと Coin ゲームオブジェクトをプレファブにします。

 最初に、それぞれのゲームオブジェクトの Transform コンポーネントを確認して、Position の値を (0, 0, 0) にします。
このとき、Reset は使用しないでください。何故ならば、Scale で設定している大きさもリセットされてしまうからです。


 位置情報の修正が済んだら、順番に Prefabs フォルダへドラッグアンドドロップしてプレファブにします。
ヒエラルキー上のそれぞれのゲームオブジェクトのアイコンと文字が青い色に変わればプレファブになっています。


<手順動画 ゲームオブジェクトをプレファブにする>
https://gyazo.com/cd6acdc707719a8334374b195e80c224


ヒエラルキー画像



 プレファブになったらヒエラルキー上にある Eagle ゲームオブジェクトと Coin ゲームオブジェクトは不要ですので、Delete してください。


<手順動画 プレファブにしたゲームオブジェクトを Delete する>
https://gyazo.com/4d3c870c13b188fcb32d6a45b43034ab


 プレファブ後の参考画像を掲載しておきます。


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



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



30.スクリプトを作成し、一定時間おきにランダムな位置にランダムで選択されたゲームオブジェクトを自動生成する処理を追加する

設計


 プレファブにした敵とコインを生成するために、新しくスクリプトを作成します。基本的には以前作成した FloorGenerator スクリプトをベースにしています。

 プレファブの指定についてですが、今後、敵の種類などが増えたときにも対応できるように、プレファブを設定(アサイン)する情報を配列変数にして用意しておきます。
配列にしておくことにより、敵の種類が増えても、その分だけ配列の要素を追加していくことで、ランダムに生成される処理にも自動的に反映できるような設計をしていきます。
クローンのゲームオブジェクトが生成される位置については、FloorGenerator スクリプトと同じ処理を実装していますので、ランダムな位置に生成されます。

 また生成されるまでの待機時間についても、最小値と最大値を設定できるようにし、この範囲内でランダムに設定された待機時間を待って、自動生成を行うようにします。
こうすることで、毎回、同じ待機時間ごとに生成されてしまうことを防ぎます。

 どのようにしてランダムに自動生成を行うかですが、配列の持つ要素の番号を利用します。
配列を作成すると、その配列の要素には、0 から順番に番号が与えられます。インスペクターで Element 0 で始まる、この部分です。
この配列内の要素の通し番号をインデックス(Index)と呼びます。

 このインデックスの最小値と最大値を条件に、ランダムな値を1つ取得します。そして、取得した値のインデックスの番号の配列の要素を生成する対象として設定します。
指定する場合には、配列変数の名前の後ろに、[indexの番号]を書くことで指定します。
この方法により、配列の長さが増減してもランダムな値を取る幅をスクリプトが自動で判断をしてくれるように設計しています。



RandomObjectGenerator スクリプトを作成する


 宣言フィールドでは、3つの変数を宣言します。

 GameObject型の objPrefabs 配列変数には、後程インスペクターより、ゲーム内に自動生成したいプレファブを登録します。
配列ですので、生成したいプレファブの種類が増えても登録する数を自由に変更できます。また、この値を反映してプログラムのロジックを設計しているので
プレファブの登録数が増減した場合には、それに合わせて、ランダムに生成する内容を自動的に反映するようにしています。
そのような設計にしておけば、インスペクターの設定を変更するだけで、プログラム自体は何も変更せずにすむため非常に便利です。

 Transform 型の generateTran 変数には、プレファブの生成地点と回転情報を設定します。FloorGenerator スクリプトと同じように
ヒエラルキーにある GenerateTran ゲームオブジェクトの持つ Transform コンポーネントの情報を利用することで、常に画面の右端から生成します。

 Vector2 型の waitTimeRange 変数には、2つの値を設定できます。Vector2 型は X と Y の情報を float 型で設定することができますが
必ず位置情報に使用をしなければならない、という制限はありません。
今回はこの2つの値を持つことを利用して、X には生成までの最小の待機時間の値を、Y には最大の待機時間の値を設定出来るようにします。
そしてこの範囲内で待機する時間を毎回ランダムに設定します。そのため今回の Vector2 型は、待機時間の幅の設定値として利用をしています。


RandomObjectGenerator.cs

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



GameManager ゲームオブジェクトに RandomObjectGenerator スクリプトをアタッチして設定を行う


 GameManager ゲームオブジェクトに、作成した RandomObjectGenerator スクリプトをドラッグアンドドロップしてアタッチします。


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



 GameManager ゲームオブジェクトを選択してインスペクターを確認します。
RandomObjectGenerator スクリプト内にアサイン情報が3つ表示されますので、順番に設定します。


 objPrefabs 変数は配列です。そのため最初に配列の長さを設定する必要があります。
 変数名の左にある矢印アイコンを押すと Size が表示されます。 0 になっています。
Instantiateメソッドでランダムに生成したいゲームオブジェクトのプレファブを設定したいので、Size 2 に変更します。


<手順動画 配列の長さを設定する>
https://gyazo.com/7a3f74f378888aa35b6d8d877660c591

 
Element 0、Element 1 の情報が Size の下に追加され、これでアサインが可能な状態になりましたので
Prefabs フォルダにある Eagle ゲームオブジェクトと Coin ゲームオブジェクトを順番に、ドラッグアンドドロップしてアサインします。


<手順動画 プレファブと GenerateTran のアサイン>
https://gyazo.com/54d6e3cb1d5fe08cb41497dfd7e46999


 generateTran 変数には、Instantiateメソッドでクローンするゲームオブジェクトを生成する位置の設定します。
ヒエラルキーにある GenerateTran ゲームオブジェクトをドラッグアンドドロップしてアサインしてください。
Transform コンポーネントが情報として代入されます。


 waitTimeRange 変数は Vector2 型ですので、x と y の2つのアサイン情報が表示されます。
この値には、ゲームオブジェクトを生成するまでの待機時間の最小値と最大値を設定します。x = 最小値、y = 最大値として利用しましょう。

 まずは最初はデバッグを行う必要がありますので、x = 1、 y = 3 秒程度の短い時間に設定しておいて、自動生成が行われるかを確認してから調整します。
デバッグ終了後の規定値としては x = 3、 y = 7 秒位を考えていますので、その間位で設定をして、調整を行ってみてください。


GameManager ゲームオブジェクト 設定後のインスペクター画像



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


 設定が終了したら、ゲームを実行して動作を検証します。
objPrefabs 変数に登録しているプレファブのゲームオブジェクトがランダム生成されるようになれば成功です。
(デバッグ用に生成までの待機時間を短くしていますので、たくさん生成されるはずです) 





<確認動画 プレファブからランダムなゲームオブジェクトを自動生成する>
https://gyazo.com/7ed2f9663508b45829249062f1c3a52c


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

 次は 手順18 −スコア表示の作成− です。

コメントをかく


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

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

Menu



プログラムの基礎学習

コード練習

技術/知識(実装例)

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

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

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

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

レースゲーム(抜粋)

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

3D脱出ゲーム(抜粋)

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

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

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

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

3Dトップビューアクション(白猫風)

VideoPlayer イベント連動の実装例

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

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

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

private



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

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