読者です 読者をやめる 読者になる 読者になる

ぼっちプログラマのメモ

UE4とかVRとかについて書いたり書かなかったり。

OculusRift+MMDforUnityで、ミクさんと一緒に散歩してみる その1

Unity Oculus Rift

題名の通り、ミクさんと散歩するために、
MMDforUnityで読み込んだモデルにモーションをつける

モーションデータ(VMDファイル)を変換・読み込ませる

まず、↓のサイトからモーションデータをダウンロード。
今回は【MMD】歩行モーション 配布編【みんなでおさんぽ】を選択。
http://www6.atwiki.jp/vpvpwiki/pages/389.html#id_2379dbb7

上メニューの[Plugins>MMD Loader>VMD Loader]から、
前回PMDを変換した際に生成されたPrefabと、
使用するVMDファイルを選択してコンバート。

そして、出来たファイルをInspecterのAnimationの所に入れると…

f:id:pafuhana1213:20130828215603j:plain

動いた! が、足が動かない…

MMDIKBakerを使ってみる

原因は足のIKらしいので、MMDIKBakerを使ってIKを取り除くことに
http://terasur.blog.fc2.com/blog-entry-94.html

まず、MMDIKBaker.slnをVS2010で開いてソリューションのビルドを実行
エラーが一つ出てますが、XNA関係らしいのでスルー。

Debugフォルダに変換したいファイルをリネームして、exeを実行。
上のサイトにもありますが、実行中などの表示がされないので、
信じて数分待ちます。(「警告:ファイル末尾移行に不明データ」って出てたけど大丈夫かな…)

そして、生成されたVMDファイルを先程と同じ順序でAnimationに登録すると…

f:id:pafuhana1213:20130828221202j:plain
キタ━━━━(゚∀゚)━━━━!!

これでお散歩でき…あれ?

あとは、てきとーに自分(カメラ)の方に向いて移動するスクリプトを組んで入れて完成だ!
f:id:pafuhana1213:20130828231342j:plain

ムーンウォーク!?


どうやら、MMDの座標系とUniyの座標系が違うせいらしい。よく見りゃ確かにそうだ。
http://d.hatena.ne.jp/acey014/20130628/1372425393

せっかくなので、スクリプトで何とかしてみる

void Update () {
	
	if( null != target ){
			
		// ターゲットの位置取得
		var targetPosition = target.gameObject.transform.position;
		targetPosition.y = this.transform.position.y; // 浮かないように
			
		// 座標系をUnityにあわせる
		this.transform.Rotate( 0, 180, 0 ); 
			
		// ターゲットの方に向かせる
		this.transform.rotation = Quaternion.Slerp(this.transform.rotation, 
			Quaternion.LookRotation( targetPosition - this.transform.position  ), 0.07f);
			
		// 座標系をMMDに戻す
		this.transform.Rotate( 0, 180, 0 );
			
		// 前進
		this.transform.position += (Quaternion.Euler( 0, 180, 0 ) * this.transform.forward ) * speed;
	}
}

う、うん…まあ、こうなるよね…


上の参考サイトを元に「MMDFormat.cs」を弄ろうと思ったけど、
該当箇所が見当たらない(更新で別のファイルに移った?)ので、
しばらくはこの糞コードで動かすことに決定。

ようやくお散歩でき…た…あれ?

修正が終わり、実行した所…
f:id:pafuhana1213:20130829002207j:plain

キタ━━━━(゚∀゚)━━━━!!

f:id:pafuhana1213:20130829000010j:plain

Σ(||゚Д゚)ヒィィィィ


どうやら、MMDの剛体とUnityの剛体の仕様が異なるせいで
当たりが上手くいっていない + モデルの各パーツの位置関係がグチャグチャになるみたい

次は、当たりをどうにかする所からかな~


余談ですが、WebPlayerで公開しようと思ったら、
htmlを開くとエラーメッセージが表示されるだけで
肝心のゲーム部分は表示されず…OculusRift部分が引っかかってるのかな?