Unity запрещает воспроизведение звука для всех объектов с одинаковым именем

#c# #unity3d

#c# #unity-игровой движок

Вопрос:

проблема в том, что когда я нажимаю на один объект, все остальные объекты (с тем же именем, что и у этого объекта) издают звук.

Это код, который я использую:

 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");
        }
    }  
}
  

Как запретить воспроизведение звука для всех объектов?

Комментарии:

1. Я не думаю, что это связано с этим скриптом. Потому что вы уже используете OnMouseOver . Также вам не обязательно использовать this . GameObject уже ссылается на тот объект, к которому прикреплен скрипт. Либо у вас проблемы с вашими коллайдерами, либо что-то не так с вашим SoundManagerScript

2. Попробуйте поместить Debug.Log(gameObject.name) строку в OnMouseOver метод и посмотреть, сколько из них срабатывает при наведении курсора мыши на объект.

3. Ну, еще одна проблема, которую вы используете Input.GetMouseButton , поэтому это будет вызываться несколько раз. Вы могли бы рассмотреть возможность изменения его на Input.GetMouseButtonDown .

4. Что ж, это сработало, спасибо!

5. @AliKanat ты должен сделать это ответом, чем 😉

Ответ №1:

Преобразование моего комментария в ответ. Проблема в скрипте связана с пользовательским вводом.

Input.GetMouseButton возвращает, нажата ли данная кнопка мыши. Следовательно, ваш оператор if имеет значение true, пока мышь удерживается нажатой. Это причина, по которой у вас постоянно воспроизводится несколько звуков, потому что вы Input.GetMouseButton возвращаете true в нескольких кадрах во время взаимодействия.

Вместо этого Input.GetMouseButtonDown следует использовать. Поскольку это возвращает true в кадре, пользователь нажал указанную кнопку мыши. При удерживании мыши будет возвращено значение false. Следовательно, при нажатии мыши значение true будет возвращено только один раз.

Ответ №2:

вы всегда можете попробовать настроить массив этих объектов, содержащих звук, а затем отключить их все одновременно.

 public gameObject[] itemsWithSound;

for(int i = 0; i < itemsWithSound.length; i  )
{
     itemsWithSound.SoundManagerScript.StopSound();
}