Не проигрывается анимация перезарядки

Общие вопросы о Unity3D

Не проигрывается анимация перезарядки

Сообщение Gidly 18 ноя 2018, 09:30

Создал скрипт на систему стрельбы из оружия и в нем же написал код на перезарядку. Вот фрагмент:
Синтаксис:
Используется csharp
if (Input.GetKeyDown(KeyCode.R) || CurAmmo == 0 & AmmoCount != 0 & controller.OnAim == true )
        {
            GetComponent<AudioSource>().PlayOneShot(Reload);
            ReloadTimer = ReloadSpeed;
            AmmoCount -= Ammo;
            CurAmmo = Ammo;
            if (AmmoCount < 0) AmmoCount = 0;
            {
                if (ShootTimer > 0)
                {
                    ShootTimer -= Time.deltaTime;
                }
            }
            Personazh.GetComponent<Animator>().SetBool("Shooting", false);
            if (orsenal.Gun.activeSelf)
            {
                Personazh.GetComponent<Animator>().SetBool("GunReload", true);
            }
            else if (orsenal.M4A4.activeSelf)
            {
                Personazh.GetComponent<Animator>().SetBool("Shoot", true);
            }
            else if (orsenal.Shotgun.activeSelf)
            {
                Personazh.GetComponent<Animator>().SetBool("ReloadShot", true);
            }
        }

        else
        {
            Personazh.GetComponent<Animator>().SetBool("GunReload", false);
            Personazh.GetComponent<Animator>().SetBool("Shoot", false);
            Personazh.GetComponent<Animator>().SetBool("ReloadShot", false);
        }


На пистолете например всё работает отлично, то есть если текущее кол-во патронов в магазине = 0, то проигрывается анимация перезарядки. Но почему-то в случае с автоматом и дробовиком если я нахожусь в состоянии стрельбы, левая кнопка мыши нажата, и при этом кончаются патроны в магазине, то анимация не проигрывается. И что самое обидное, она проигрывается если вы медленно отстрелите все патроны.

Возможно дело в том, что в аниматоре на автомат и дробовик добавлена анимация стрельбы(bool Shooting), но я написал, что при перезарядке она будет равна false и всё равно такая же история!

Чтобы было понятнее, вот целый скрипт:
Синтаксис:
Используется csharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class AK : MonoBehaviour {

    GameObject ment;
    public ParticleSystem flash;
    public Transform pistol;
    public Text Text_ak;
    public Image crosshair;
    public AudioClip NullAmmo;
    public AudioClip Reload;
    public Animator_controller controller;
    public GameObject metalHit;
    public GameObject sandHit;
    public GameObject stoneHit;
    public GameObject[] meatHit;
    public GameObject woodHit;
    public GameObject Personazh;
    public MyOrsenal orsenal;
    public float ReloadTimer = 0.0f;
    public float ShootTimer = 0.0f;
    public float ShootSpeed;
    public float ReloadSpeed;
    public int AmmoCount = 420;
    public int CurAmmo = 30;
    public int Ammo = 30;

    void Start ()
    {
        ment = GameObject.FindGameObjectWithTag("Police");
        }
       

        void Update ()
    {
        Ray ray1 = Camera.main.ScreenPointToRay(new Vector3(Screen.width / 2, Screen.height / 2, 0f));
        RaycastHit hit1;
        if (Physics.Raycast(ray1, out hit1))
        {
            if(hit1.transform.gameObject.tag == "Police")
            {
                crosshair.color = new Color(1, 0, 0, 1);
            }
            else
            {
                crosshair.color = new Color(1, 1, 1, 1);
            }
        }

        Text_ak.text = CurAmmo + "/" + AmmoCount;
        if (Input.GetMouseButton(0) & CurAmmo > 0 & ReloadTimer <= 0 & ShootTimer <= 0 & controller.OnAim == true)
        {          
            CurAmmo = CurAmmo - 1;
            GetComponent<AudioSource>().PlayOneShot(NullAmmo);
            flash.Play();
            ShootTimer = ShootSpeed;
            Ray ray = Camera.main.ScreenPointToRay(new Vector3(Screen.width / 2, Screen.height / 2, 0f));
            RaycastHit hit;          
            if (Physics.Raycast(ray, out hit))
            {
                string Materialname = hit.collider.sharedMaterial.name;
                switch(Materialname)
                {
                    case "Metal":
                        SpawnDecal(hit, metalHit);
                        break;
                    case "Sand":
                        SpawnDecal(hit, sandHit);
                        break;
                    case "Stone":
                        SpawnDecal(hit, stoneHit);
                        break;
                    case "Wood":
                        SpawnDecal(hit, woodHit);
                        break;
                    case "Meat":
                        SpawnDecal(hit, meatHit[Random.Range(0, meatHit.Length)]);
                        break;
                }
                Personazh.GetComponent<Animator>().SetBool("Shooting", true);
                Ment ment = hit.collider.GetComponent<Ment>();
                if (ment != null)
                {
                    ment.HealthPolice -= 10;
                }
                Rigidbody r = hit.transform.gameObject.GetComponent<Rigidbody>();
                if (r != null)
                {
                    r.AddForceAtPosition(-hit.normal * 100f, hit.point);
                }
            }
        }
        else
        {
            Personazh.GetComponent<Animator>().SetBool("Shooting", false);
        }
        if (ShootTimer > 0)
        {
            ShootTimer -= Time.deltaTime;
        }

        if (Input.GetKeyDown(KeyCode.R) || CurAmmo == 0 & AmmoCount != 0 & controller.OnAim == true )
        {
            GetComponent<AudioSource>().PlayOneShot(Reload);
            ReloadTimer = ReloadSpeed;
            AmmoCount -= Ammo;
            CurAmmo = Ammo;
            if (AmmoCount < 0) AmmoCount = 0;
            {
                if (ShootTimer > 0)
                {
                    ShootTimer -= Time.deltaTime;
                }
            }
            Personazh.GetComponent<Animator>().SetBool("Shooting", false);
            if (orsenal.Gun.activeSelf)
            {
                Personazh.GetComponent<Animator>().SetBool("GunReload", true);
            }
            else if (orsenal.M4A4.activeSelf)
            {
                Personazh.GetComponent<Animator>().SetBool("Shoot", true);
            }
            else if (orsenal.Shotgun.activeSelf)
            {
                Personazh.GetComponent<Animator>().SetBool("ReloadShot", true);
            }
        }

        else
        {
            Personazh.GetComponent<Animator>().SetBool("GunReload", false);
            Personazh.GetComponent<Animator>().SetBool("Shoot", false);
            Personazh.GetComponent<Animator>().SetBool("ReloadShot", false);
        }

        if (ReloadTimer > 0)
        {
            ReloadTimer -= Time.deltaTime;
        }
    }
    public void SpawnDecal(RaycastHit hit, GameObject decal)
    {
        GameObject spawnDecal = GameObject.Instantiate(decal, hit.point, Quaternion.LookRotation(hit.normal));
        spawnDecal.transform.SetParent(hit.collider.transform);
        Destroy(spawnDecal.gameObject, 30f);
    }
}
 
