audio - 时间流逝的声音交替

标签 audio time unity3d

我试图编写一种方法,该方法可以添加以指定间隔依次播放的任意数量的声音。

但是问题在于它工作不一致。那是:

  • 之前播放的声音可能会在一段时间后重复几次
  • 没有声音队列,依此类推。

  • 我认为问题在于循环中的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;
                }
            }
        }
    
    }
    

    最佳答案

    您不应在此处使用for循环。使用您的代码,您将减少数组中每个AudioClip的TimerDown。每次更新您只应执行一次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();
        }
    }
    

    关于audio - 时间流逝的声音交替,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28280274/

    相关文章:

    html - 更改 HTML5 音频节点的音高

    c++ - 在 Linux 中获取自纪元以来的秒数

    c - ARM Cortex M4 处理器中耗时的测试 C 代码中出现错误 SEGV

    c# - 轻按几下如何修复?

    c# - 计算反射弧

    android - 什么编解码器用于 android 中 AudioRecord.read() 的音频数据

    audio - .wav文件全部为1's or -1'会发生什么?

    javascript - 自动播放音频HTML元素

    mysql - 每天统计消息数(17 :00 counts for next day) 之后

    c# - 即使有私有(private)字段也强制使用私有(private)属性(property)?