MRが楽しい

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

ユニティちゃんが口パクを…できなかった

拘りだすと止まらない。喋ってるのに口閉じてるのが違和感あったので口パクをつけることにしました。

その前に一点、問題が発生しました。
これまでミスして古いバージョンのユニティちゃんを使っていました。
バージョンアップをしたところ、以下のエラーが発生しました。

・Assets\UnityChan\Scripts\SpringManager.cs 72行目
Assets\UnityChan\Scripts\SpringManager.cs(72,42): error CS1061: 'Type' does not contain a definition for 'GetField' and no extension method 'GetField' accepting a first argument of type 'Type' could be found (are you missing a using directive or an assembly reference?)

関数名は違えど、Type型というところがHoloToolKitで出たエラーと同じ感じ…。
こちらは解決方法が分からず、ひとまず当該コードを無効化して回避しました。
SpringManagerはキャラクターのポリゴンの揺れを表現するものらしいので、大きな影響はないはず。


さて、本題の口パクです。今回参考にしたのは以下のページです。
・Unity でリップシンクができる OVRLipSync を試してみた
 http://tips.hecomi.com/entry/2016/02/16/202634

紹介ページのリンクからはライブラリがダウンロードできませんでした。
今回は以下から取得しています。
・Oculus OVRLipSync for Unity 5
 https://developer.oculus.com/downloads/package/oculus-ovrlipsync-for-unity-5/1.0.1-beta/


説明の通り、セットアップすることで成功しました。
ユニティちゃんに関連付けられたAudioSourceを利用する必要があるため、LookColider.csを再修正しています。

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

public class LookCollider : MonoBehaviour
{
    AudioSource audioSource = null;

    public string searchTarget = "MainCamera";
    public GameObject messageTarget;

    public AudioClip impactClip = null;
    public float impactVolume = 0.5f;

    // Use this for initialization
    void Start ()
    {
    }

    void OnTriggerEnter(Collider col)
    {
        HeadLookController con;
        // 衝突対象が検索対象ならば実行
        if(col.tag == searchTarget)
        {
            //ルックコントローラを有効化
            con = messageTarget.GetComponent<HeadLookController>();
            con.enabled = true;
            //音声を再生
            audioSource = messageTarget.GetComponent<AudioSource>();
            audioSource.clip = impactClip;
            audioSource.Play();
        }
    }

    void OnTriggerExit(Collider col)
    {
        HeadLookController con;
        // 衝突対象が検索対象ならば実行
        if (col.tag == searchTarget)
        {
            //ルックコントローラを無効化
            con = messageTarget.GetComponent<HeadLookController>();
            con.enabled = false;
        }
    }
}

Unityでのデバック動作画面。セリフに合わせてユニティちゃんが口パクしてます。
f:id:bluebirdofoz:20170414003427j:plain
この通り、無事、口パクができました…が。
開発用PCのUnity上だとちゃんと動作するのに、hololensに搭載すると正常に動かない。口を閉じたままです。

OVRLipSyncはUWPアプリにはまだ対応していない?
口パクは一旦断念です。