スポンサーサイト

 --------
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
カテゴリ :スポンサー広告 トラックバック(-) コメント(-)
タグ :

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
タグ :

BlenderでUnityちゃんのモーションを作るテスト

 2014-10-20
Blender2.72からFBXのボーンを取り込めるようになりました。
これでUnityのアニメーションを作るのが楽になったらしいので、試してみました。
まずはBlender公式サイトから最新版のBlenderをダウンロード。
起動してUIの表示を日本語化しておきます。


次に、こちらの記事を参考にUnityちゃんモデルをBlenderに取り込みます。
blender2.72でUnityちゃんをインポート|とあるプログラマーのブログ

無事、Blenderにユニティちゃんを取り込むことができました。
ボーンも一緒にインポートされているようです。
ここまで出来たらまず保存をしておきます。
保存が終わったら、ここからアニメーションを作っていきます。


ボーンを表示させるとモデルに隠れてしまっているので、
まずはボーンを手前に表示させます。
BLe2.jpg

表示のレントゲンのチェックをONにします
BLe3.jpg

ボーンが手前に表示されるようになりました
BLe4.jpg

アニメーションを作る準備をします
BLe16.jpg

準備ができたらポーズモードにして、ポーズを作っていきます。
今回は簡単にできる『バンザイ』するモーションを作っていきます。

まずはオートIKをONにしておきます。
BLe5.jpg


肩のボーンの○を選択し回転させて腕を上に上げます。
BLe6.jpg

もう片方の肩も回転させてバンザイさせます
BLe7.jpg

できたポーズをキーフレームに登録します。
キーフレーム:挿入をクリック
BLe9.jpg

キャラクター全体をクリック
BLe10.jpg

キーフレームに登録されました。
念のため、再生してみてちゃんと動くかチェックするのをおすすめします
BLe8.jpg

できたモーションをFBXファイルで保存します。
エクスポート→Autodesk.FBX(.fbx)
BLe11.jpg

保存画面で左メニューの
アーマチュアとメッシュにチェックを入れてから、名前をつけてFBXを保存
BLe12.jpg


これでFBXがとりあえずできました!


次はこのFBXをUnityにドラッグ&ドロップしてインポートします。
その後、RigからAnimation TypeをhumanoidにしてApply。
(※こうしないとモデルが正常にアニメーションしてくれない)
BLe14.jpg

アニメーションをループ(繰り返し再生)させたいので、
Rigの隣のAnimationsを選んで、Loop Timeにチェック
ループするとモデルが浮遊するのをふせぐため、Bake Info Poseにもチェック
BLe15.jpg

あとは、モデルにアニメーションを設定します。
AnimatorでMecanimを使ってモーションを設定しました。
BLe17.jpg
BLe18.jpg


これで準備は完了です!
テストプレイしてみると、ちゃんとモーションがUnityで再生されました!
GFBLe1.gif


Blenderの操作はまだ慣れてないので、
間違ってるところや、もっと簡単にできる方法があるかもしれませんが…
とりあえず、今回はこんな方法で出来たということで終わりにします。
カテゴリ :Unity用メモ トラックバック(-) コメント(0)
タグ :

ビルド時の悲劇

 2014-09-20
今回はちょいネタ記事です。

以前のことですが、
Unityで作ったゲームを完成させて、ビルドして配布するぞーって時に事は起こりました。
あれ? なんかグラフィックがおかしい…
よく見てみると…






ユニティちゃんのお顔が悲惨なことに…!!


おかしい、いつもならきちんとキレイに表示されるのに…なぜ!?
ビルド時の設定がおかしかったのか。 光源の設定がまずかったのか。
いろいろいじってみても結果は変わらず…

ふとコンソールを見てみると、シェーダがどうとか英語で書かれてるのを発見。
そこで、モデルのシェーダをMonodevelopで見てみると原因がわかりました。

今回、ユニティちゃんのpackageをインポートした時にフォルダの名前を変えてたんですが、
それが原因で、パスが取得できずシェーダが反映されなくなってたみたいです。
フォルダの名前を『UnityChan』に戻して、再ビルドすると…




正常に表示されるようになりました!

…まぁ、それだけのハナシなんですが

今回の教訓は、インポートしたファイルのファイル名は、むやみに変えないほうがいいってことですネ。
どうしてもフォルダ名を自分でつけたい場合は、
空のフォルダに名前をつけ、そこにインポートしたファイルをぶちこむって方法がよさそうです。
カテゴリ :Unity用メモ トラックバック(-) コメント(0)
タグ :
≪ 前ページへ ≪ トップページへこのページの先頭へ  ≫ 次ページへ ≫
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。