Unity, как сделать звук по кнопке (прочитайте текст)?

Для добавления звука при нажатии кнопки в Unity на платформе Android, существует несколько способов. Рассмотрим их подробнее.

1. Использование компонента AudioSource:
Первым способом является использование компонента AudioSource вместе с компонентом Button. Вам необходимо привязать звук к AudioSource, и установить его в поле OnClick каждой кнопки. Подробная инструкция по настройке компонентов AudioSource и Button приведена ниже:

- Создайте пустой объект и добавьте на него компонент AudioSource.
- Убедитесь, что у вас есть аудиофайл (например, .mp3 или .wav), который вы хотите воспроизводить при нажатии кнопки. Скопируйте этот файл в вашу папку Assets.
- Выберите кнопку, к которой хотите добавить звук, и добавьте компонент Button на пустой объект.
- У вас должны появиться два поля, одно из которых называется "On Click ()". Перетащите ваш пустой объект с AudioSource в это поле.
- В поле события "On Click ()" выберите функцию, которую вы хотите вызывать при нажатии на кнопку, например, функцию PlaySound.
- Создайте новый скрипт, добавьте функцию PlaySound и придайте ему нужное поведение воспроизведения звука. Вот пример кода:

using UnityEngine;

public class SoundButton : MonoBehaviour
{
    public AudioSource audioSource;
    public AudioClip audioClip;

    public void PlaySound()
    {
        audioSource.PlayOneShot(audioClip);
    }
}

Здесь вы можете привязать компонент AudioSource и аудиофайл к переменным audioSource и audioClip соответственно.

2. Использование встроенного класса SoundPool:
Второй способ состоит в том, чтобы использовать встроенный класс SoundPool, предоставляемый Android SDK. Для этого вам понадобится написать код на языке Java (или Kotlin) и создать мост (bridge) между Unity и Android.
Вот пример класса Java, который можно использовать для воспроизведения звука с помощью SoundPool:

import android.content.Context;
import android.media.AudioAttributes;
import android.media.AudioManager;
import android.media.SoundPool;
import android.os.Build;

public class SoundPlayer {
    private SoundPool soundPool;
    private int soundId;

    public SoundPlayer(Context context, int soundResourceId) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            AudioAttributes attributes = new AudioAttributes.Builder()
                    .setUsage(AudioAttributes.USAGE_GAME)
                    .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
                    .build();

            soundPool = new SoundPool.Builder()
                    .setMaxStreams(1)
                    .setAudioAttributes(attributes)
                    .build();
        } else {
            soundPool = new SoundPool(1, AudioManager.STREAM_MUSIC, 0);
        }

        soundId = soundPool.load(context, soundResourceId, 1);
    }

    public void playSound() {
        soundPool.play(soundId, 1f, 1f, 1, 0, 1f);
    }
}

Данный класс создает экземпляр SoundPool и загружает аудиофайл по его ресурсному идентификатору. Функция playSound воспроизводит звук.

Для вызова метода playSound из Unity вам нужно создать мост между Unity и Android, который позволяет вызывать методы Java из C#. Вот пример кода C#:

using UnityEngine;

public class SoundButton : MonoBehaviour
{
    private AndroidJavaObject soundPlayer;

    private void Start()
    {
        soundPlayer = new AndroidJavaObject("com.example.soundplayer.SoundPlayer", GetSoundResourceId());
    }

    public void PlaySound()
    {
        soundPlayer.Call("playSound");
    }

    private int GetSoundResourceId()
    {
        // Здесь вы можете использовать функцию, чтобы определить
        // ресурсный идентификатор аудиофайла для вашего звука
        return R.raw.my_sound;
    }
}

Обратите внимание, что вы должны указать полное имя пакета с вашим Java-классом в строке new AndroidJavaObject("com.example.soundplayer.SoundPlayer"), идентификатор ресурса аудиофайла должен быть получен с помощью функции GetSoundResourceId.

Затем привяжите функцию PlaySound к свойству OnClick вашей кнопки в Unity, используя компонент Button, как в первом способе.

Оба способа запускают звуковой эффект при нажатии кнопки в Unity на платформе Android. Выберите тот, который лучше всего соответствует вашим потребностям и ожиданиям.