Задать вопрос
@NattRiy1

Как сделать счётчик патронов у автомата в Unity?

У меня на сцене есть калаш, на котором висит скрипт
using UnityEngine;
using System.Collections;
using System.Collections.Generic;

public class Ak12 : MonoBehaviour
{
    private Animator anim;

    [SerializeField] private int TotalAmmo = 120;

    [SerializeField] private int AmmoNeedToReload = 30;

    public float range = 100f;

    public float FireRate = 15f;

    public float NextTimeToFire = 0f;

    [SerializeField] private int ammo = 30;

    public Camera fpsCam;

    void Start()
    {
        anim = GetComponent<Animator>();
    }

    void Update()
    {
        if (Input.GetButton("Fire1") && ammo > 0 && ammo != 0)
        {
            Shoot();
            NextTimeToFire = Time.time + 1f / FireRate;
            StartCoroutine(AmmoMinus());
        }

        if (Input.GetKey(KeyCode.R) && ammo < 30)
        {
            anim.SetBool("Reload", true);
        }
    }

    private void Reload()
    {
        AmmoNeedToReload -= ammo;
        TotalAmmo -= AmmoNeedToReload;
        AmmoNeedToReload = 30;
        ammo = 30;
    }

    private void AnimToggle()
    {
        anim.SetBool("Reload", false);
    }


    private void Shoot()
    {
        ammo -= 1;
        RaycastHit hit;
        if (Physics.Raycast(fpsCam.transform.position, fpsCam.transform.forward, out hit, range))
        {
            Debug.Log(hit.transform.name);
            if(hit.transform.tag == "box")
            {
                hit.transform.SendMessage("TakeDamageAk12");
            }
        }
    }

Как сделать счётчик патронов в магазине, проблема в том, что метод Shoot() вызывается много раз, из-за этого выстреливаются сразу все патроны, как сделать чтобы патроны вылетали по одному?
  • Вопрос задан
  • 26 просмотров
Подписаться 1 Средний Комментировать
Пригласить эксперта
Ответы на вопрос 1
GavriKos
@GavriKos Куратор тега Unity
if (Input.GetButton("Fire1") && ammo > 0 && ammo != 0)
        {
            Shoot();
            NextTimeToFire = Time.time + 1f / FireRate;
            StartCoroutine(AmmoMinus());
        }


Ну так у вас скорострельность равна FPS по сути.
Добавляйте паузу между выстрелами - если с предыдущего выстрела прошло достаточно времени - делать следующий. Причем судя по NextTimeToFire попытки были - но переменная то в проверке не участвует
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы