Unityでボイスに合わせてMMDキャラが口パク

 2014-11-30
前回はMMD4Mecanimを使って、MMDモデルの表情を変えたり目パチする方法を試しましたが、
今回は口パクのテストをします。
Unityでボイスファイルを再生させると、ボイスに合わせて口が自動的に動いて、
しゃべっているかのように見せることができるらしいです。




使うモデルは引き続き、Tda式初音ミク・アペンドVer1.00を使っていきます。



vo9_201411300001456d2.jpg
まずはしゃべらせたいボイスの素材を用意します。
これはゆっくりボイスでおなじみのSofTalkです。
無料で使えるのでこれにしましたが、音声ならばボーカロイドでもフリー音声素材でも
なんでもOKです


vo15.gif
作った音声をWav形式で保存するのですが、この時ファイル名をひらがなで、
読み上げてほしいボイスと一緒にしないといけません。
ファイル名をスクリプトが読み取って、口パクするためです。

保存したら、そのファイルをUnityにドラッグ&ドロップして持ってきます。


さて、ここからキャラに口パクさせるのに2種類の方法があるのですが、
まずは『MMD4MecanimSpeechHelper』を使った方法を書きます。

vo16.gif
『MMD4MecanimSpeechHelper』はMMD4Mecanimフォルダの中のScriptsの中に入っているので、
このスクリプトをモデルに設置します。

vo17.gif
Speech Audio Clipの箇所にさっき作ったボイス音声ファイルを設置します。

できたらさっそくテストプレイ!

vo10_20141130000144f3a.jpg
ボイスが流れて、それに合わせて口パクをしてくれました!
いや~、初めて見るとこれはなかなかの感動モノです。
ですが、この方法だとテストプレイ後すぐに音声が流れてしまいますし、1回しか流れません。
次は任意のタイミングでクリックしたときにボイスを流したいって時のやり方です。

vo12.gif
まずはSpeech Audio Clipの部分を何もない状態(Noneの状態)にします。
(右の○の箇所をクリックすると設定できます)

次にボイスを流すためのスクリプトを作成します。
名前は、とりあえずCutipakuOnにしました。
キャラをクリックすると、ボイスが流れるようにします。


C#で記入した例


using UnityEngine;
using System.Collections;

public class CutipakuOn : MonoBehaviour {

//参照するオブジェクト
public GameObject Hoge2;
//スクリプトを用意
MMD4MecanimSpeechHelper script2;
//音声ファイルを用意
public AudioClip speechAudioClip2;



// Use this for initialization
void Start () {

//スクリプトを参照
script2 = Hoge2.GetComponent();

}


//クリックされたらボイス再生
void OnMouseDown(){

//音声ファイルを格納
script2.speechAudioClip = speechAudioClip2;

}
}



ssv5.jpg
スクリプトをモデルにセットし、Hoge2の箇所にしゃべらせたいモデルを。
下の部分には音声ファイルをセットします。


vo14_20141130011457e9d.jpg
これでモデルをマウスでクリックするとしゃべってくれるようになります。
タッチイベントとかもこれでできそうですね。


vo14.gif
Playmakerでのボイス再生の例

こちらの詳しいやり方はMMD4Mecanim配布サイトの
解説の中にあるモーフ拡張の部分で、詳しく説明されています。
Stereoarts Homepage



【追記】

『MMD4MecanimSpeechHelper』を使ったやり方を書きましたが、この他に
『MMD4Mecanim LipSync Plugin』というプラグインでも口パクができるようです。
こちらではリアルタイムに口パクさせたり、
文章を入力して好きなようにしゃべらせる…ってこともできるようです。

Unity でリアルタイムにリップシンクする MMD4Mecanim LipSync Plugin を作ってみた - 凹みTips

vo18.gif

ダウンロードしたプラグインの中にある『MMD4M_Lip Sync』というスクリプトをモデルにセット。
AudioClipに音声ファイルをセット、テストプレイを開始してPlayの部分をクリックすると音声が流れます。
さらに、Wordの部分に文章を入力してTalkを押すとその文章をしゃべってくれるという素敵な機能が!
…あるらしいんですが、ウチのUnityではエラーが出て試すことができませんでした…

Windows7には対応してないのかな? 動作環境を見るにMacかwin8じゃないとダメっぽい?


【さらに追記】

UnityモデルのUnityちゃんで同じように口パクさせる方法ですが、
先ほどと同じサイトでやり方が載っていました。

ユニティちゃんが声に合わせて口パクしてくれるリップシンクアセットを作ってみた - 凹みTips

vo24.jpg

これでUnityちゃんでボイス再生させながら、口パクにも対応です!


決まった台詞をしゃべらせたいときは『MMD4MecanimSpeechHelper』、
生放送などでリアルタイムに色々としゃべらせたいときは『MMD4Mecanim LipSync Plugin』と
使い分けるのがよさそうです。
タグ :

UnityでMMDキャラの表情モーフ操作

 2014-11-18
