Почему этот код не работает?
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class BigGun : MonoBehaviour {
public Transform playerPos;
public Transform shootPoint;
public GameObject bullet;
private Animator anim;
public float timer;
private float newTimer;
private Vector2 spacing;
public float spacingValue;
void Start()
{
anim = GetComponent();
newTimer = timer;
}
void Update () {
Vector2 spacing = playerPos.position - transform.position;
newTimer -= Time.deltaTime;
if (spacing.x < spacingValue
Ну, код вообще, если честно, написан "не очень"...
Во первых, newTimer никогда не будет равен нулю, а судя по вашему коду у вас это вполне возможно.
Во вторых, строго сравнивать float - это очень плохо. Скорее стоит сравнивать числа с плавающей точкой по модулю и с учётом погрешностей (иначе вероятность того что ваши числа будут "одинаковыми" бесконечно стремится к нулю).
Это из явно очевидного. Вообще в вашем случае ошибка больше логическая. Вот давайте представим ситуацию:
Ваш newTimer будет равен одной секунде. Time.deltaTime уже исходя только из названия - величина непостоянная, и вероятность того что за тех же 10 фреймов (например (а обновление вызывается каждый фрейм)) сумма вашей переменной deltaTime будет почти нулём (а точнее - СТРОГО 1 секунда). Так что в вашем случае скорее нужно какое-то нестрогое условия, что-то вроде newTimer <= 0.