やりたいこと
- ボタンが押されたら1発だけ音を鳴らす
- スクリプトからSEを鳴らす方法
ボタンが押されたら1発だけ音を鳴らす
ボタンのクリック音を鳴らしたいときなどに使います。
やり方
1.空のゲームオブジェクトを作成
2.「Audio Source」コンポーネントをアタッチ
3.音を鳴らしたいボタン側に「Event Trigger」コンポーネントをアタッチ
4.「Add New Event Type」をクリック
5.「Pointer Down」(ボタンが押されたら音を鳴らす)を選択
5.左下の枠に 1 のオブジェクトをアサイン
6.鳴らしたいSEを右下の枠にアサイン
7.右上のプルダウンで「AudioSource.PlayOneShot」(SEを1発だけ鳴らすもの)を選択
以上です。
スクリプトからSEを鳴らす方法
事前に上の手順の1と2までは終わらせておきます。
それ以降の操作は鳴らし方によって異なります。
スクリプト
こちらは、左矢印キーが押されたときにSEを1回鳴らすという想定で用意しました。
「Audio Source」コンポーネントを追加してあるオブジェクトにアタッチして使います。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class SETest : MonoBehaviour {
public AudioClip _se1;
AudioSource _audioSource;
void Start () {
_audioSource = GetComponent<AudioSource>(); //Componentを取得
}
void Update () {
if (Input.GetKeyDown (KeyCode.LeftArrow))
{
_audioSource.PlayOneShot(_se1); //音(_se1)を鳴らす
}
}
}
余談「上記のスクリプトを使いこなす」
スクリプトから鳴らすのであれば、public AudioClip _se1;
の行を量産してInspectorからアサインしていけば複数のSEも一括で管理できそうですね。
音を鳴らしたいオブジェクトひとつひとつにSEのファイルをアサインしていくのは少々手間なので、うまく使えるといいかもしれないなと思いました。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class SETest : MonoBehaviour {
public AudioClip _se1;
public AudioClip _se2;
AudioSource _audioSource;
void Start () {
_audioSource = GetComponent<AudioSource>(); //Componentを取得
}
void Update () {
KeyDownPlay();
}
// キーが押されたら音を鳴らす
public void KeyDownPlay(){
if (Input.GetKeyDown (KeyCode.LeftArrow))
{
_audioSource.PlayOneShot(_se1);
}
if (Input.GetKeyDown (KeyCode.Space))
{
_audioSource.PlayOneShot(_se2);
}
}
// ボタンを押したら音を鳴らす
// ※このやり方をする場合EventTriggerは不要です。ボタンを押したらこの関数を呼び出すようにしてください
public void PlaySE1(){
_audioSource.PlayOneShot(_se1);
}
}
最後に
シーン遷移同様、SEもできるだけ楽に、また簡単に管理できるよう心がけていきたいと思います。
AudioSourceやEventTriggerに対する知識がまだ少ないので、そこはまたこれから別の記事でまとめられたらいいかなと思っています。実装だけでなくパラメーター調整の方も知りたいという方はもう少々お待ちくださいませ。