@Romanuss

Не могу понять почему не работает код?

Здравствуйте, имеется код:

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<Animator>();
        newTimer = timer;
    }

	void Update () {

        Vector2 spacing = playerPos.position - transform.position;

        newTimer -= Time.deltaTime;

        if (spacing.x < spacingValue && newTimer == 0) //Здесь не работает почему то
        {
            Instantiate(bullet, shootPoint.position, shootPoint.rotation);
            anim.SetTrigger("Detected");
            newTimer = timer;
        }
    }

Проблема с условием.
  • Вопрос задан
  • 194 просмотра
Решения вопроса 1
GavriKos
@GavriKos Куратор тега Разработка игр
Вы или чего то не дописали, или что, но.
Сразу есть очевидная проблема - newTimer никогда не будет равен нулю.
Вообще строгое сравнение float - это плохо. Надо сраванивать по модулю с учетом погрешности.
Но конкретно в вашем случае ошибка больше логическая.

Допусти newTimer = 1 секунда. Time.deltaTime - величина непостоянная - вероятность что за например 10 ферймов (а апдейт вызывается каждый фрейм) сумма deltaTime будет ИМЕННО СТРОГО одна секунда - ну практически ноль.

Так что вам нужно нестрогое условие типа newTimer <= 0;
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы