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 ответ
Решение
Я исправил это - возникла странная проблема с другой переменной, которая вызывалась из другого скрипта.
Код теперь работает нормально.