#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();
}