Unityに関連する記事です

 この手順からは、製作したゲームを面白くするための要素の追加、および学習内容を発展させるための教材にです。

 プログラムがしっかりと読めるようになっていないと、ここからの発展編は難しい内容になります。
また、新しい技術がたくさん出てきますので、ロジックを読み解き、少しずつ理解をしていくようにしてください。



ー花輪の自動生成の制御処理の実装ー

 ・花輪の自動生成の制御処理を追加する

 この手順では、花輪のゲームオブジェクトをランダムな位置に生成にして、毎回異なるステージを自動的に作成する機能を実装します。
下記の画像のように、自動生成を行うためのスイッチを用意し、このスイッチがオンのときだけ、ゲームを実行するとステージを自動作成するようになります。

<設定>



<実装動画 ゲーム実行と同時に花輪がランダムな位置とサイズで設置される>
https://gyazo.com/c259862aeca622f3311e68fbd82e0b3a

<実装動画 各花輪のデータ。大きさや得点、移動設定が自動で設定されている>
https://gyazo.com/9e8921d70f6b6cbc926351c27247f714



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

 ・Range属性
 ・if文の条件式に戻り値を持つメソッドを利用する場合の実装例
 ・Startメソッドの戻り値をvoidからIEnumerator型にして使用する処理
 ・yield return StartCoroutine()処理による待機処理
 ・GameObject 型ではなくて自作クラスでプレファブをインスタンスする方法
 ・引数に条件式を利用する方法


1.設計


 この手順では、花輪のゲームオブジェクトをランダムな位置に生成にして、毎回異なるステージを自動的に作成する機能を実装します。

 強制的に自動生成するのではなくて、先ほどの画像のように、自動生成用の判定値を用意して、それをインスペクターに表示します。
こちらのスイッチがオンのときだけ、ゲームを実行するとステージを自動作成するようになります。



 花輪は、水面地点をスタート地点とし、キャラのいる地点までの間に、ランダムな数配置される仕組みを取ります。
生成される数や高さを固定値にしないため、キャラの位置に応じて、花輪が生成される位置も自動的に伸縮します

 1つ1つの花輪の高さはランダムで設定され、同じ高さには生成されないようにしています。(ここは後で自由に設計を考えてみてください。)

 生成された花輪のゲームオブジェクトは、まず、上下左右のどの位置に生成するかをランダムで設定します。
この生成範囲は、キャラの移動範囲の制限に利用した、LimitLeftBottom ゲームオブジェクトと LimitRightTop ゲームオブジェクトを利用します。
そうすることによって、キャラの移動範囲内でのみ、花輪の位置がランダムで設定されるようになるためです。



 その後、花輪が、移動する花輪なのか、あるいは移動しない花輪なのかも、ランダムで設定します。
これは割合を設定できるようにし、この割合に応じて、移動する、しないを判定します。100%のうち、何%という設定方法を使います。
そのため、0 に設定すればすべて固定の花輪になりますし、100 に設定すればすべて移動する花輪になります。


移動する花輪、大きさが変化する花輪の割合の設定



 生成された花輪が移動する花輪である場合、その移動する時間や距離をランダムにするか、あるいは固定値にするかを判定します。
これも100%の割合を設定して、ランダムになるのか、固定にするのかを設定出来るようにします。
固定値の場合には、いままでと同じように設定された値がそのまま利用されます。ランダムになった場合には
移動時間と距離の最小値と最大値を設定しておき、その範囲内でランダムな値を自動的に取得するようにします。


移動時間と距離を範囲内でランダムな値にする



 
 同じように、花輪の大きさも、割合を設定して、その割合で判定して、花輪の大きさをランダムな大きさに設定します。
数字で細かく設定することもできますが、今回は配列を用意し、ランダムな値を何種類か登録出来るようにしておきます。

 また花輪の大きさが大きくなるほど得点を小さく、大きさが小さくなるほど得点が高くなるようにも設定します。


