Как я могу добавлять и вычитать переменную из нескольких игровых объектов без потери точности?C#

Место общения программистов C#
Anonymous
Как я могу добавлять и вычитать переменную из нескольких игровых объектов без потери точности?

Сообщение Anonymous »

У меня в сцене более 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#»