以前の記事で、MMD4MecanimでMMDモデルをUnityに持ってきましたが、
[記事]Unity で MMD
その続きで、MMDキャラの表情変更をテストします。


Vo1.jpg
使うモデルは前回に引き続き、Tda式初音ミク・アペンドVer1.00です。

表情を変えるためのスクリプトですが、こちらのウダサンコウボウ様のスクリプトが
とても使いやすくて便利だったので、使わせていただきました。
ウダサンコウボウ: [Unity]MMD4MFace - MMD4Mecanimの表情制御



Vo1_2.jpg
ダウンロードしてUnityにインポートした図です。
こちらのスクリプトを使って、キャラの表情を操作していきます。


Vo1_3.jpg
モデルにMMD4MFace ControllerとMMD4MFaceのスクリプトをセット。
そして、Morph Nameに表情のモーフ名を入力するんですが、
モーフの名前が日本語で、Unityで入力できない場合、
こちらのケットシーウェア様のスクリプトを導入すると、日本語入力ができるようになりました。

Unity4.3のインスペクターで日本語入力する方法 | ケットシーウェア

Vo4.jpg
表情を変えたい場合は、MMD4Faceを追加していきます。


次に表情を切り替えるためのスクリプトを用意します。
名前はとりあえず、Clickhyouzyouで。
キャラをクリックすると表情が変わるようにします。


C#で記入した例


using UnityEngine;
using System.Collections;

public class Clickhyouzyou : MonoBehaviour {


//クリックすると表情が変わる
public GameObject Hoge1;
public MMD4MFaceController script1;

//スクリプトを参照
void Start () {
script1 = Hoge1.GetComponent();
}

//クリックされたら表情変える
void OnMouseDown(){
script1.SetFace("angly");
}
}



Vo15.jpg
スクリプトをモデルにセットして、hoge1の場所に表情変更したいモデルを設定します。


Vo6.jpg
いざ、クリックしてみると
見事にはちゅ目モーフに切り替わってくれました!



Vo5_20141118223744de7.jpg
(追記)Playmakerでの切り替わりの例


今度は目パチの実装です。
Vo3.jpg
MMD4MFace Blinkを使います。
数値で目パチまでの時間の長さなどを設定できるようです。
Preferred Morphsには、目を閉じている表情を設定しておきます。


Vo14.jpg
これでランダムで目パチしてくれるようになりました!
やっぱ表情がつくとキャラも生き生きしてきますねー

とても便利なスクリプトなんですが、MMDキャラ以外の
Unity用のキャラ等で同じようにモーフ操作できるかどうかはわからないです…
記事が長くなってきたんで、口パクのテストとかは次回に持ち越し。

 
タグ :

こっち向いて機能の実装

 2014-11-02


今回はUnityでカメラの方向に向いてもらう方法をまとめました。
体全体ではなくて、キャラの顔だけこっちに向いてもらう方法です。

3Dゲームとかで、プレイヤーが近づくとNPCキャラがこっちを向く…というのを
よく見かけますが、それをUnityで出来るようにしたかったのです。

頭を回転させるわけですから、最初RotationとかQuaternionとかで回転させたのですが、
これだと頭があさっての方向に向いてしまうことに…
なかなかうまくいかなかったんですが、こちらのサイトの記事で解決策が見えました!


Unityでキャラクターに見つめてもらう - 銀の弾丸、はじめました


キャラを向かせるための専用アセットがあったんですね。
ってことでさっそく『HeadLookController』をインポート
MK00.jpg

シーンを開くと胴長短足のおっさんが出てきまして、
ボールを動かすと、その方向に視線を向けます。
このスクリプトをいじっていきます。
MK01.jpg

UnityChanモデルにHead Look Controllerスクリプトをつけました。
Element0 の First Transform、Last Transformにはモデルの胴体のボーン
Element1 の First Transform、Last Transformには首と頭のボーン
あと、Non Affected Jointsには、左手、右手のボーンを割り当てるっぽい?
MK08.jpg

どの部分がどういう名前か、とかはモデルをMecanimで開けばわかるっぽい
MK03.jpg

カメラにCursor Hitスクリプトをつけて Head Lookの部分にターゲットになるモデルを設定
MK09.jpg


出来た! …はずなんですが、キャラの視線が微妙にカメラからずれてます。
なので、カメラの子オブジェクトでCubeなどを作り、位置調整してそちらにCursor Hitスクリプトを置きます。
MK06.jpg

カメラではなく、(見えない)Cubeのほうに向くようになりました。
MK07.jpg


とりあえずこれで実装は完了しました。
いやー ここまで来るのに時間がかかったこと…
こんなアセットがあるって知ってたら、もっと早く出来たんですが…



【追記】
さらにわかりやすく解説されている動画を見つけました。
モデルに近づくと視線を向けるやり方などがこれで実装できました。
(ニコニコ動画)


複数キャラで視線を向ける方法にも対応していました。
これは便利ですね
これで複数のキャラがこっちを向いてくれるようになりました。
MK10.jpg
タグ :
≪ トップページへこのページの先頭へ  ≫