花輪の大きさと得点の倍率を登録する



 この2つの配列は、Element の同じ要素番号同士が同期するように設定を行います。
この画像の例であれば、FlowerSizes の Element 0 の値を利用する場合には、PointRate の Element 0 の値を利用するようになります
つまり、花輪の大きさを 1.5 倍と大きくする代わりに、得点は 0.7 倍と、小さくなるようになっています。


 これらの処理を1つの花輪を生成するたびに、自動的に処理を行って花輪を並べていきます。

 では、この手順について、どのようにすれば実装ができるのか、ロジックを考えてみましょう。


2.処理の流れ


 花輪の生成処理ですが、花輪のゲームオブジェクトはプレファブになっていますので、こちらを使ってクローンをインスタンスします。
インスタンスの処理はゲームの進行管理を行っている GameManager スクリプトに制御を行わせます。

 花輪は水面からキャラのいる位置(高さ)を目標に並べていく必要がありますので、水面を花輪の生成地点のスタート地点として登録し、
花輪を1つ生成するごとに、この生成位置を少しずつ上昇させていきます。生成地点 + 3 の位置で花輪を生成したら、
次はさらに 現在の生成地点 + 3 の位置、というように生成する位置を少しずつ上に上に更新していきます

 そして、この生成地点がキャラの高さまで到達したら、花輪の生成を終了するようにループ処理を使って制御を行います

 このように回数での指定が難しい場合には for 文ではなく、while 文を利用してループ処理を行います
ただし、while 文による処理は処理を制御を間違えると無限ループが発生してしまい、Unity がフリーズします。気を付けましょう。


花輪を生成したら、位置をランダムに設定します。Y 軸の高さの情報はすでに生成地点がありますので、X 軸と Z 軸の情報があれば、ランダムな位置に設定できます。
こちらに、キャラの移動範囲を制限しているゲームオブジェクトの位置情報を参照することにより、キャラの移動できる範囲内で上下左右の位置にランダムに設置します
 
 ここまでを GameManager スクリプトによって制御させます。あとの処理は、花輪のゲームオブジェクトにアタッチされている FlowerCircle スクリプトに処理を追加して制御します。



 FlowerCircle スクリプトに、花輪の初期設定を行うメソッドを用意しておいて、それを GameManager スクリプトから呼び出すロジックにします。
メソッドを呼び出す際には、花輪が移動するのか・しないのか、大きさが変わるのか・通常の大きさなのか、という情報を乱数を利用して判定を行います。
 
 こうすることにより、FlowerCircle スクリプトに用意しておいたメソッドが移動可否、サイズ変更の可否の情報を受け取って利用することが出来ます

 移動する花輪の場合には、移動する時間と距離が固定値か、ランダムにするのかを、乱数を利用して判定を行い、設定します。

 大きさを変更する花輪の場合には、どの大きさにするのか、乱数を利用して、登録してある情報から変更するサイズを設定します。
合わせて、得点も変更するようにします。

 
 ここまでの処理が、花輪が1つ生成されて、ランダムに設定が行われるまでの一連の処理の流れになります。
これを、花輪の生成位置の情報が、キャラのいる地点に到達するまで繰り返すことで、上下方向に花輪をランダムに生成して、ステージを生成します



 最初に FlowerCircle スクリプトを修正して、変数の追加、メソッドの追加を行い、生成された花輪が GameManager スクリプトからの命令により、
受け取った情報を元に、自分で移動の設定と、大きさの変更を行うように制御処理を追加します。

 その後、GameManager スクリプトを修正して、変数の追加と、メソッドの追加を行い、花輪を生成する制御処理を追加します。


3.FlowerCircle スクリプトを修正する


 宣言フィールドには新しく5つの変数を追加しています。処理の内容を確認し、どの部分で利用しているのかを読み解いてみてください。
変数の説明は、アサイン情報の部分で詳しく説明していますが、自分の処理を見た場合の変数の処理と見比べてください。


 従来のメソッド内に追記はありませんが、代わりに新しいメソッドを4つ追加しています。
