Я знаю, что, должно быть, я делаю что-то не так, однако, после того, как я ударился головой об этом в течение 8 часов, я просто не могу понять, где я ошибаюсь.
У меня есть 2 игровых объекта "Блок1", " block2" . Я хочу иметь возможность подсчитать общее количество блоков, когда они входят в круг. Для этого я сделал следующее:
Поместил скрипт в каждый блок с именем NumberBlock. Затем я конвертирую блок в его Integer, используя следующий скрипт: publi c int number; string str;
private void Awake()
{
str = gameObject.transform.name; //first get the name
str = str.Substring(str.Length -1, 1); //remove all words apart from number
int.TryParse(str, out number); //convert string to number
}
Это успешно оставляет меня с целым числом = 1, 2 et c.
Я тогда пу sh блок в сферу. Сфера имеет скрипт, который делает следующее: 1- Создает пустой список интергеров. 2- OnTriggerEnter Проверяет, что тег объектов не является игроком или землей. 3- Получает объект Numberblock Script и проверяет блоки "IntNumber", затем добавляет его. в список InCircle. Наконец, foreach суммирует каждое число, чтобы дать итоговое значение (TotalBlocks).
// отслеживать, сколько чисел в круге опубликовано c List InCircle = new List ();
//add the total number in the blocks
public int BlockNumber;
public int TotalBLocks;
private void OnTriggerEnter(Collider other)
{
if (other.CompareTag("Player"))
{
return;
}
if (other.CompareTag("Floor"))
{
return;
}
//get the blocks number
BlockNumber = other.transform.GetComponent<Numberblocks>().number;
//add block number to the list
InCircle.Add(BlockNumber);
foreach (int e in InCircle)
{
TotalBLocks += e;
}
}
Проблема, как видно на скриншоте, заключается в том, что TotalBlocks неправильно суммирует значения. Блок 1 и блок 2 должны суммировать 3, а не 4. Список InCircle правильно хранит 2 значения, я также проверил, сохранив игровые объекты, которые также правильно отображаются.
Пожалуйста, помогите мне понять, где я делаю это неправильно? введите описание изображения здесь