Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 统一防止为具有相同名称的所有对象播放声音_C#_Unity3d - Fatal编程技术网

C# 统一防止为具有相同名称的所有对象播放声音

C# 统一防止为具有相同名称的所有对象播放声音,c#,unity3d,C#,Unity3d,问题是,当我单击一个对象时,所有其他对象(与该对象同名)都会发出声音 这是我正在使用的代码: void OnMouseOver() { if (Input.GetMouseButton(0)) { if (this.gameObject.name == "door") { anim.SetBool("open", !(anim.GetBool("open"))); SoundManagerScript

问题是,当我单击一个对象时,所有其他对象(与该对象同名)都会发出声音

这是我正在使用的代码:

void OnMouseOver()
{
    if (Input.GetMouseButton(0))
    {
        if (this.gameObject.name == "door")
        {
            anim.SetBool("open", !(anim.GetBool("open")));
            SoundManagerScript.PlaySound("door");
        }

        if (this.gameObject.name == "window")
        {
            anim.SetBool("open", !(anim.GetBool("open")));
            SoundManagerScript.PlaySound("window");
        }
    }  
}

如何防止为所有对象播放声音?

您可以尝试设置一组包含声音的对象,然后同时关闭所有对象

public gameObject[] itemsWithSound;

for(int i = 0; i < itemsWithSound.length; i++)
{
     itemsWithSound.SoundManagerScript.StopSound();
}
publicgameobject[]itemsWithSound;
for(int i=0;i
您可以尝试设置一组包含声音的对象,然后同时关闭所有对象

public gameObject[] itemsWithSound;

for(int i = 0; i < itemsWithSound.length; i++)
{
     itemsWithSound.SoundManagerScript.StopSound();
}
publicgameobject[]itemsWithSound;
for(int i=0;i
将我的评论转换为答案。脚本中的问题与用户输入有关

Input.GetMouseButton
返回是否按住给定的鼠标按钮。因此,按住鼠标时,if语句为true。这就是为什么有许多声音连续播放的原因,因为您
Input。在交互过程中,GetMouseButton
在多个帧上返回true


相反,应使用
Input.GetMouseButtonDown
。因为它在帧上返回true,所以用户按下了给定的鼠标按钮。按住鼠标时,它将返回false。因此,当按下鼠标时,它只会返回true一次。

将我的评论转换为答案。脚本中的问题与用户输入有关

Input.GetMouseButton
返回是否按住给定的鼠标按钮。因此,按住鼠标时,if语句为true。这就是为什么有许多声音连续播放的原因,因为您
Input。在交互过程中,GetMouseButton
在多个帧上返回true


相反,应使用
Input.GetMouseButtonDown
。因为它在帧上返回true,所以用户按下了给定的鼠标按钮。按住鼠标时,它将返回false。因此,当按下鼠标时,它只会返回true一次。

我认为这与此脚本无关。因为您已经在mouseover上使用了
OnMouseOver
。此外,您不必使用
。gameObject已经指向脚本附加到的对象。您的碰撞器有问题,或者您的
SoundManagerScript
有问题,请尝试放置
Debug.Log(gameObject.name)
OnMouseOver方法中的行,并查看当您悬停一个对象时,其中有多少个会触发。另外一个问题是您使用的是
Input.GetMouseButton
,因此这将被多次调用。你可以考虑把它改为<代码>输入。GoMouthButoNo.。好的,谢谢!AliKanat你应该回答这个问题;)我认为这与这个剧本无关。因为您已经在mouseover上使用了
OnMouseOver
。此外,您不必使用
。gameObject已经指向脚本附加到的对象。您的碰撞器有问题,或者您的
SoundManagerScript
有问题,请尝试放置
Debug.Log(gameObject.name)
OnMouseOver方法中的行,并查看当您悬停一个对象时,其中有多少个会触发。另外一个问题是您使用的是
Input.GetMouseButton
,因此这将被多次调用。你可以考虑把它改为<代码>输入。GoMouthButoNo.。好的,谢谢!AliKanat你应该回答这个问题;)