いずれも花輪が移動する場合に制御処理を行うメソッド群です。

 SetUpMovingFlowerCircle メソッドは GameManager スクリプトから花輪の生成後にすぐに呼び出されるメソッドです。
bool 型の引数を2つ用意しており、その値を利用して、花輪が移動するのか、移動する場合にはランダムな値で移動するのか、
初期の固定値で移動するのかを判定して設定する場所です。その後に、大きさを変える命令が来ていれば大きさと得点も変更します。

 他の3つのメソッドは、このメソッド内から呼び出される処理になっていて、上記のうち、
ランダム移動の判定処理、ランダム移動の場合の値の設定処理、大きさと得点を設定する処理を、それぞれメソッドに分割して制御しています。


FlowerCircle.cs

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



 スクリプトの修正が終了したら、ヒエラルキーにある FlowerCircle ゲームオブジェクトのインスペクターを確認します。
新しく追加した変数群が追加されているか確認してください。


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



4.<Range属性>


 Range(レンジ) 属性は、int 型や float 型の変数を宣言する際に使用する属性です。
宣言した変数の値を、引数で指定した範囲 (最小値, 最大値) として制限することが出来ます。また、その場合、この情報はスライダーとしてインスペクターに表示されます。

  [SerializeField, Header("移動する時間と距離をランダムにする割合"), Range(0, 100)]
  private int randomMovingPercent;


Range 属性利用時のインスペクター表示



参考サイト
Unity公式スクリプトリファレンス
RangeAttribute
https://docs.unity3d.com/ja/current/ScriptReferenc...
テラシュールブログ 様
UnityのAttribute(属性)についてまとめてメモる。
http://tsubakit1.hateblo.jp/entry/2015/01/03/20384...


5.<if文の条件式に戻り値を持つメソッドを利用する場合の実装例>


 if文には戻り値を持つメソッドを利用することで、その戻り値の値を評価して判定を行うことが出来ます。

  // ランダムな移動時間や距離を使うか、戻り値を持つメソッドを利用して判定
  if (DetectRandomMovingFromPercent()) {

      // ランダムの場合には、移動時間と距離のランダム設定を行う
      ChangeRandomMoveParameters();
  }


 ここでは、DetectRandomMovingFromPercent メソッドを実行し、このメソッドの戻り値が bool 型であるため、その戻り値を評価して条件分岐を行います。

  private bool DetectRandomMovingFromPercent() {
      // 処理結果を  bool 値で戻す。randomMovingPercent の値よりも大きければ、false、同じか小さければ true
      return Random.Range(0, 100) <= randomMovingPercent;
  }

 DetectRandomMovingFromPercent メソッドには bool 型の戻り値がありますので、
このメソッドの処理結果が、if文の条件式に対しての評価対象となり、条件を満たすか、満たしていないかを判定します

 処理の順番としては

  if 文に処理が到達する → DetectRandomMovingFromPercent メソッドを実行し、その結果である bool 型の値が if 文内の条件式に戻る → 戻り値を if 文が評価して条件分岐する

 という流れになります。


6.FlowerCircle ゲームオブジェクトのプレファブの設定を行う


 Prefabs フォルダにある FlowerCircle ゲームオブジェクトを選択して、インスペクターの一番上にある Open Prefab ボタンを押してプレファブの編集モードにします。

 FlowerCircle スクリプトに SerializeField 属性で宣言した変数がアサイン情報が5つ追加されていますので、順番に設定を行います。
 

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



 randomMovingPercent 変数は Range 属性が付いていますので、スライダーを使って範囲内で設定を行います。
この値は、移動する花輪として生成された場合にのみ利用する情報です

 移動する花輪として生成された場合に、その移動する時間と距離をランダム値にするか、あるいは固定値にするかを設定する割合です。

 0 にすればランダムに移動する花輪は作られませんので、常に固定値として移動時間と距離が設定されます。
