MRが楽しい

MRやVRについて学習したことを書き残す

Unityで楽曲を再生する

本日は Unity の技術調査枠です。
前回までの記事でMMDのデータを Unity に取り込む方法を調査してきました。
bluebirdofoz.hatenablog.com
bluebirdofoz.hatenablog.com
bluebirdofoz.hatenablog.com

今回は最後の5つ目のデータ、楽曲の再生方法についてです。
単純に音楽ファイルの再生方法ですので、MMD に限った手順ではありません。

音楽の再生方法について以下を参考にしました。
qiita.com
freesworder.net

音の再生には AudioSource(音源) と AudioListener(聞き手) が必要です。
AudioListener の方は MainCamera に付属しているため、通常は気にしなくても大丈夫です。
HoloToolkit の場合でも、MixedRealityCamera に既にアタッチされています。
f:id:bluebirdofoz:20171205085951j:plain

音楽の音源としたい位置に AudioSource をアタッチします。
キャラクタのゲームオブジェクトにアタッチすれば、キャラクタの位置から音楽が流れるようになります。
MMD4Mecanim のスクリプトに既に音楽再生のための仕組みが用意されているようですが、今回は通常の手順で実施します。
f:id:bluebirdofoz:20171205090002j:plain

再生する音楽をプロジェクトにインポートします。
WAV ファイル、MP3 ファイルなどであれば、プロジェクトにドロップすることで扱えます。
f:id:bluebirdofoz:20171205090019j:plain

後は音楽ファイルを AudioSource に設定すればOKです。
f:id:bluebirdofoz:20171205090035j:plain

「PlayOnAwake」がチェック状態ならば、プロジェクトの再生と共に音楽が流れるようになります。
f:id:bluebirdofoz:20171205090043j:plain


以上で完了です。
……が、折角なので任意のタイミングで再生が可能なようにしてみます。
アニメーション、音楽再生、ダンスモーションを制御するスクリプトを作成します。
・DanceScript.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

// 必要なコンポーネントの列記
[RequireComponent(typeof(Animator))]
[RequireComponent(typeof(AudioSource))]
public class DanceScript : MonoBehaviour {
    public GameObject CameraObject;

    private AudioSource audioSource;
    private Animator animator;
    private MMD_VmdCameraLoad vmdcameraload;

    // Use this for initialization
    void Start () {
        // 各種コンポーネントの取得
        audioSource = gameObject.GetComponent<AudioSource>();
        animator = GetComponent<Animator>();
        if (CameraObject != null)
        {
            vmdcameraload = CameraObject.GetComponent<MMD_VmdCameraLoad>();
        }
    }

    // Update is called once per frame
    void Update () {
        // スペースキー押下で実行する
        if (Input.GetButtonDown("Jump"))
        {
            audioSource.Play();
            animator.SetBool("Dance", true);
            if (vmdcameraload != null)
            {
                vmdcameraload.start = true;
            }
        }
    }
}

(ダンスモーション制御のため、MMD_VmdLoad に start というフラグを追加しています)

待機モーションが必要なため、アニメーションコントローラにも手を加える必要があります。
f:id:bluebirdofoz:20171205090059j:plain
この辺りのアニメーションの利用方法は以下の記事でまとめてありますので参照ください。
bluebirdofoz.hatenablog.com

音楽が自動再生されないように、AudioSource の「PlayOnAwake」のチェックを外します。
スクリプトMMD_VmdLoad のゲームオブジェクトへの参照を与えれば準備完了です。
f:id:bluebirdofoz:20171205090115j:plain

プロジェクトを再生すると、スペースキーを押下したタイミングでダンスが開始するようになります。
f:id:bluebirdofoz:20171205090130j:plain