在观察物体时,声音会多次播放

时间:2016-11-30 13:05:26

标签: c# unity3d

我正在raycasting了解unity3d并遇到音频问题。我正在做的是有Main Camera附加了一个名为NewCast的脚本。 Main Camera将光线投射到具有名为box collider的组件的多维数据集。当看到那个立方体时,光线投射工作正常。我正在播放声音。这意味着当观察该物体光线的相机被投射到立方体时。但是为什么音频会播放多次。我只想播放那个音频一次,当我看到那个对象并一次又一次地重复这个过程时。包linkPicture

代码:

public class NewCast : MonoBehaviour
{

    private RaycastHit hit;

    bool playAudio1;

    [SerializeField]
    private AudioSource source;

    [SerializeField]
    private AudioClip clip1;

    private void Start()
    {
        source.clip = clip1;
        playAudio1 = true;
    }

    private void Update()
    {
        if (Physics.Raycast(transform.position, transform.forward, out hit,9f))
        {

            if (hit.collider.gameObject.name == "Cube")
            {
                playAudio1 = false;

                if (!playAudio1)
                {
                    source.Play();

                    if (!source.isPlaying)
                    {
                        playAudio1 = true;

                    }
                }
            }

        }

    }

}

2 个答案:

答案 0 :(得分:1)

每次撞击器击中时,您都将playAudio1设置为false,这样下一个条件始终为真,因此声音将始终发挥......

if (Physics.Raycast(transform.position, transform.forward, out hit,9f))
{
    if (hit.collider.gameObject.name == "Cube"){
        if (!source.isPlaying){
            source.Play();
        }
    }
}

如果你想每次看对象只播放ONCE:

public class NewCast : MonoBehaviour
{


private RaycastHit hit;

bool soundPlayed = false;

[SerializeField]
private AudioSource source;


[SerializeField]
private AudioClip clip1;


private void Start()
{
    source.clip = clip1;
}

private void Update(){
    if(Physics.Raycast(transform.position, transform.forward, out hit,9f)){
        if (!soundPlayed && hit.collider.gameObject.name == "Cube"){
            if (!source.isPlaying){
                source.Play();
                soundPlayed = true;
            }
        }
    }else{
       if(soundPlayed) soundPlayed = false;
    } 
}

}

答案 1 :(得分:-1)

自从我使用Unity之后的某个时间,但是Unity中的 TransDateString 10-2003 01-2005 05-2012 设置为自动循环。检查具有AudioSource的脚本,并确保取消选中"正在循环播放"。 See the Unity Documentation

所以我猜到如果你把它添加到你的Start()函数中就可以了

AudioSource