最初は 50 位にしておいてください。その場合、50% の確率でランダムな移動時間と距離を持った花輪が作られることになります。
残る確率になった場合には、固定値を持つ移動する花輪になります。

 durationRange 変数は、上記の randomMovingPercent 変数の結果によって、移動する花輪の移動時間がランダム値になる可能性があります。
その場合のランダム値の幅を設定する情報です。Vector2 型で宣言していますので、X に最小値、Y に最大値を設定します。
Vector2 型は位置情報に利用することが多いですが、このように float 型を2つ使って制限値を設けたい場合にも利用できます

 続いての moveDistanceRange 変数も、上記と同じで、ランダムに移動する花輪として生成された場合における、移動距離のランダム値を設定する情報です。
Vector2 型ですので同じように、ランダム値の最小値と最大値を設定します。



 flowerSizes 変数は配列変数で、花輪の大きさが変更になる判定において、何種類かの大きさの設定を用意しておいて、そのうちの1つの大きさを適用します。
例えば、3種類の大きさの情報の登録があれば、花輪の大きさを、その3種類から1つランダムで選んで設定します。
この値は float 型です。ゲームオブジェクトの Scale の倍率になりますので、例えば、0.5 と設定すれば Scale は 1 * 0.5 = 0,5 の大きさの花輪になります。

 pointRate 変数も配列変数で、上記の flowerSizes 変数の要素数と同じ数で登録を行います。大きさが3種類なら、こちらも3種類にして設定を行います。
こちらの値は花輪の持つ得点にかかる倍率で float 型です。例えば、2.5 と設定すれば、point *= 2.5 が花輪の得点になります。


 これらはゲームを遊びながら調整を行っていきましょう。

 設定が終了したら、続いて GameManager スクリプトを修正し、花輪を生成する処理と、いま追加した FlowerCircle スクリプトの
SetUpMovingFlowerCircle メソッドを呼び出す処理を実装します。


7.GameManager スクリプトを修正して、花輪を自動生成する処理を追加する


 新しい変数を6こ宣言します。すべて SerializeField属性で宣言しますので、インスペクターより設定やアサインを行えるようにしています。
どのような機能を持っていて、どのように利用されているかを確認しながら処理を書いてください。説明は後述のアサインの際にしています。

 従来のメソッドには変更はありませんが、新しく2つのメソッドを追加しています。

 Start メソッドを用意して、ゲームの開始時に、花輪を自動生成する機能を利用するか判定を行います。
もしも自動生成を行う設定になっている場合には、もう1つ新しく用意する CreateRandomStage メソッドを呼び出して、花輪の生成処理を実行します。

 この CreateRandomStage メソッドはコルーチンメソッドとなっており、この中でループ処理を利用して
水面からキャラの位置までの間に花輪を生成する制御を行っています。

 このコルーチンメソッドは Start メソッド内で yield return のついた呼び出し命令によって処理を実行するため、
この花輪の生成処理が終了してステージが完成するまでは、他の処理が一時中断されるように制御を行っています。
そうすることで、ゲーム開始時に花輪がまだ全部できていない、という状態を未然に防ぐようになっています。


GameManager.cs(自分で作成しているスクリプトがある場合には、そのスクリプトを修正する)

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



 スクリプトの修正が終了したら、GameManager ゲームオブジェクトのインスペクターより、GameManager スクリプトを確認してください。
新しく宣言して追加した変数群が表示されていれば問題ありません。


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



8.<Startメソッドの戻り値を void から IEnumerator 型にして使用する処理>


 通常の Start メソッドの戻り値は void ですが、用途に応じて戻り値を IEnumerator型 に変更して利用することができます。
その場合、通常と同じようにゲームの実行と同時にStartメソッドが呼ばれる部分は変わりませんが、
コルーチンメソッドとして機能するようになりますので、Start メソッド内で遅延処理や待機処理などを実装することが可能になります

 今回のケースでは、Start メソッド内に、ステージ内に花輪をランダムな位置に生成する処理がありますので、
