混合树声音重叠的Unity动画事件

时间:2018-09-30 15:38:01

标签: unity3d

我有一个简单的2d混合树,其中包含4个动画,每个动画都有2个动画事件,所有动画都具有相同的名称:Step。脚本上的函数Step()会播放脚步声。我的问题是声音重叠。 我该如何解决?

3 个答案:

答案 0 :(得分:0)

重叠是什么意思?如果您希望声音分开播放(即使同时播放),则应该有多个AudioSource

如果要使用相同的AudioSource,则需要替换当前的音频片段或等待旧的声音播放完新声音(但它将与动画不同步)。

答案 1 :(得分:0)

好了,很简单,但是我累了,需要休息一下xD。 只需使用是否允许播放声音即可:

if(Time.time - lastTime >= duration)
        {
            lastTime = Time.time;
            FindObjectOfType<AudioManager>().Play("Footstep");
        }

答案 2 :(得分:0)

您可以沿 Z 轴和 X 轴拆分步骤事件。当您的字符沿 Z 轴移动时,调用一种方法,如果字符沿 X 轴移动 - 另一种方法。 您可以沿着 Z 轴和 X 轴获得速度,并像下面的代码一样制作一些逻辑。

我有 2d 混合树和 4 个动画剪辑,在我的例子中代码如下所示:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[RequireComponent(typeof(AudioSource))]
public class FootstepSound : MonoBehaviour
{

public AudioClip leftStep, rightStep;
[Range(0, 1f)]
public float footStepsVolume = 1f;
private AudioSource _audioSource;
Animator _anim;


private void Start()
{
    _audioSource = GetComponent<AudioSource>();
    _anim = GetComponent<Animator>();
    
}
public void stepLeft()
{

    if (_anim.GetFloat("DeltaX") == 0 && _anim.GetFloat("DeltaZ") != 0)
        _audioSource.PlayOneShot(leftStep, footStepsVolume);

}
public void stepRight()
{
    if (_anim.GetFloat("DeltaX") == 0 && _anim.GetFloat("DeltaZ") != 0)
        _audioSource.PlayOneShot(rightStep, footStepsVolume);
}
public void strafeLeft()
{
    if (_anim.GetFloat("DeltaX") != 0)
        _audioSource.PlayOneShot(leftStep, footStepsVolume);

}
public void strafeRight()
{
    if (_anim.GetFloat("DeltaX") != 0)
        _audioSource.PlayOneShot(rightStep, footStepsVolume);
}
}