0 支持
254 閲覧
Instantiateメソッドを使用して、いくつかのプレハブを生成する際に、「このプレハブの生成は少なめ」「このプレハブは多め」といった実装は可能でしょうか?

想定としては、雑魚モンスターを多く生成し、強いモンスターは少な目に生成したいと考えています。

現在のスクリプトは以下の通りです。

```csharp=

public GameObject[] prefabs = new GameObject[3];

int type = 0;

Instantiate(prefabs[type],pos,Quaternion.identity);

type++;

type %=3;

```
閉鎖
初心者 (190 ポイント) | 254 閲覧

回答 2

+2 支持
ベストアンサー
実装するゲームの規模にもよりますが、テーブルを作るのが一番手っ取り早いと思います。
質問にあるスクリプトから極力近い形で書くとこんな感じでしょうか。

  public GameObject[] prefabs = new GameObject[3];
    int[] table = new int []{ 0, 0, 0, 0, 0, 0, 1, 1, 1, 2 };
    int type = 0;
    void PopEnemy() {
        Instantiate(prefabs[table[type]]);
        type++;
        type %= table.Length;
    }

この場合、0の敵が6体、1の敵が3体、2の敵が1体出現します。

--

追記:質問のケースなら直接prefabsを[10]に増やしてしまって、
prefabsそのものをテーブル化しちゃっても問題ないかもしれません……
達人回答者 (6.2k ポイント)
選択
0
ありがとうございます!無事実装できました!
+2 支持

こんばんは、確率で出すモンスターを変えるのであれば乱数を使ってみるといいかもしれません。

まず、乱数のシード値を初期化


Random.InitState(System.Datetime.Now.Millisecond);


とStart()かどこかに書いておきます。

プレハブを生成するスクリプトは現在のサンプルから変更しますと


public GameObject[] prefabs = new GameObject[3];

int monsterProbability = Random.Range(0, 10) // ランダムで0〜9の値が出る

int type ;

if (monsterProbability < 7)

{

    // 7割の確率

    type = 0;

}

else if (monsterProbabillity < 9)

{

    // 2割の確率

    type = 1;

}

else

{

    // 1割の確率

    type = 2;

}

// プレハブの生成

Instantiate(prefabs[type],pos,Quaternion.identity);


​​​​​​​となるかな?(多分)

初心者 (280 ポイント)

関連する質問

2021-02-08 質問・回答をMarkdownで入力できるようにしました。
2020-09-03 新たなスパム対策を導入しました。

175 質問

157 回答

163 コメント

214 ユーザー