2015-02-02 2 views
0

Я попытался написать метод, который может добавить любое количество звуков, которые будут воспроизводиться поочередно с заданным интервалом.Чередование звуков во время простоя

Но проблема в том, что он работает непоследовательно. То есть:

  • звук воспроизводится перед может повторяться несколько раз через некоторое время
  • нет очереди звуков, и так далее.

Я думаю, проблема в том, что int i в цикле постоянно обновляется, поэтому приоритета нет. Но после того, как он установил чек и опустил int i, он вообще прекратил играть.

using UnityEngine; 
using System.Collections; 

public class OneShot : MonoBehaviour { 
    public AudioClip[] Sounds; 
    public float Timer; 
    private float TimerDown; 

    void Start() 
    { 
     TimerDown = Timer; 
     audio.clip = Sounds[0]; 
     audio.Play(); 
    } 

    void Update() 
    { 
     int i; 
     for(i = 1;i < Sounds.Length;i++) 
     { 
     if(TimerDown > 0) TimerDown -= Time.deltaTime; 
     if(TimerDown < 0) TimerDown = 0; 
     if(TimerDown == 0) 
      { 
      TimerDown = Timer; 
      audio.clip = Sounds[i]; 
      audio.Play(); 
      } 
     else 
      { 
       i=i-1; 
      } 
     } 
    } 

} 

ответ

0

Здесь не следует использовать петлю for. С вашим кодом вы уменьшаете свой TimerDown для каждого AudioClip в вашем массиве. Вы должны делать только TimerDown -= Time.deltaTime один раз за обновление.

Вместо этого вы можете сохранить i (индекс) вне цикла обновления.

private int i = 0; 

void Update() 
{ 
    if(TimerDown > 0) TimerDown -= Time.deltaTime; 
    if(TimerDown < 0) TimerDown = 0; 
    if(TimerDown == 0) 
    { 
     TimerDown = Timer; 
     audio.clip = Sounds[i % Sounds.Length]; 
     i++; 
     audio.Play(); 
    } 
} 
+0

Ничего себе! Спасибо! Это работает! =))) Я продолжу преподавать C++: D –

Смежные вопросы