Как я могу добавлять и вычитать переменную из нескольких игровых объектов без потери точности?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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Unity — назначение свойств при создании игровых объектов. Рекомендации по созданию игровых объектов
    Anonymous » » в форуме C#
    0 Ответы
    43 Просмотры
    Последнее сообщение Anonymous
  • Могу ли я использовать разные шейдеры для нескольких игровых объектов в одном вызове glMultiDrawElementsIndirect?
    Anonymous » » в форуме C++
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous
  • Повышение точности обучения при колебаниях точности проверки
    Anonymous » » в форуме Python
    0 Ответы
    59 Просмотры
    Последнее сообщение Anonymous
  • Числа с плавающей запятой двойной точности и одинарной точности?
    Anonymous » » в форуме Python
    0 Ответы
    28 Просмотры
    Последнее сообщение Anonymous
  • Как вычитать значения в массивах, используя JavaScript
    Anonymous » » в форуме Php
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»