こちらの処理をすべて終了してから次の処理へと移る、という順序立てた制御を行いたいため、この処理を実装しています。


9.<yield return StartCoroutine()処理による待機処理>


 コルーチン(Coroutine)とは一定の時間や条件をもとに、処理を中断・再開・終了させることができる処理のことです。

 コルーチンについての詳細な説明は割愛します。こちらの記事や、サイトで広く情報を取得できますので、そちらを参考にしてください。
XR-HU3様
【Unity】コルーチンで処理を中断・再開・停止させる方法を学ぶ
https://xr-hub.com/archives/20368


 コルーチンメソッド内には、yield を利用した処理を記述することができます。
例えば、数秒間の遅延処理や、条件達成まで待機させる処理などを、この yield を利用すると実装できます。
 今回は 2か所で続けて処理を行っています。

  // この処理が終了するまで、次の処理は動かない
  yield return StartCoroutine(CreateRandomStage());

 通常のコルーチンメソッドの呼び出しと違いまして、呼び出す前に yield return があります
この場合、呼び出されたコルーチンメソッドの処理がすべて終了するまで、ここでプログラムを一時中断して待機させる、という処理が実行されます。

 呼び出すコルーチンメソッドの処理は、
「CreateRandomStage メソッドを実行する。そのメソッドの処理がすべて終了するまで、プログラムを一時中断させる」

という内容です。

 その結果、ステージの花輪の生成が終了してから、はじめて次の処理が行われるという処理が実装されています。

 プログラムは上から下へと流れて処理されていきますが、このような中断処理を挟むことによって、
今回の場合であればステージが作成される前にゲームがどんどんと先に進行してしまうのを制御して防いでいます。


10.<GameObject 型ではなくて自作クラスでプレファブをインスタンスする方法>

 
 Instantiate メソッドには戻り値があり、その型は Object 型です。(GameObject 型ではありません)
Object 型とは、すべてのクラスに自動的にサポートされるクラス(型)です。これは、C# プログラムにおける基本クラスとなっています。

MicroSoft
Object クラス
https://docs.microsoft.com/ja-jp/dotnet/api/system...


 そのため、Unity において作成されているクラス(型)ーGameObject 型、Transform 型、Rigidbody 型などーは、すべてこの Object クラスの情報を有しています。
利用頻度の高い ToString メソッドも、この Object 型によって提供されているメソッドになります。
 


 Instantiate メソッドでは第1引数に指定した Object 型のクローンの生成を行うとともに、生成を行った型を戻り値として左辺へ戻します
そのため、GameObject 型でクローンの生成を行うと、GameObject 型が戻り値として戻されます。
GameObject 型は Object 型の情報を有しているため、このように Object 型以外の型でも指定出来るようになっています。

 この機能は GameObject 型には限らないため、クローンの生成を行いたいゲームオブジェクトに、自作したスクリプト(クラス)がアタッチされている場合には
そのスクリプトを使って、クローンの生成を行うとともに、そのスクリプトの型を戻り値として戻すことが出来ます
この場合、左辺に用意する型もスクリプトの型を用意することで戻り値を受けとることが可能です。

 この場合も GameObject 型と同じで、自作したスクリプト(クラス)には Object 型の情報が含まれているので、Instantiate メソッドの第1引数として指定できるようになっています。

 クラスによる生成、という単語で見るとイメージが沸きにくいかもしれませんが、どちらの場合であっても、ゲームオブジェクトが生成されます。


