Unity中一个容易忽视的问题:Unity没有嵌入式循环点的概念。如果你将smpl chunk循环标记写入WAV文件(这是Godot和大多数采样器读取的格式),Unity会忽略它们。AudioSource.loop只会将整个片段包裹起来。这对于干燥循环来说是可以接受的,但如果你的音乐有任何回声衰减,包裹整个片段会将尾部切断,你会在循环点处听到缝隙,即使你的循环点是样本精确的。有效的方法是使用两个AudioSource而不是一个:分别给每个AudioSource设置同一片段。播放声音A,并在A继续播放时,使用PlayScheduled将声音B预定在循环点开始时播放。然后交替播放。重叠是隐藏缝隙的关键,因为之前的循环仍在衰减,而下一个循环刚开始时仍在重叠。两个细节非常重要:使用AudioSettings.dspTime进行预定,而不是Time.time或协程。DSP时钟是样本精确的,不会在长时间会话中漂移。预定下一个循环早点,几秒钟之前,而不是在切换时。PlayScheduled会准确地排队它,但你希望在截止日期之前进行呼叫。对于更简单的情况,另一个选择是将尾部重新烘焐到文件头部,如此便可使用普通的AudioSource.loop循环片段,无需任何脚本。灵活性较低,但它在任何地方都有效。