
ごきげんよう、Budding Lab.編集部のゆくすぃです!
ここでは、ゲーム開発に関する補足情報をお伝えしています!
GameStartボタンをクリックすると効果音が鳴り、ゲームが始まる・・・これを実装するために「効果音を鳴らすスクリプト」と「シーンを切り替えるスクリプト」を準備してボタンにアタッチしたけれど、何故かクリック音が鳴らない!・・・なんてことがたまに起こります。
これは、効果音を鳴らす処理が実行される前にシーンが切り替わってしまうために起こります。つまり、効果音を鳴らす処理が実行されるまで、シーンを切り替える処理を遅らせれば良いわけです。
そこで、今回は「処理を遅らせる関数:Invoke(Unity編)」を解説します!
Invokeとは
Invokeとは、MonoBehaviourクラスに準備されたPublic関数の一つです。設定した時間(単位は秒)経過後にメソッドを呼び出します。
Invoke(“実行する処理”, 秒数);
- 実行する処理:シーンの切り替えなどを指定 ※遅らせたい処理を別に準備する必要があります
- 秒数:遅らせたい時間を「1.0f」のように指定する ※末尾の「f」= float型を指定しています
Invokeの使い方
Invokeを使って、この記事の冒頭に挙げた例を解決してみましょう。
1 using System.Collections;
2 using System.Collections.Generic;
3 using UnityEngine;
4 using UnityEngine.SceneManagement;
5
6 public class SceneChanger : MonoBehaviour
7 {
8 [SerializeField] private string _loadScene; // string型の変数_loadSceneを定義
9
10 public void SceneChange()
11 {
12 SceneManager.LoadScene(_loadScene); // シーンを切り替える処理
13 }
14
15 public void SceneChangeInvoke()
16 {
17 Invoke("SceneChange", 1.0f); // 1.0秒後にSceneChangeメソッドを呼び出す
18 }
19 }
グリーンの文字10行目から13行目で、シーンを切り替える処理を纏めた「SceneChangeメソッド」を書いています。
オレンジの文字15行目から18行目で、1.0秒後にSceneChangeメソッド(シーンを切り替える処理)を呼び出す「SceneChangeInvokeメソッド」を書いています。
この「スクリプト:SceneChanger」をGameStartボタンにアタッチして、OnClickイベントにセットすれば、GameStartボタンをクリックした1.0秒後にシーンが切り替わります。
効果音を鳴らすスクリプトがアタッチされていれば、シーンが切り替わるまでの1.0秒間に効果音を鳴らす処理を実行できるでしょう。
まとめ
処理を遅らせる関数:Invoke、意外と簡単に使えるんだな・・・と、感じたのではないでしょうか。
たった数秒でも、タイミングを制御できるとゲームのクオリティが変わってきます。些細な違いですが、決して蔑ろにはできないですね!
以上、最後まで読んでいただき有難うございました!