Звуки

Воспроизвести звук при нажатии на клавишу «Пробел» (Space)

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class music : MonoBehaviour
{
 AudioSource audio;
    void Start()
    {
        audio = GetComponent<AudioSource>();
    }

    void Update()
    {
        if(Input.GetKeyDown(KeyCode.Space)
          {
          audio.Play();
          }
    }
}

Приведенный выше скрипт может быть использован только в том случае, если ваш AudioSource запускает лишь одну мелодию, но в игре много различных звуков, поэтому в бой вступают переменные AudioClip. Рассмотрим пример, в котором при нажатии на разные кнопки клавиатуры запускаются различные звуки:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class music : MonoBehaviour
{
 AudioSource audio;
 public AudioClip step;
 public AudioClip jump;
 public AudioClip run;

    void Start()
    {
        audio = GetComponent<AudioSource>();
    }

    void Update()
    {
        if(Input.GetKeyDown(KeyCode.W)
          {
          audio.clip = step;
	  move1.Play();
          }
        if(Input.GetKeyDown(KeyCode.E)
          {
          audio.clip = jump;
	  move1.Play();
          }
        if(Input.GetKeyDown(KeyCode.R)
          {
          audio.clip = run;
	  move1.Play();
          }
    }
}

Представьте ситуацию, в которой событие будет вызываться каждый игровой кадр, а с этого события стартует ваш звук. Таким образом, звук также будет стартовать каждый игровой кадр. В итоге, он так и не доиграет до конца. Чтобы этого не происходило, давайте выполним проверку на то, что звуковой клип включен, и если это так, то новый звук включаться не будет пока не доиграет предыдущий:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class music : MonoBehaviour
{
 AudioSource audio;
 public AudioClip step;
    void Start()
    {
        audio = GetComponent<AudioSource>();
    }

    void Update()
    {
        if(Input.GetKeyDown(KeyCode.W)
          {
         if (!move1.isPlaying)
				{
					audio.clip = step;
					audio.Play();
				}
          }
     
    }
}

Записываем звуковые сэмплы в массив переменных sample. Данный скрипт вешается на объект с компонентом AudioSource. Значение переменных будет реагировать на воспроизводимый клип.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class audio : MonoBehaviour
{
    AudioSource klip;
    public float[] sample = new float[512];

    void Start()
    {
        klip = GetComponent<AudioSource>();
    }

 
    void Update()
    {
        klip.GetSpectrumData(sample, 0, FFTWindow.Blackman);
    }