Перезагрузка оружия, проблема

Программирование на Юнити.

Перезагрузка оружия, проблема

Сообщение NeatMan 02 авг 2011, 16:04

Привествую. Есть проблема с перезагрузкой оружия. В программирвоании новичок. Код ниже. Стреляет, после того как кончаются патроны, стрелять перестает, но не перезагружается.
Также прошу подсказки, как реализовать сопротивление воздуха для пуль. Заранее спасибо.
Синтаксис:
Используется csharp
using UnityEngine;
using System.Collections;

public class GunScript : MonoBehaviour {
        public Rigidbody projectile;
        public float speed = 20;
        public static float hitPower;
        public float mass = 0.5f;
    public int ammoCount = 30;
    public int ammoInMagazine = 30;
    public int magazineCount = 100;
    public int reloadTime = 3;
    bool isReloading = false;
        // Use this for initialization
        void Start () {
        hitPower = (mass * (speed * speed)) / 2;
        }

   
   
        void Update () {
        if (ammoCount == 0? false : true)
        {

            if (Input.GetButtonDown("Fire1"))
            {
                Rigidbody InstantiateProjectile = Instantiate(projectile, transform.position, transform.rotation) as Rigidbody;
                InstantiateProjectile.velocity = transform.TransformDirection(new Vector3(0, 0, speed));
                Physics.IgnoreCollision(InstantiateProjectile.collider, transform.root.collider);
                if (audio)
                {
                    audio.Play();
                }
                ammoCount--;
            }
           
        }

        if (Input.GetButtonDown("Reload") || ammoCount == 0)
        {
            if (magazineCount > 1 && !isReloading)
            {
                isReloading = true;
                Reload();
            }
        }
       
                }
    IEnumerator Reload()
    {
        yield return new WaitForSeconds(reloadTime);
        ammoCount = ammoInMagazine;
        magazineCount--;
        isReloading = false;
       
       
    }
NeatMan
UNец
 
Сообщения: 3
Зарегистрирован: 02 авг 2011, 15:59

Re: Перезагрузка оружия, проблема

Сообщение Paha 02 авг 2011, 19:21

Неправильный вызов сoroutine, должно быть так:

Синтаксис:
Используется csharp
            if (magazineCount > 1 && !isReloading)
             {
                 isReloading = true;
                 StartCoroutine(Reload());
             }
 
Paha
UNец
 
Сообщения: 30
Зарегистрирован: 01 авг 2011, 17:38

Re: Перезагрузка оружия, проблема

Сообщение NeatMan 02 авг 2011, 19:26

Paha писал(а):Неправильный вызов сoroutine, должно быть так:

Синтаксис:
Используется csharp
            if (magazineCount > 1 && !isReloading)
             {
                 isReloading = true;
                 StartCoroutine(Reload());
             }
 



Не работает, но все равно спасибо.
NeatMan
UNец
 
Сообщения: 3
Зарегистрирован: 02 авг 2011, 15:59

Re: Перезагрузка оружия, проблема

Сообщение Левш@ 03 авг 2011, 00:25

Этот код работает, на C# сами адаптируйте, я давненько это писал на Js.

Синтаксис:
Используется javascript
function Reload () {
         if ((magazin > 0) && (bulletsLeft < bulletsPerClip) && (!Input.GetButton ("Fire1")) && (!Input.GetButton ("Fire2"))) {
                 yield WaitForSeconds(waitTime);
                 animation.CrossFade("reload");
                 yield WaitForSeconds(waitTime);
                 audio.clip = soundReload;
                 audio.Play();
                 yield WaitForSeconds(reloadTime);
                 animation.CrossFade("idle");
          }
          if ((magazin > 0) && (bulletsLeft < bulletsPerClip) && (!Input.GetButton ("Fire1")) && (!Input.GetButton ("Fire2"))) {
                 magazin --;
                 bulletsLeft = bulletsPerClip;
         }
                 Gui();
                 reload = 1;
}


Ну и тут лежат демка и рабочие исходники оружия: viewtopic.php?f=13&t=3722
_X.cor.R (Prologue)
Аватара пользователя
Левш@
Адепт
 
Сообщения: 4073
Зарегистрирован: 14 окт 2009, 16:34
Откуда: IBERIA
Skype: bars_levsha
  • Сайт

Re: Перезагрузка оружия, проблема

Сообщение Berenold 03 авг 2011, 01:11

Вот рабочий вариант. Логика немного отличается но по комментариям думаю разберетесь. Если что не понятно задавайте вопросы отвечу

Синтаксис:
Используется csharp
using UnityEngine;
using System.Collections;

public class PlayerShoot : MonoBehaviour
{
        public AudioClip shotSoundAK47;      // Инициализация звука выстрела автомата
       
        bool pushFire = false;              // Переменная для проверки нажатия кнопки огня
        bool shoot = true;
        bool goTShoot = false;
        bool reload = false;                 // Переменная которая отвечает за перезарядку обоймы
        byte reloadCount = 0;                // Переменая в которой хранитса кол-во сделанх выстрелов
        float reloadTime = 3.0f;             // Время перезарядки обоймы
        float pShoot = 0.1f;                 // Интервал с которым производится выстрел
       
        void Update ()
        {
                CreateClon();
                TimeShoot();
                ReloadGan();
        }
       
        void CreateClon() // метод проверяющий нажата ли кнопка выстрела
        {
                if(Input.GetMouseButtonDown(0))
                {
                        pushFire = true;

                }
                else if(Input.GetMouseButtonUp(0))
                {
                        pushFire = false;
                }
               
                if (pushFire)
                {
                        PeriodicityShoot();
                }
        }
       
        void PeriodicityShoot() // Создание слона пули
        {
                {
                        if(shoot)
                        {
                        Instantiate(..., ..., ...); // создание клона пули в игре
                               
                                reloadCount ++;             // инкрементирум значение колличества выстрелов
                                audio.clip = shotSoundAK47; // Задаем нужный звук для проигрования звука выстрела
                                audio.Play();               // Проигрываем звук выстрела
                                shoot = false;              // Говорим о том что был произведен выстрел и больше пока стрелять нельзя
                                if(reloadCount<30)          // Проверяем не отстреляли ли мы все потроны в обойме
                                {
                                        goTShoot = true;        // Запускаем интревал для выстрела
                                }
                                else                        // Если да
                                {
                                        reload = true;          // сообщаем о том что мы отстреляли обойму  
                                }
                               
                        }
                }
        }
       
        void TimeShoot() // Метод интревала выстрела
        {
                if(goTShoot)
                {
                        pShoot -=Time.deltaTime;
                        if(pShoot <= 0)
                        {
                                pShoot = 0.1f;
                                shoot = true;
                                goTShoot = false;
                        }
                }
        }
       
        void ReloadGan() // Метод перезарядки обоймы
        {
                if(reload)
                {
                        reloadTime -= Time.deltaTime;
                        if(reloadTime <= 0)
                        {
                                reloadCount = 0;
                                reloadTime = 3.0f;
                                reload = false;
                                shoot = true;
                                ReloadGunGUI.showeMessage = false;
                        }
                }
        }
}
 
Невозможное возможно!
Аватара пользователя
Berenold
UNITрон
 
Сообщения: 151
Зарегистрирован: 31 июл 2010, 01:44
Откуда: Киев
  • Сайт

Re: Перезагрузка оружия, проблема

Сообщение NeatMan 03 авг 2011, 11:19

Левш@, Berenold
Спасибо.
NeatMan
UNец
 
Сообщения: 3
Зарегистрирован: 02 авг 2011, 15:59


Вернуться в Скрипты

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6