Как создать 2 объекта один за другим в одном и том же месте - PullRequest
0 голосов
/ 18 ноября 2018

Я хочу создать префаб перед другим префабом в том же месте, выбранном случайным образом генератором случайных чисел в Unity, но когда я его запускаю, он создает первый префаб в другом месте.Думаю, мне следует изменить сферу spawnIndex, но это не позволяет мне поставить ее поверх всего.Вот мой код:

public Transform[] SpawnPoints;
public Transform[] EffectPoints;


public float spawnTime = 1.5f;
public float effectSpawnTime = 1f;

public GameObject Coins;
public GameObject Effect;

int a = Random.Range(0, 4);


// Use this for initialization
void Start()
{

    InvokeRepeating("SpawnParticle", effectSpawnTime, effectSpawnTime);
    InvokeRepeating("SpawnCoins", spawnTime, spawnTime);
}

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

}

void SpawnCoins()
{

    int spawnIndex = Random.Range(0, 4);
    Instantiate(Coins, SpawnPoints[spawnIndex].position, SpawnPoints[spawnIndex].rotation);
}
void SpawnParticle()
{
    int spawnIndex = Random.Range(0, 4);
    Instantiate(Effect, EffectPoints[spawnIndex].position, EffectPoints[spawnIndex].rotation);
}

1 Ответ

0 голосов
/ 18 ноября 2018

Код, который вы опубликовали, содержит пару ошибок:

  1. Прежде всего, ваше объявление int a должно быть на Start или awake, но не в конструкторе классов, иначе вы получите ошибку, также вам не нужны 2 переменные для выполнения чего Вы хотите, поэтому я удалил int a и использую один и тот же индекс "spawnIndex" для всего.
  2. Во-вторых, если вы хотите избежать возможных ошибок в будущем, я предлагаю вам сделать значения случайного диапазона статическими или хотя бы переменными, не используйте «жестко закодированный», что произойдет, если вы используете больше, чем 4 очка возрождения? -> ОШИБКА
  3. Как вы говорите, вы используете разные случайные числа, но вы хотите использовать то же самое случайное число, чтобы каждый эффект и монета были вместе. Затем используйте ту же переменную (вы были правы, это проблема области видимости).

Так что, если мы применим все изменения, которые я упомянул, код результата будет:

using UnityEngine;

public class Test : MonoBehaviour {

    public Transform[] SpawnPoints;
    public Transform[] EffectPoints;


    public float spawnTime = 1.5f;
    public float effectSpawnTime = 1f;

    public GameObject Coins;
    public GameObject Effect;

    int spawnIndex = 0;
    int maximumRandomRange = 0;
    // Use this for initialization
    void Start()
    {
        //Initialize the variable
        spawnIndex = Random.Range(0, maximumRandomRange);
        maximumRandomRange = SpawnPoints.Length; //or EffectPoints.Length, as they got the same

        InvokeRepeating("SpawnParticle", effectSpawnTime, effectSpawnTime);
        InvokeRepeating("SpawnCoins", spawnTime, spawnTime);
    }

    void SpawnCoins()
    {
        Instantiate(Coins, SpawnPoints[spawnIndex].position, SpawnPoints[spawnIndex].rotation);
    }
    void SpawnParticle()
    {
        spawnIndex = Random.Range(0, maximumRandomRange); //You only need to call it here again, as it is the function which is called faster
        Instantiate(Effect, EffectPoints[spawnIndex].position, EffectPoints[spawnIndex].rotation);
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...