Почему икру моего препятствия не следуют тому же шаблону нереста? - PullRequest
0 голосов
/ 19 сентября 2019

Я создаю игру, в которой у вас есть 3 блока для перемещения, и в двух из них есть препятствие, вот картинка картинка игры .проблема, с которой я сталкиваюсь, состоит в том, что препятствия иногда берут перерыв примерно в 3 секунды, а затем снова появляются, а затем ждут некоторое время и снова начинают появляться.картина не является непрерывной.Я хочу, чтобы они всегда появлялись со вторым промежутком времени.

  using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;

public class merHinder : MonoBehaviour
{
    public Rigidbody2D orginal;
    private Vector3[] spawnPos = new Vector3[3];


    // Start is called before the first frame update
    void Start()
    {
        //InvokeRepeating("timer", 0f, 1f);
        StartCoroutine(SpawnAtIntervals(1f));
    }

    // Update is called once per frame
    void Update()
    {


        spawnPos[0] = new Vector3(3, 3.86f, -5);
        spawnPos[1] = new Vector3(-3, 3.86f, -5);
        spawnPos[2] = new Vector3(0, 3.86f, -5);




    }
    private void FixedUpdate()
    {

    }
    void Spawn()
    {
        int randomNumber = Random.Range(0, spawnPos.Length);
        int randomNumber1 = Random.Range(0, spawnPos.Length);
        if (randomNumber != randomNumber1)
        {
            Rigidbody2D clone1 = Instantiate(orginal, spawnPos[randomNumber], Quaternion.identity);
            Rigidbody2D clone2 = Instantiate(orginal, spawnPos[randomNumber1], Quaternion.identity);
        }
        //Destroy(orginal);



    }
    bool keepSpawning = true;

    IEnumerator SpawnAtIntervals(float secondsBetweenSpawns)
    {
        // Repeat until keepSpawning == false or this GameObject is disabled/destroyed.
        while (keepSpawning)
        {
            // Put this coroutine to sleep until the next spawn time.
            yield return new WaitForSeconds(secondsBetweenSpawns);

            // Now it's time to spawn again.
            Spawn();
        }
    }
}

1 Ответ

0 голосов
/ 19 сентября 2019

Они появляются, только если случайные числа отличаются.Но иногда случайные результаты приводят к одному и тому же числу.

    int randomNumber = Random.Range(0, spawnPos.Length);
    int randomNumber1 = Random.Range(0, spawnPos.Length);
    if (randomNumber != randomNumber1) // <- No spawn if both random numbers are the same
    {
        Rigidbody2D clone1 = Instantiate(orginal, spawnPos[randomNumber], Quaternion.identity);
        Rigidbody2D clone2 = Instantiate(orginal, spawnPos[randomNumber1], Quaternion.identity);
    }

Возможное решение (немного хак, но без выделения кучи):

    void Spawn()
        {
            int randomNumber = Random.Range(0, spawnPos.Length);
            int randomNumber1 = Random.Range(0, spawnPos.Length);
            while (randomNumber == randomNumber1)
            {
                // try again until numbers are different
                randomNumber1 = Random.Range(0, spawnPos.Length);
            }
            Rigidbody2D clone1 = Instantiate(orginal, spawnPos[randomNumber], Quaternion.identity);
            Rigidbody2D clone2 = Instantiate(orginal, spawnPos[randomNumber1], Quaternion.identity);
        }
...