AudioSource.Play() не работает в Enumerator

У меня есть Enumerator для эффектов, которые вы играете, когда стреляете из пистолета. Это:

private IEnumerator ShotEffect()
    {
        gunAudio.Play();

        laserLine.enabled = true;

        yield return shotDuration;

        laserLine.enabled = false;
    }

Когда я возьму gunAudio.Play() код работает нормально. Однако, когда я добавляю его, звук не воспроизводится и линия не отключается. Я предполагаю, что есть проблема с shotDuration?

Переменная gunAudio дается аудио компонент в начале, и shotDuration это ожидание секунд.

РЕДАКТИРОВАТЬ:

Кроме того, если я установил его для воспроизведения без сна, он играет. Поэтому я думаю, что есть проблема с кодом, а не с компонентом.

Вот где я называю счетчик:

if (Input.GetKey(KeyCode.Mouse0) && Time.time > nextFire) 
        {

            torsoDamage = (int)Random.Range(50f, 70f);
            legDamage = (int)Random.Range(20f, 30f);
            handDamage = (int)Random.Range(5f, 15f);
            nextFire = Time.time + fireRate;
            StartCoroutine (ShotEffect());
            Vector3 rayOrigin = fpsCam.ViewportToWorldPoint (new Vector3(0.5f, 0.5f, 0.0f));
            RaycastHit hit;
            laserLine.SetPosition (0, gunEnd.position);
            if (Physics.Raycast (rayOrigin, fpsCam.transform.forward, out hit, weaponRange))
            {
                laserLine.SetPosition (1, hit.point);
                if (enemyAi.enemy_currentHealth != null)
                {                                       
                        if (hit.collider.gameObject.tag == "head")
                        {                   
                                enemyAi.Damage(100);
                        }
                        if (hit.collider.gameObject.tag == "torso")
                        {
                            enemyAi.Damage(torsoDamage);
                        }
                        if (hit.collider.gameObject.tag == "leg" || hit.collider.gameObject.tag == "arm")
                        {
                            enemyAi.Damage(legDamage);
                        }
                        if (hit.collider.gameObject.tag == "hand" || hit.collider.gameObject.tag == "foot")
                        {
                            enemyAi.Damage(handDamage);
                        }
                }

                if (hit.rigidbody != null)
                {
                    hit.rigidbody.AddForce (-hit.normal * hitForce);
                }
            }
            else
            {
                laserLine.SetPosition (1, gunEnd.position + (fpsCam.transform.forward * weaponRange));
            }
        }

1 ответ

Решение

Я исправил это - возникла странная проблема с другой переменной, которая вызывалась из другого скрипта.

Код теперь работает нормально.

Другие вопросы по тегам