Как заставить мою задержку выстрела работать

Я пытался узнать, как это сделать с помощью gamesplusjames на YouTube, но это не очень хорошо получается. Я почти уверен, что это что-то незначительное, но я не могу понять, что это такое. По сути, мой персонаж целится из лука и стрел и стреляет, когда я отпускаю клавишу C. Но мне нужна задержка, чтобы она не стреляла быстрее, чем могут двигаться ее анимации. Кто-нибудь может сказать мне, где я уронил мяч? Я упростил свой код, чтобы избавиться от всего прочего хлама, не связанного со стрельбой или прицеливанием. Спасибо.

using UnityEngine;
using System.Collections;
using UnityEngine.UI;

public class tulMove : MonoBehaviour {

public Transform arrowSpawn;
public GameObject arrowPrefab;

private bool aim = false;
private bool shot = false;

public float shotDelay;
private float shotDelayCounter;

private Rigidbody2D rb;
private Animator anim;

void Start ()
{

    anim = GetComponent<Animator>();
    rb = GetComponent<Rigidbody2D>();

}

void Update(){

    if (!aim && Input.GetKeyDown (KeyCode.C))
    {
        aim = true;
        anim.SetTrigger ("aim");
    }

    if (aim && !shot && Input.GetKeyUp (KeyCode.C)) 
    {

        shot = true;
        aim = false;
        anim.SetTrigger ("shot");
        Instantiate (arrowPrefab, arrowSpawn.position, arrowSpawn.rotation);
        shotDelayCounter = shotDelay;
    }

    if (aim && !shot && Input.GetKeyUp (KeyCode.C)) 
    {
        shotDelayCounter -= Time.deltaTime;

        if (shotDelayCounter <= 0) 
        {
            shotDelayCounter = shotDelay;
            shot = true;
            aim = false;
            anim.SetTrigger ("shot");
            Instantiate (arrowPrefab, arrowSpawn.position, arrowSpawn.rotation);
             }
        }
    }
}

person Joe Clark    schedule 02.08.2017    source источник
comment
Не могли бы вы опубликовать ссылку на видео и описать, что сейчас происходит не так? Например, вы подразумеваете, что анимация в настоящее время идет слишком быстро?   -  person SpiritBH    schedule 02.08.2017
comment
Ну, видео не совсем соответствует моей ситуации, но точно. Это примерно 20 минут, но он просто делает таймер в первые пару минут, а затем переходит к созданию здоровья, что не имеет значения. youtube.com/watch?v=F6hUIU72JwE   -  person Joe Clark    schedule 02.08.2017
comment
извините, если я не был ясен. Я просто пытаюсь заставить таймер работать в основном. Сейчас я не получаю результатов. Я могу настроить время, необходимое для выхода следующей стрелки, используя поплавок, что не является проблемой. заставить код работать в первую очередь является проблемой.   -  person Joe Clark    schedule 02.08.2017


Ответы (1)


Сейчас ваш код структурирован так, что shotDelayCounter вызывается только тогда, когда его оператор if истинен, а похоже, что это не всегда так. Переместите shotDelayCounter -= Time.deltaTime; за пределы оператора if, чтобы он вызывался в каждом кадре. Что-то типа:

shotDelayCounter -= Time.deltaTime;

if (aim && !shot && Input.GetKeyUp (KeyCode.C) && shotDelayCounter <= 0) 
{
    shotDelayCounter = shotDelay;
    shot = true;
    aim = false;
    anim.SetTrigger ("shot");
    Instantiate (arrowPrefab, arrowSpawn.position, arrowSpawn.rotation);
}

Теперь ваш счетчик должен работать правильно, так как он всегда будет вызываться

person Matt L.    schedule 02.08.2017
comment
Радость... чистая... радость внутри прямо сейчас. Спасибо приятель. - person Joe Clark; 02.08.2017