†でおきしブログ†

ウナギ食べたいヽ(•̀ω•́ )ゝ✧

ドットインストールさんのUnity入門 MyBallGameにBGMとSEを追加してみました

www.youtube.com

☆BGM(ループ再生)を追加

(1)素材の用意
 wav形式でループ素材をアセットに突っ込んでおきます。
 ※mp3だとループ再生がブツブツ途切れるのでwavにしました

(2)Emptyオブジェクトで鳴らす
 ・BGMを鳴らしたいSceneにEmptyオブジェクトを作成
  →"bgm"という名前で作成しました
 ・"Audio Source"をAdd Componentから追加
 ・AudioClipに(1)で用意したループ素材を設定
 ・"Play on Awake"にチェック
  →デフォルトでチェックが付いており自動再生される
 ・Loopにチェック
f:id:deokisikun:20190107021640p:plain:w200

☆SEの設定

パドルにボールが衝突してボールが消える時に音を鳴らそうとしましたがここで問題がありました。

★問題点

collision判定処理を実施しているプレハブのボールに設定されたスクリプト内で音を鳴らそうとしたのですが、ボールオブジェクト自身をDestroyする為、音が再生される前にスクリプトも巻き込んで破棄されて音が再生されませんでした。

f:id:deokisikun:20190107024133p:plain

★解決方法

ボールオブジェクト自身で音を再生するのではなくて、音再生用のEmtpyオブジェクト("sounds")に音再生スクリプト("playsound")を仕込んで呼び出しました。
f:id:deokisikun:20190107024329p:plain


●音再生用のEmtpyオブジェクト("sounds")のInspector
f:id:deokisikun:20190107025206p:plain:w200
※ボールが衝突した時に再生を行うため、"Play on Awake"のチェックはoffです。

●音再生用のEmptyオブジェクト("sounds")に仕込んだスクリプト("playsound")

public class playsound : MonoBehaviour
{
    private AudioSource sound;
    // Start is called before the first frame update
    void Start()
    {
        sound = GetComponent<AudioSource>();
    }
    public void Play()
    {
        sound.Play();
    }
〜以下略〜

●ボールオブジェクトからの再生呼び出し

 // 音再生用のオブジェクト名は"sound"で作成しています
 GameObject soundObject = GameObject.Find("sounds");
 playsound script = soundObject.GetComponent<playsound>();
 script.Play();

    // ボールオブジェクトの削除が実行されるが再生に影響しない
 Destroy(gameObject);

☆蛇足

BGMとSE以外に以下も追加してみてます

  • スプラッシュ画面にアイコンを追加
  • スタート画面を追加

スタート画面についてはSceneの追加と画面遷移スクリプト(SceneManager.LoadScene("MainScene");)を追加すれば良いだけなので簡単だった。

スプラッシュ画面にアイコンを追加する方法としては、ProjectSettings->Playser->Splash Image->Logosに画像を追加

なのですが、単純にアセットに追加した画像ファイルだと追加ができません。
画像ファイルを選択し、InspectorのTextureTypeでSprite (2D and UI)を選んだ上でApplyで更新をかけないといけませんでした。