
ごきげんよう、Budding Lab.編集部のゆくすぃです!
いつか、ホラーゲームも作ってみたいと思っています!
ゲームが大好きな皆さんなら、一度は「自分でゲームを作ってみたい!」と、思ったことがあるのではないでしょうか?
本連載では、ゲーム開発初心者のゆくすぃが、基礎的なスクリプトだけを使って、超入門・診断ゲームの作り方を解説します!
本記事は、最終回「Prefabの削除、SEの設定編」です。
プログラミングの専門知識がなくたって、画像や音楽作成アプリが使えなくたって、案外、ゲームって作れるものです。興味が湧いたなら、ぜひ挑戦してみてください!
Prefabを削除するスクリプトの作成
Prefabを利用して診断結果を表示した後「初めからやり直す」ボタンをクリックしたタイミングで、診断結果(パネル:Result0~7)を削除する必要があります。でないと、診断結果が邪魔になって、設問(パネル:Question0)が見えないからです。
診断結果は、設問が乗っているパネルグループの上の階層(=カメラの最前面)に表示されている


スクリプトを作成する
早速、Scriptsフォルダ内に「スクリプト:Destroy」を新規作成して、Prefabを削除するスクリプトを書いていきましょう。
スクリプト:Destroy
1 using System.Collections;
2 using System.Collections.Generic;
3 using UnityEngine;
4
5 public class Destroy : MonoBehaviour
6 {
7 public void InvokeDestroy() // Prefabの削除を1.0秒後に実行するメソッド
8 {
9 Invoke("DestroyPrefab", 1.0f); // DestroyPrefabを1.0秒後に実行する:処理
10 }
11
12 public void DestroyPrefab() // Prefabを削除するメソッド
13 {
14 Destroy(this.gameObject); // 自分自身を削除:処理
15 }
16 }
12行目に、Prefabを削除する「メソッド:DestroyPrefab()」を作ります。
14行目で、自分自身(this.gameObject)を削除する「処理:Destroy(this.gameObject);」を書きます。
関数:Destroyは、引数にGameObjectを渡すと、渡したGameObjectとそのコンポーネント、さらにそのGameObjectの子であるすべてのGameObjectを削除します。
7行目に「メソッド:InvokeDestroy()」を作ります。
9行目で「メソッド:DestroyPrefab()」の処理を「関数:Invoke」を使って1.0秒遅らせる「処理:Invoke(“DestroyPrefab”, 1.0f);」を書きます。
「初めからやり直す」ボタンをクリックした際にSEを鳴らす予定なので、SEを鳴らす処理が実行される時間を稼ぐために「関数:Invoke」を使っています。
「関数:Invoke」については以下記事を参考にしてください。


スクリプトをアタッチする
作成した「スクリプト:Destroy」は、Prefab(Result)にアタッチします。
ボタンにOnClickイベントを設定する
Prefab(Result)の「初めからやり直す」ボタンにOnClickイベントを設定します。
参照するオブジェクトに「ゲームオブジェクト:Result」をセットし、ドロップダウンリストから「Destroy.InvokeDestroy」を選択します。


SEを鳴らすスクリプトの作成
スクリプトを作成する
Scriptsフォルダ内に「スクリプト:SEController」を新規作成して、SEを鳴らすスクリプトを書いていきましょう。
スクリプト:SEController
1 using System.Collections;
2 using System.Collections.Generic;
3 using UnityEngine;
4
5 public class SEController : MonoBehaviour // クラス:SEController
6 {
7 [SerializeField] private AudioClip _se00; // audioClip型の変数:_se00を定義
8 [SerializeField] private AudioClip _se01; // audioClip型の変数:_se01を定義
9
10 AudioSource audioSource; // AudioSource型の変数:audioSourceを定義
11
12 private void Start() // スクリプト:SEControllerが有効な時、最初に呼び出される
13 {
14 audioSource = GetComponent<AudioSource>(); // 変数:audioSourceにAudioSourceコンポーネントを代入
15 }
16
17 public void OnClick00() // メソッド:OnClick00()
18 {
19 audioSource.PlayOneShot(_se00); // 変数:_se00に代入されたSEを一度だけ鳴らす処理
20 }
21
22 public void OnClick01() // メソッド:OnClick01()
23 {
24 audioSource.PlayOneShot(_se01); // 変数:_se01に代入されたSEを一度だけ鳴らす処理
25 }
26 }
7行目で、SerializeFieldを使ったaudioClip型の「変数:_se00」を定義します。こうすることで、inspectorウインドウの「変数:se00」に鳴らしたいオーディオファイルを設定できるようになります。
8行目で、SerializeFieldを使ったaudioClip型の「変数:_se01」を定義します。こうすることで、inspectorウインドウの「変数:se01」に鳴らしたいオーディオファイルを設定できるようになります。
10行目で、AudioSource型の「変数:audioSource」を定義します。
14行目で「変数:audioSource」にAudioSourceコンポーネントを読み込んでいます。こうすることで、スクリプトからSEを鳴らせるようになります。
17行目に「メソッド:OnClick00()」を作ります。
19行目で「変数:se00」に代入されたSEを一度だけ鳴らす「処理:audioSource.PlayOneShot(_se00);」を書きます。
22行目に「メソッド:OnClick01()」を作ります。
24行目で「変数:se01」に代入されたSEを一度だけ鳴らす「処理:audioSource.PlayOneShot(_se01);」を書きます。
AudioSourceコンポーネントをアタッチする
スクリプト:SEControllerをアタッチする前に、まず、Prefab(Result)に「AudioSourceコンポーネント」をアタッチしてください。
Prefab(Result)のInspectorウインドウにある「Add Component」をクリックし、表示された検索ウィンドウに「au」と入力すると「Audio Source」がリストに表示されるので、それを選んでクリックします。
チェックボックスのチェックはすべて外しておきます。


スクリプトをアタッチする
「スクリプト:SEController」は「初めからやり直す」ボタン以外にも使い回したいので、Hierarchyウインドウに「空のゲームオブジェクト:SE」を作成し、アタッチします。
また、このオブジェクトにも「AudioSourceコンポーネント」をアタッチしておきます。


「変数:se00」・「変数:se01」に、それぞれ鳴らしたいオーディオファイルをセットします。
※オーディオファイルは「第2回 ゲーム素材の準備編」でSoundsフォルダ内に保存してあります。
ボタンにOnClickイベントを設定する
Prefab(Result)の「初めからやり直す」ボタンにOnClickイベントを設定します。
参照するオブジェクトに「空のゲームオブジェクト:SE」をセットし、ドロップダウンリストから「SEController.Onclick00」を選択します。





同じ要領で、設問の「はい / いいえ」ボタンにも「スクリプト:SEController」をアタッチしてみましょう!
まとめ
今回の記事では、Prefabの削除、SEの設定について解説しました。
以上で、ゲーム自体は完成です!お疲れ様でした!
できあがったゲームをブラウザでプレイできるようにする手順(ビルド&リリース)については、以下記事を参考にしてください。


以上、最後まで読んでいただき有難うございました!