ボタンから音を鳴らす方法(スクリプト無し)
離した瞬間に鳴らす場合
1. 音源ファイルの準備
- 鳴らしたいSEをプロジェクトに追加。
- 私は魔王魂様の「効果音 システム40」を使用しました。
2. AudioSourceの設定
- 適当なゲームオブジェクトを用意したらaddComponentよりAudioSourceをアタッチ。
3. UIボタンの追加
Hierarchyのプラスボタンのようなものを押してから「UI」⇒「Button」としてシーン上に任意のUIボタンを追加。4. ボタンの設定
- OnClickの「+」を押す。
OnClickの各項目に次の処理を施す。
None (Object) | 「2. AudioSourceの設定」で作成したオブジェクトをアタッチ |
---|---|
No Function | AudioSource⇒PlayOneShot (AudioClip) |
AudioClip | 「1. 音源ファイルの準備」で用意した音源ファイルを設定 |
ボタンを押した瞬間に鳴らす場合
先ほどの「4. ボタンの設定」の手順を以下の様に少し変えるだけです。
- Buttonに対してaddComponentから「EventTrigger」を追加。
- 「Add New Event Type」から「Poiner Down」を追加。
- 先ほどと同様の設定を行う。
動作確認
- 先ほど作成したボタンを動作させた結果を以下に示します。
- 分かりやすくするためにマウスのポインタは星型としました。また、ボタンを押している間は星を赤く、そうでない間は青く表示しました。
離した瞬間に鳴らす場合
押した瞬間に鳴らす場合
音を鳴り終わった後に処理を行う場合
準備
先程と同様に「3. UIボタンの追加」までを完了させます。
ボタン用スクリプトの作成
次にボタン用に以下のスクリプトを作成しました。
コルーチンを使うことで音の鳴り終わりを判断しています。
using System.Collections; using UnityEngine; using UnityEngine.UI; using System; [Serializable] public class SoundButton_C1 { bool isInited = false; //初期化されたか [SerializeField] AudioClip _audioClip; //音源 [SerializeField] AudioSource _audioSource; //AudioSource [SerializeField] Button _button; //ボタン //初期化(AudioSourceに音源を設定) public void Init(Action action, MonoBehaviour monoBehaviour) { isInited = true; //音源を割り当てる _audioSource.clip = _audioClip; //OnClickに処理を割り当てる _button.onClick.AddListener(() => monoBehaviour.StartCoroutine(Play(action))); } //鳴り終わったことを通知するコルーチン IEnumerator Play(Action action) { //初期化されていなかったらエラー if (!isInited) { Debug.LogError("AudioSourceに音源を設定していない"); yield break; } //ボタンが入力を受け付けないようにする _button.enabled = false; //効果音を鳴らす _audioSource.PlayOneShot(_audioClip); //終了まで待機 yield return new WaitWhile(() => _audioSource.isPlaying); //処理 action(); //ボタンが入力を受け付けるようにする _button.enabled = true; } }
呼び出し用スクリプトの作成
- 呼び出し用のスクリプトを作成します。
- 今回は鳴り終わった後にボタンを非表示にすることにしました。
using UnityEngine; public class Sample : MonoBehaviour { [SerializeField] GameObject buttonObj; [SerializeField] SoundButton_C1 soundButton; void Start() { //音が鳴り終わったらボタンを非表示にする soundButton.Init(() => buttonObj.SetActive(false), this); } }
- スクリプトのアタッチなど
適当なゲームオブジェクトを用意したら作成した「Sample.cs」をアタッチして、変数は次のように設定します。
ButtonObj | Button(ゲームオブジェクト) |
---|---|
AudioClip | 音源ファイル |
AudioSource | AudioSource |
Button | Button |
動作確認
- 先ほど作成したボタンを動作させた結果を以下に示します。
- 分かりやすくするためにマウスのポインタは星型としました。また、ボタンを押している間は星を赤く、そうでない間は青く表示しました。