Аватара пользователя
Gidly
UNIт
 
Сообщения: 61
Зарегистрирован: 07 июл 2018, 19:20
Откуда: Из Бангладеша

Re: Не проигрывается анимация перезарядки

Сообщение KanycTa 18 ноя 2018, 10:41

Синтаксис:
Используется csharp
if (orsenal.Gun.activeSelf)
            {
                Personazh.GetComponent<Animator>().SetBool("GunReload", true);
            }
            else if (orsenal.M4A4.activeSelf)
            {
                Personazh.GetComponent<Animator>().SetBool("Shoot", true);
            }
            else if (orsenal.Shotgun.activeSelf)
            {
                Personazh.GetComponent<Animator>().SetBool("ReloadShot", true);
            }


просто ору
Аватара пользователя
KanycTa
UNIт
 
Сообщения: 107
Зарегистрирован: 25 июл 2018, 18:41
Откуда: г. Ульяновск
  • Сайт

Re: Не проигрывается анимация перезарядки

Сообщение Gidly 18 ноя 2018, 17:38

KanycTa писал(а):
Синтаксис:
Используется csharp
if (orsenal.Gun.activeSelf)
            {
                Personazh.GetComponent<Animator>().SetBool("GunReload", true);
            }
            else if (orsenal.M4A4.activeSelf)
            {
                Personazh.GetComponent<Animator>().SetBool("Shoot", true);
            }
            else if (orsenal.Shotgun.activeSelf)
            {
                Personazh.GetComponent<Animator>().SetBool("ReloadShot", true);
            }


просто ору


Ну да, я пишу быдлокод, я же еще учусь
Аватара пользователя
Gidly
UNIт
 
Сообщения: 61
Зарегистрирован: 07 июл 2018, 19:20
Откуда: Из Бангладеша

Re: Не проигрывается анимация перезарядки

Сообщение KanycTa 18 ноя 2018, 17:55

Ну да, я пишу быдлокод, я же еще учусь


http://govnokod.ru/ - ну хоть сюда выложите
Аватара пользователя
KanycTa
UNIт
 
Сообщения: 107
Зарегистрирован: 25 июл 2018, 18:41
Откуда: г. Ульяновск
  • Сайт


Вернуться в Общие вопросы

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

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