GameObject型でのインスタンス処理
    [SerializeField]
    private GameObject flowerCirclePrefab;


    // 花輪の位置を設定して生成(GameObject 型でインスタンスするので、戻ってくる型も GameObject 型)
    GameObject flowerCircleObj = Instantiate(flowerCirclePrefab, new Vector3(Random.Range(limitLeftBottom.position.x, limitRightTop.position.x), flowerHeight, Random.Range(limitLeftBottom.position.z, limitRightTop.position.z)),Quaternion.identity);

    // FlowerCircle スクリプトを取得
    FlowerCircle flowerCircle = flowerCircleObj.GetComponent<FlowerCircle>();

    // 花輪の初期設定を呼び出す。引数には評価後の戻り値を利用する。このとき、移動するかどうか、大きさを変えるかどうかの情報を引数として渡す
    flowerCircle.SetUpMovingFlowerCircle(Random.Range(0, 100) <= movingFlowerCirclePercent, Random.Range(0, 100) <= scalingFlowerCirclePercent);



自作クラスでのインスタンス処理
    [SerializeField]
    private ResultPopUp resultPopUpPrefab;


    // 花輪の位置を設定して生成(FlowerCircle 型でインスタンスするので、戻ってくる型も FlowerCircle 型)
    FlowerCircle flowerCircle = Instantiate(flowerCirclePrefab, new Vector3(Random.Range(limitLeftBottom.position.x, limitRightTop.position.x), flowerHeight, Random.Range(limitLeftBottom.position.z, limitRightTop.position.z)),Quaternion.identity);
                     
    // 花輪の初期設定を呼び出す。引数には評価後の戻り値を利用する
    flowerCircle.SetUpMovingFlowerCircle(Random.Range(0, 100) <= movingFlowerCirclePercent, Random.Range(0, 100) <= scalingFlowerCirclePercent);


 違いとしては、プレファブとして登録する際の型や、インスタンス処理の際の左辺に用意する型が異なります

 そして最も大きな違いは、クラスの取得方法です。インスタンスされたゲームオブジェクトの持つクラスの情報を利用したい場合、
GameObject 型である場合には一度、GetComponetメソッドを利用して、操作を行いたいクラスの情報を取得する必要があります。

 ですが下のケースの場合、クラスとして生成されるため、GameObject 型の場合に必要な GetComponentメソッドの処理が不要になります。

 下の自作クラスでインスタンス処理をした場合にはゲームオブジェクトのクローンを生成する部分は同じですが、戻り値として FlowerCircle スクリプトを受け取っているため、
GetComponent メソッドを実行せずとも、そのスクリプトの情報を自動的に取得出来ています。

 このように GetComponent メソッド処理を省略する処理を書くことで、処理的に重い GetComponent 処理の負荷を減らすことが出来ます。
もしも生成したゲームオブジェクトのクローンに対して、何か処理を行いたいような場合には、GameObject型だけではなく、自作クラスにて生成することも念頭に置いて設計しておきましょう。


11.<引数に条件式を利用する方法>


 引数の指定には、戻り値を持つ処理を利用することが出来ます。

