LeapMotionでMMDキャラをなでなでする

今回は前から欲しかったLeapMotionを買ったのでUnityを使ってMMDモデルをなでなでするゲーム(?)を作っていきたいと思います。ちょっと前に流行ったバトルガールハイスクールのなでなでするやつの3D版みたいな感じです。Unityのバージョンは5.6.5f1、LeapMotionのUnity用パッケージはLeap_Motion_Core_Assets_4.3.4を使用しました。

手順

  • MMDキャラをUnityに召喚する。
  • LeapMotionOrionドライバのダウンロード
  • LeapMotionのUnityパッケージのダウンロード
  • ゲームを作っていく

まず、MMDキャラをUnityに召喚していきます。必要なものはMMDキャラとMMD4Mecanim_Betaです。

MMD4Mecanim_Betaをダウンロードしたら解凍して、その中のMMD4MecanimのUnityパッケージをインポートします。次に、好きなMMDキャラをダウンロードして、解凍しファイルをそのままUnityのプロジェクトにインポートします。今回はMMD4Mecanim_Beta_20180523、MMDキャラに、ちびあぴちゃんを使用しました。

MMDキャラのファイル内にある.MMD4Mecanimファイルを選択して、Inspector画面の項目にチェックを入れて同意します。その後、Processを押します。これでUnityにMMDキャラを召喚するのは完了です。



LeapMotionのUnityパッケージをインポートします。LeapMotion/Core/Examplesの中にあるLeapHandsDemoをクリックして再生してみます。上手く手が表示されたらおkです。

いったん停止して、Hierarchy内のCameraをProjectに持ってきます。

新規のシーンにしてHierarchyにMMDキャラをプレハブ化したものと、さっきのCameraをもってきます。そして、ゲーム画面を見ながらMMDキャラの顔の前にCameraを持ってきて調整をしてください。 ここまででほとんど作業は終わりです。

ここからMMDキャラの髪の毛に触ったら表情が変わるようにしていきます。 まずキャラの髪の毛を触れるようにしていきます。

まず、MMD4Mecanimで取り込んだモデルのPhysicsを有効にしていきます。 HierarchyにあるMMD4Mecanimで変換したモデルデータを選択して、MMD4MecanimModelにあるModelタブの下のPhysics EngineをNoneからBullet Physics変更します。

次に、Physicsの欄のColliders内のGenerateCollidersのProcessボタンを押してください。そして、BulletPhysicsのJoinLocalWorldのチェックを外します

手のモデルにMMD4MecanimRigidBody.csをアタッチしていきます。 RigidRoundHand_LとRigidRoundHand_R上の指などにRigidbodyコンポーネントがアタッチされていて、このRigidbodyコンポーネントがアタッチされている全てのGameObjectにMMD4MecanimRigidBody.csを追加していきます。 Hierarchy上にある検索欄にrigidbodyと入力するとシーン内でRigidbodyをアタッチしているGameObjectだけ検索されるので、検索されたものをすべて選択し、Inspector画面のAdd Componentボタンを押して、MMD4MecanimRigidBodyと入力して追加します。 これで再生してみるとキャラクターの髪が触れるようになっていると思います。

早速、MMDキャラ表情を作っていきます。ここの作業が一番楽しかったです。キャラクターの表情を作るために、MMD4MecanimFaciemをダウンロードします。その次に、ダウンロードしたMMD4MecanimFaciemのUnityパッケージもインポートします。インポートが終わったら、MMDモデルにFaciemControllerを追加してください。この時にFaciemDatabaseも自動で追加されます。この2つを追加したら、Unityの上のメニュー欄から、MMD4Mecanimを押してください。

MMD4Modelの欄にHierarchyのMMDキャラを指定してください。これから実際にキャラの表情を作っていきます。FaciemInspectorは開いたままで、HierarchyのMMDモデルを選択して、MMD4MecanimModelのMorphをクリックします。

そして、下のほうにスクロールしていくとバーがあるので自分の好みの表情をバーを動かして作っていきます。その時にオレンジの線がでて見にくいときは、FaciemInspectorのHideWireframeを押すとオレンジの線が消えます。表情が完成したらFaciemInspectorのFaceNameにローマ字で自分が判別できるような名前を付けてADDFACEを押します。これで表情は完成しました。

次は手のモデルが髪の毛に当たった時という判定を作っていきます。その前にMMDキャラの当たり判定を修正していきましょう。CapsuleColliderのRadius(半径)、Height(長さ)などを変えて、キャラクターに合うように一つ一つ設定していきます。


それが終わったら手のモデルのコライダも修正します。

次に当たったことを判定するスクリプトをC#で書いていきます

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

public class touch : MonoBehaviour {

public GameObject Character;
public MMD4MFaceController Script;

	// Use this for initialization
	void Start () {
			Script = Character.GetComponent();
	}
 void Update () {
		Character.SendMessage("SetFace","nomal");
 }
	void OnTriggerStay (Collider other){
		if (other.gameObject.CompareTag("Nekomimi")){
		Character.SendMessage("SetFace","><");
		} else if (other.gameObject.CompareTag("Mune")){
		Character.SendMessage("SetFace","zitome");
		}
	}
}

触ったら判定してほしいコライダーのタグに名前を付けます。僕は猫耳を触ったときに反応してほしかったので猫耳にタグ名Nekomimiを付けました。("SetFace","")SetFaceの次には変化させたい表情(さっき設定したFaceName)を書いてください。そうしたらこのスクリプトをRigidRoundHand_LとRigidRoundHand_Rの子要素全てに追加していきます。(thumb,index,middle,pinky,ringのbone1,2,3とpalm)追加したスクリプトのCharacter欄にHierarchyのMMDモデルを選択してください。

これで実行するとタグを設定したところに触ると表情が変化すると思います。 ここまでを一区切りとしたいと思います。僕はここからアイドルモーション、Voice、呼吸やまばたき、揺れなどを追加したりしました。需要があれば続きを書くかもしれません。