重要なお知らせ:誠に勝手ながら当サイト(unityroom質問掲示板)は2021年10月31日をもちまして閉鎖させていただきます。ご利用誠にありがとうございました。

unityroom.com については引き続きご利用いただけます。

0 支持
113 閲覧

 初めまして、最近unityを始めたものです。
 現在、Unityの公式チュートリアルである「Create with code」の「課題 2 - ほら、取っておいで!」の「7。ボーナス課題:出現間隔がいつも同じ!」の「出現間隔を 3 秒から 5 秒の間のランダムな値にする」という課題を勉強してる所です。内容としては、上から3種類のボールが1秒間隔で落ちてくるのですが、これを1秒間隔ではなく3秒〜5秒のランダムな時間で落ちてくるようにコードを書き直すものです。下記のコードを書いたのですが、出現間隔が1秒ごとにしかなりません。(下記のコードのうち「//←ココです」と書いている所が自分で書いてうまく作動していない所です。)

public GameObject[] ballPrefabs;

private float spawnLimitXLeft = -22;
private float spawnLimitXRight = 7;
private float spawnPosY = 30;
private float startDelay = 1.0f;
public float spawnInterval = 1.0f;

// Start is called before the first frame update
void Start()
{
    InvokeRepeating("SpawnRandomBall", startDelay, spawnInterval); //←ココです
}
// Spawn random ball at random x position at top of play area
void SpawnRandomBall()
{
    // Generate random ball index and random spawn position
    Vector3 spawnPos = new Vector3(Random.Range(spawnLimitXLeft, spawnLimitXRight), spawnPosY, 0);
    int randomBall = Random.Range(0, ballPrefabs.Length);
    // instantiate ball at random spawn location
    Instantiate(ballPrefabs[randomBall], spawnPos, ballPrefabs[randomBall].transform.rotation);
    spawnInterval= Random.Range(0, 4); //←ココです
    Debug.Log(spawnInterval);
}

以上何卒よろしくお願いします。

参考にチュートリアルのURLを貼っておきます。
https://learn.unity.com/project/unit-2-basic-gameplay-jp?uv=2018.4&courseId=5f077eccedbc2a3231d474ba

初心者 (130 ポイント)
編集 | 113 閲覧

ログインまたはユーザー登録してから回答してください。

回答 1

+1 支持

繰り返しSpawnRandomBallを呼び出しているのは、InvokeRepeatingですが、
InvokeRepeatingはStartの中で一度だけ呼び出されています。

InvokeRepeatingはずっと固定間隔でSpawnRandomBallを呼び出し続けるので、あとからspawnIntervalを変えても反映されないです。

いろいろやりようはあると思いますが、
1. Startの中のInvokeRepeatingをInvokeに変更する(SpawnRandomBallは一度だけ呼ばれるようになる)
2. SpawnRandomBallの最後にInvokeを追加し、SpawnRandomBallをランダム時間後に呼び出すようにする
こんな感じが簡単かなと思いました。

達人回答者 (8.5k ポイント)

関連する質問

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

181 質問

161 回答

165 コメント

221 ユーザー