<呼び出されるメソッド>
 public void SetUpMovingFlowerCircle(bool isMoving, bool isScaleChanging) {

 こちらの SetUpMovingFlowerCircle メソッドは、引数として bool 型の情報を2つ要求しています。
そのため、このメソッドを呼び出す場合には、bool 型の真偽値(true/false) を直接、あるいは代入されている変数を利用して指定できます。

 またそれ以外にも、戻り値が bool 型である処理についても、こちらの引数として利用することが出来ます

<呼び出す処理>
  // 花輪の初期設定を呼び出す。引数には評価後の戻り値を利用する。このとき、移動するかどうか、大きさを変えるかどうかの情報を引数として渡す
  flowerCircle.SetUpMovingFlowerCircle(Random.Range(0, 100) <= movingFlowerCirclePercent, Random.Range(0, 100) <= scalingFlowerCirclePercent);

 第1引数として指定されている処理は、以下の条件式になります。条件式は、戻り値として bool 型を持っています

  Random.Range(0, 100) <= movingFlowerCirclePercent

 この条件式は、Random.Range メソッドを実行し、その戻り値と movingFlowerCirclePercent 変数の値とを比べて、
movingFlowerCirclePercent 変数の値よりも同じか小さい値であれば true が戻されます。大きい値であれば false が戻されます。
その結果を、引数として渡している処理になります。

 第2引数も同じ内容です。

 これは、以下の処理を1行にまとめた処理であると言えます。


  // ランダムな値を1つ取得
  int movingValue = Random.Range(0, 100);

  // 移動するかどうかを設定する。false なら移動しない花輪
  bool isMoving = false;

  // 移動する花輪の確率内にランダムな値が含まれているなら
  if(movingValue <= movingFlowerCirclePercent){

      // 移動する花輪として設定する
      isMoving = true;
  } 

  // ランダムな値を1つ取得
  int scaleChangingValue = Random.Range(0, 100);

 // 大きさを変えるかどうか設定する。false なら変更しない花輪
  bool isScaleChanging = false;

  // 大きさを変更する花輪の確率内にランダムな値が含まれているなら
  if(scaleChangingValue <= scalingFlowerCirclePercent){

   // 大きさを変更する花輪として設定する
      isScaleChanging = true;
  } 

  // 花輪の初期設定を呼び出す。このとき、移動するかどうか、大きさを変えるかどうかの情報を引数として渡す
  flowerCircle.SetUpMovingFlowerCircle(isMoving, isScaleChanging);


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


 新しく追加された変数の設定をアサインを行います。


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



 isRandomStaging 変数にチェックを入れてオンにすることで、GameManager スクリプトの Start メソッド内の花輪の自動生成処理が実行されます。
今回はチェックを入れて、true の状態にしてください。

 movingFlowerCirclePercent 変数と、scalinggFlowerCirclePercent 変数はどちらも Range 属性がついていますので、
制限範囲内でのみ、設定を行うことが出来ます。制限値はどちらも 0 - 100 です。今回はどちらも 50 に設定しておいてください。
その場合、50% の割合で移動する花輪が生成され、50% の割合で大きさが変化する花輪が生成されます。両方一緒になる場合もあります。

 flowerCirclePrefab 変数には Prefabs フォルダにある FlowerCircle ゲームオブジェクトをドラッグアンドドロップして登録します。
() の部分には型が表示されますので、アサインされた型を確認しておきましょう。GameObject 型ではないはずです。
 
 limitLeftBottom 変数と limitRightTop 変数には、ヒエラルキーにある同名のゲームオブジェクトをドラッグアンドドロップして登録します。
この情報を利用して、花輪が生成される範囲を設定します。


 以上ですべての設定が完了です。


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


 最初に、ヒエラルキーにある Ways ゲームオブジェクトを一旦非表示にしておいてください。空中にある花輪が見えなくなります。

 それでは、GameManager スクリプトの自動生成のスイッチがオンであることを確認して、ゲームを実行してください。
実行と同時に、キャラのいる地点付近まで花輪が生成されて、位置がランダムに、移動するかしないかもランダムに、大きさと得点もランダムに
それぞれ設定されていれば制御成功です。ゲームを一時停止して、インスタンスされた花輪のゲームオブジェクトを1つずつ確認してみてください。

 またゲームを何回か起動して、毎回ランダムに生成されるか、各割合を変えた場合に、制御されているか(移動する花輪を100%にしたら全部移動する花輪になるか、など)を
設定項目がたくさんありますので、順次検証してください。


<実装動画 ゲーム実行と同時に花輪がランダムな位置とサイズで設置される>
https://gyazo.com/c259862aeca622f3311e68fbd82e0b3a

<実装動画 各花輪のデータ。大きさや得点、移動設定が自動で設定されている>
https://gyazo.com/9e8921d70f6b6cbc926351c27247f714


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

 => 次は 発展2 −障害物の追加− です。

コメントをかく


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

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

Menu



プログラムの基礎学習

コード練習

技術/知識(実装例)

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

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

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

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

レースゲーム(抜粋)

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

3D脱出ゲーム(抜粋)

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

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

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

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

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

VideoPlayer イベント連動の実装例

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

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

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

private



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

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