Я делаю игру Unity, в которой игрок собирает данные об инопланетянах.Для этого игрок указывает на инопланетянина и использует что-то вроде камеры.
Камера -> снимает Луч -> Луч возвращает все необходимые данные, прикрепленные к сценарию на чужом игровом объекте
void ShootRay()
{
RaycastHit hitInfo; // stores information about hitted object
if (Physics.Raycast (transform.position, transform.forward, out hitInfo, maxRaycastRange, 1 << LayerMask.NameToLayer("creature"))) // out hitInfo = Unity puts information in the variable hitInfo
{
// UI alerts and collecting dna
if (hitInfo.distance <= photoRaycastRange)
{
distanceInfo.text = "scanning_genome";
if (hitInfo.collider.gameObject.GetComponent<EnemyAI> ().dna_collected == false) {
if (dna_percent_0_to_1 < 1)
{
calming_dna_scan_circle = false;
distanceInfo.text = "scanning_genome";
dna_percent_0_to_1 += Time.deltaTime * dna_scanSpeed;
dna_collect_circle.fillAmount = dna_percent_0_to_1;
}
else if (dna_percent_0_to_1 >= 1)
{
// adding info of creature to database
if (hitInfo.collider.gameObject.GetComponent<EnemyAI> ().raceIndex == 1)
{
if (!raceOneWasAdded)
{
BestiariumData.scannedSpecies.Add (hitInfo.collider.gameObject);
raceOneWasAdded = true;
}
BestiariumData.dnaBar_1 += 0.25f;
Упомянутая база данных - это просто класс с именем BestiariumData с:
public static List<GameObject> scannedSpecies = new List<GameObject> ();
public static List<float> savedDNAFillRates = new List<float> ();
public static float dnaBar_1 = 0;
public static float dnaBar_2 = 0;
public static float dnaBar_3 = 0;
public static float dnaBar_4 = 0;
public static float dnaBar_5 = 0;
public static float dnaBar_6 = 0;
public static float dnaBar_7 = 0;
public static float dnaBar_8 = 0;
}
У меня есть меню, в котором игрок может проверить, какие инопланетяне уже собрали данные.Отображается имя инопланетянина (Monster One, ...) и индикатор выполнения, показывающий, сколько инопланетян было отсканировано игроком.
![Menu with Name of Alien (monster one, monster two...) and a bar that shows how much of all alien individuals the player has scanned](https://i.stack.imgur.com/7eZ8R.png)
ПРОБЛЕМА: если я попытаюсь присвоить ИМЯ строки состояния, если выдает ArgumentOutOfRangeException: Аргументвне диапазона.Имя параметра: индекс исключение.Я делаю это, устанавливая bool в другом скрипте в true.
public List<GameObject> monsterButtons = new List<GameObject>();
public static bool nameButtons = false;
// Update is called once per frame
void LateUpdate ()
{
if (nameButtons)
{
for (int buttonIndex = monsterButtons.Count; buttonIndex > 0; buttonIndex--)
{
monsterButtons [buttonIndex].GetComponentInChildren<Text> ().text = BestiariumData.scannedSpecies [buttonIndex].name;
}
}
}
Спасибо за вашу помощь.