Прежде всего: никогда не используйте ==
для сравнения двух float
значений.
Из-за неточности с плавающей запятой значение может не точно совпадать с другим, даже если логически вы бы так подумал.
Пример Unity использует if
10f / 10f != 1f
, поскольку иногда это может быть что-то вроде 1.00000001
или 0.999999999
.
IF вы хотите проверьте точные значения, а используйте Mathf. Примерно
if(Mathf.Approximately(a,b))
, что в основном равно
if(Mathf.Abs(a-b) <= Mathf.Epsilon)
, а затем, во-вторых, ваше
radiuss -= Time.deltaTime * rSpeed;
допускает перерегулирование, поэтому, если перед запуском radiuss
уже < Time.deltaTime * rSpeed
, вы получите отрицательное значение, которое не совсем == 0
, но, возможно, -0.00000001
или меньше, поэтому вы никогда не попадете в блок if
.
Таким образом, вы можете либо просто использовать
if(radius <= 0)
{
transform.position = Vector3.zero;
}
...
, либо вы можете определенно убедиться, что оно не ниже 0
, и сделать
radius = Mathf.Max(0, radius);
if(Mathf.Approximately(radius, 0))
{
transform.position = Vector3.zero;
}
...