Как изменить скорострельность при автоматической стрельбе? - PullRequest
1 голос
/ 20 апреля 2019
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Shooting : MonoBehaviour
{
    [SerializeField]
    private Transform[] firePoints;
    [SerializeField]
    private Rigidbody projectilePrefab;
    [SerializeField]
    private float launchForce = 700f;
    [SerializeField]
    private Animator anim;
    [SerializeField]
    private bool automaticFire = false;

    private void Start()
    {
        anim.SetBool("Shooting", true);

    }

    public void Update()
    {
        if (Input.GetButtonDown("Fire1") && automaticFire == false)
        {
            if (anim.GetBool("Shooting") == true)
            {
                anim.Play("SHOOTING");
                LaunchProjectile();
            }
        }

        if(automaticFire == true)
        {
            anim.Play("SHOOTING");
            LaunchProjectile();
        }
    }

    private void LaunchProjectile()
    {
        foreach (var firePoint in firePoints)
        {
            Rigidbody projectileInstance = Instantiate(
                projectilePrefab,
                firePoint.position,
                firePoint.rotation);

            projectileInstance.AddForce(new Vector3(0,0,1) * launchForce);

            projectileInstance.gameObject.AddComponent<BulletDestruction>().Init();
        }
    }
}

Если он автоматический:

if(automaticFire == true)
        {
            anim.Play("SHOOTING");
            LaunchProjectile();
        }

Он стреляет без остановки, но выглядит как одна длинная пуля.Если, например, я хочу, чтобы он стрелял без перерыва, но только одна пуля каждый раз?Или выстрелили много пуль, но с небольшим промежутком между ними?

На каждую пулю я добавляю следующий скрипт уничтожения:

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class BulletDestruction : MonoBehaviour
{
    // Start is called before the first frame update
    public void Init()
    {
        StartCoroutine(DestroyBullet());
    }

    IEnumerator DestroyBullet()
    {
        yield return new WaitForSeconds(0.2f);

        Destroy(gameObject);
    }
}

Но это тоже проблема.Если я устанавливаю задержку уничтожения равной 0,2, расстояние стрельбы пулями будет очень коротким, но если я установлю время задержки, например, на 5, пули будут стрелять на большее расстояние, но опять же будет много пуль водновременно.

Какая логика на уничтожение и автоматический режим?И как мне это сделать в скрипте / с?

1 Ответ

2 голосов
/ 20 апреля 2019

Вы можете попробовать это:

float attackRate = 100;
float timer = 0;

public void Update()
{
    timer -= Time.deltaTime;
    if(automaticFire && timer <=0)
    {
         Shoot();
         timer = 1/ attackRate;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...