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