Воспроизвести звук при нажатии на клавишу «Пробел» (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);
}