Как я могу довести игру до конца, как функцию, которая срабатывает, когда значение переменной достигает 0? - PullRequest
0 голосов
/ 26 мая 2020

Я пытался сделать что-то вроде

 public double number = 10000;
 public double decreasing = 10;

 public void Update()
 {
     number -= decreasing * Time.deltaTime;

     if (number == 0)
     {
         decreasing = 0;
     }
 }

, но это не сработало. Как я могу заставить его перестать уменьшаться, когда он достигнет 0?

1 Ответ

2 голосов
/ 26 мая 2020

Это двойное, разновидность довольно большого числа с плавающей запятой. Поплавки известны своей неточностью. точное совпадение , например number == 0, происходит один раз в синюю луну. Даже после установки значения не гарантируется, что будет точно этим значением. Это неотъемлемое и неизбежное свойство типов с плавающей запятой: https://www.youtube.com/watch?v=PZRI1IfStY0

Либо ожидайте этого с этого момента и используйте проверки <=, либо полностью прекратите использование float. Какой-нибудь простой код вроде этого: </p>

if(number <= 0)
  number = 0;

гарантирует, что если он когда-либо упадет ниже 0, он вернется к 0. После этой строки точное совпадение, например number == 0, будет несколько надежным. Но я советую вообще прекратить использовать поплавок. Целое число, в котором последние 3 цифры отображаются как «десятичная точка», здесь работает лучше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...