「Miku Miku Dance for Unity」でPMDファイルのインポートをしてみた
Miku Miku Dance for Unityのインストール
「Miku Miku Dance for Unity」本体はこちらからダウンロード出来ます。自分が落とした時は「mmd-for-unity-v1.61a.zip」というファイル名でした。
ダウンロードし、解凍が終わったらUnityのProjectビューへフォルダごとドラッグします。
取り込みが完了したらメニューに Plugins という項目が追加されます。追加されていない様であればメニューの他の項目をドロップダウンなどしていると描画が更新されて表示されます。
PMDファイルの生データの取り込み
次にPMDファイルの生データをUnityに取り込みます。Miku Miku Dance for Unityでは生データとして取り込んだ後にコンバートを行うという手順になっています。
Unityで MMD というフォルダを作成し、そこに今回はMikuMikuDance(注:Miku Miku Dance for Unityでは無いです)に付属しているモデルデータを取り込む事にします。
MikuMikuDanceをまだインストールしていない場合はこちらからダウンロードして下さい。自分は MikuMikuDance(DirectX9 Ver) のデータを使用しました。
UserFile/Model に有るファイルを全選択し、Unityに作成した MMD フォルダにドラッグします。
コンバート処理
メニューから Plugins → MMD Loader → PMD Loader と選択します。
表示されたウィンドウの「PMD File」の項目にUnityに取り込んだPMDの生データをドラッグします。
するとこの様な画面に切り替わるので「Convert」ボタンを押すと変換が完了し、HierarchyビューにPrefab化されたデータが追加されます。
VMDファイルの取り込みについて
VMDファイルは現状ではIKや物理演算に対応していないなど色々とVMDファイル制作について注意点が有り、Unityへの取り込み時にも注意点が有るみたいなのでVMDファイルの取り込みについてはこちらの動画をMiku Miku Dance for Unityの制作者の方の動画を参照下さい。
(2011/01/14 追記)
開発者の方より最新版では物理演算に対応済みとの情報を頂きました。
(追記ここまで)
Unity 3.5の新機能、 WebCamTexture を使ってみた
Unity 3.5(現在、パブリックベータ)からWebカメラで撮影している動画をリアルタイムにテクスチャとして使用可能な WebCamTexture というクラスが追加されました。
使い方は例えば Cube などにJavaScriptファイルを追加し、以下の様な内容を記述すればOK。
function Start () { var devices : WebCamDevice[] = WebCamTexture.devices; if (devices.length > 0) { var webcamTexture : WebCamTexture = WebCamTexture(320, 240, 12); renderer.material.mainTexture = webcamTexture; webcamTexture.Play(); } else { Debug.LogError("Webカメラが検出できませんでした。"); } }
自分が試した環境(VAIOのノートPC)ではWebカメラが起動すると連動して以下の様なアプリが毎回起動します。
そのため「ウィンドウのフォーカスがUnityからこのアプリに移動する」→「Unityがフォーカスが外れたのを検知して描画を停止」という流れが発生し、Webカメラで撮影されたデータが反映されなくて少しの時間、???となりハマリました。その様な環境の人はそれらのアプリの動作を停止させるか、起動した後にUnityのウィンドウをクリックしてフォーカスを戻す必要がありますので注意して下さい。
複数のオブジェクトに使いたい場合にはこのスクリプトをそれぞれのオブジェクトに使用するという方法ではダメな様で、最後に指定したものにしか反映されませんでした。
空のGameObjectに以下の様なスクリプトを記述して設定しすると複数のオブジェクトに対しても適用可能でした。
function Start () { var devices : WebCamDevice[] = WebCamTexture.devices; if (devices.length > 0) { var webcamTexture : WebCamTexture = WebCamTexture(320, 240, 12); var cube : GameObject = gameObject.Find("Cube"); var plane : GameObject = gameObject.Find("Plane"); cube.renderer.material.mainTexture = webcamTexture; plane.renderer.material.mainTexture = webcamTexture; webcamTexture.Play(); } else { Debug.LogError("Webカメラが検出できませんでした。"); } }
なお、スタンドアローンアプリでは問題無く動作しましたがWeb Playerとして出力した場合は以下の様な表示になりました。おそらく、今のところ未対応なのだと思われます。
関連情報
Script Referenceの Application.RequestUserAuthorization にかなり重要な情報が有ります。一度、目を通しておいた方が良いでしょう。