У меня в сцене более 100 (около 200) вражеских игровых объектов, и каждую секунду появляется 5-6. Я использую пул объектов, и объекты создаются не каждый раз, а только при необходимости.
Я пытаюсь записать статистику, чтобы показать общее количество оставшихся врагов и общее количество уничтоженных врагов.
А простая математическая функция сложения и вычитания из соответствующих игровых объектов не дает того, что должно быть.
Например:
Всего врагов появилось 200 (когда я не убил ни одного)
Я убиваю много врагов за одно мгновение, но когда я заканчиваю убивать их всех, количество оставшихся врагов не всегда равно нулю.
Я пробовал убивать врагов одного за другим по мере их появления и сложение и вычитание суммируются правильно.
Итак, как я могу складывать и вычитать переменную из нескольких игровых объектов без потери точности?
public void TookDownEnemy(int enemiesTookDown)
{
//enemiesAlive -= enemiesTookDown;
enemiesTakenDown += enemiesTookDown;
Debug.Log("stats, enemies took down: " + enemiesTakenDown);
UpdateStats();
}
public void SpawnedNewEnemy(int spawned)
{
enemiesAlive += spawned;
UpdateStats();
}
public void UpdateStats()
{
enemiesTakenDownText.text = ": " + enemiesTakenDown.ToString();
enemiesAliveText.text = ": " + (enemiesAlive - enemiesTakenDown).ToString();
}
Я вызываю SpawnedNewEnemy из игрового объекта, порождающего врагов, каждый раз, когда он порождает нового врага, TookDownEnemy вызывается из игрового объекта, когда они создаются.
public void InstantiateNewEnemy()
{
StatsManager.Instance.SpawnedNewEnemy(1);
Enemy instance = ObjectPooler.DequeueObject("Enemy");
instance.Initialize(10.0f); // get this hp value from the experience manager
instance.SetThisAlive();
instance.gameObject.SetActive(true);
instance.transform.SetParent(enemiesHolder);
int randomIndex = Random.Range(0, enemySpawnPoints.childCount);
instance.transform.position = enemySpawnPoints.GetChild(randomIndex).position;
instance.transform.rotation = Quaternion.identity;
}
Аналогично, когда враг убит или умирает
if(hp 0)
{
enemiesAlive += (int)enemiesAliveQueue.Dequeue();
}
while(enemiesTookDownQueue.Count > 0)
{
enemiesTakenDown += (int)enemiesTookDownQueue.Dequeue();
}
enemiesTakenDownText.text = ": " + enemiesTakenDown.ToString();
coinsCollectedText.text = ": " + coinsCollected.ToString();
enemiesAliveText.text = ": " + (enemiesAlive - enemiesTakenDown).ToString();
}
Подробнее здесь: https://stackoverflow.com/questions/787 ... thout-losi
Как я могу добавлять и вычитать переменную из нескольких игровых объектов без потери точности? ⇐ C#
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение