Как мне заставить аудио воспроизводиться с помощью GetComponent? (Unity, C #)

#c# #unity3d #audio

#c# #unity3d #Аудио

Вопрос:

Я создаю версию minesweeper в Unity с C # для проекта, в котором разные звуки воспроизводятся одним кадром в зависимости от того, какое число находится внутри поля, которое вы нажимаете (рядом с каждой бомбой, например, «1» будет играть мажорный аккорд, «2» — минорный аккорд и т.д.)

Часть моего кода, относящаяся к этому:

 // Different Textures
public Sprite[] emptyTextures;
public Sprite mineTexture;
public AudioSource myFx;
public AudioClip[] audioFiles;

// Load another texture
public void loadTexture(int adjacentCount)
{
    if (mine)
        GetComponent<SpriteRenderer>().sprite = mineTexture;
    else
        GetComponent<SpriteRenderer>().sprite = emptyTextures[adjacentCount];
}
 

Кажется, я не могу заставить звук работать. Я предполагаю, что это будет что-то вроде этого?

 GetComponent<SpriteRenderer>().sprite = emptyTextures[adjacentCount];
GetComponent<AudioSource>().clip = audioFiles[adjacentCount];
 

Но я просто продолжаю получать ошибки. Я очень новичок в C #, поэтому буду признателен за любую помощь. Спасибо! 🙂

p.s. Я использовал этот учебник для его создания: https://noobtuts.com/unity/2d-minesweeper-game

Редактировать: ошибки:

 MissingComponentException: There is no 'AudioSource' attached to the "default" game object, but a script is trying to access it.
 

Существует источник звука (myFx), но когда я затем удаляю его и добавляю источник звука непосредственно в gameobject, я не получаю ошибок, но звук не воспроизводится.

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

1. Можете ли вы отредактировать свой пост с учетом ошибок, которые вы получаете? Также вы присваиваете аудиофайлы общедоступной переменной и добавляете компонент AudioSource в gameobject?

2. Добавил их, но, похоже, Мартин решил мою проблему! В любом случае спасибо, что посмотрели 🙂

Ответ №1:

Вы на правильном пути — вы указываете клип, с которым хотите воспроизвести

 GetComponent<AudioSource>().clip = audioFiles[adjacentCount];
 

Единственное, что осталось сделать, это фактически воспроизвести клип, вызвав

 GetComponent<AudioSource>().Play();
 

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

1. Боже мой!!!! Я ломал голову в течение 2 часов, пытаясь понять это. Огромное тебе спасибо, Мартин!