2015年6月9日火曜日

SDユニティちゃん活用その7 ~公式配布表情アニメと互換性を持たせてBlenderでエクスポート~

Blender経由でFBXエクスポート&UnityでFBXインポートしたSDユニティちゃんで、表情アニメを公式配布スクリプトで動作させるメモ。




環境

Windows7x64
Unity 5.0.1f1 Personal
Blender2.74(x64)
SDユニティちゃん 3Dモデルデータ Download ver1.0。(2015/5時点最新)

※作業中素材には『ユニティちゃんライセンス』で提供されるコンテンツを利用しています。





概要

顔の表情はシェイプアニメで作られています。
公式配布SDユニティちゃんのFBXファイルをBlenderでインポート&エクスポートすると、

シェイプアニメの、
  • 定義名
  • 並び順 
が変わってしまいます。

これが原因で公式配布のスクリプト(FaceUpdateや、まばたき)アニメーションからの表情制御が動作しなくなっています。


Blender上でこの辺を調整してエクスポートすれば、公式配布のスクリプト、アニメーション下でも表情が動きます。




Blenderで作業

Blender上で作業します。

Blenderを起動、公式配布のSDユニティちゃんのFBXファイルをインポートしておきます。
(参考: SDユニティちゃん活用その1 ~Blenderでインポート~

Humanoidモデルをインポートして使っていますが、シェイプアニメはGenericモデルでも同じだと思います。

  1. Outlinerウィンドウ上から、
  2. インポートしたモデルの階層を展開し、
  3. _faceオブジェクトを選択する。
  4. Propertiesウィンドウから、
  5. Object Dataをクリック
  6. Shape Keysパネルにシェイプキーの定義名一覧が表示。

図中のShape Keys一覧のように定義名、並び順を変更します。



Shake Keysの定義名の上でダブルクリックで名前を変更できます。
定義名を選択し、右にある上下ボタンで並び順を変更できます。



モデルをFBXエクスポートします。
(参考: SDユニティちゃん活用その3 ~Blenderでエクスポート~




Unityで作業


□インポート

Unity上で先程FBXエクスポートしたモデルをインポートします。
(参考: SDユニティちゃん活用その4 ~Blender出力のFBXファイルをUnityでインポート~)



□スクリプト設定

表情の動作確認に公式配布のFaceUpdateスクリプトを利用します。

インポートしたモデルにFaceUpdateスクリプトを追加、Inspectorからスクリプト内の変数を以下のように設定します。



Animatorにアニメーションコントローラ SD_unitychan_motion_humanoid を設定します。

AutoBlinkforSDスクリプトを追加します。(まばたき用)


これでUnityをPlayしてGUIボタンで表情の動作確認ができます。


※この辺の一連のスクリプト設定を自動化するスクリプト(C#)を書いたので後述します。何度か繰り返す場合は少し楽ができるかもしれません。




スクリプトで設定の自動化

以下のことを自動化するコードを書きました。

自動追加後の各スクリプトの持つ変数は、配布モデルの既定値に自動で初期化します。

  • Animatorにアニメーションコントローラ SD_unitychan_motion_humanoid を設定。
  • IdleChangerスクリプトを追加。
  • FaceUpdateスクリプトを追加。
    ※Animations配列のElementも設定します。
  • AutoBlinkforSDスクリプトを追加。
  • RandomWindスクリプトを追加。



□ダウンロード

C#ソースはGitHubに置いてあります。次のURLでサイトを開き、

https://github.com/maruton/Tools_for_SDUnityChan


右下付近の「Download.ZIP」でダウンロード&展開。

Setup_Animations_for_SDUnityChan.cs をUnityのAssetにドラッグ&ドロップして追加しておきます。



□利用方法

便宜上文中でモデルの呼称を以下のようにしています。

SD_unitychan_humanoid : 公式配布のPrefabsフォルダにあるモデル。
blender_SDUnityChan :  Blender経由でUnityにインポートしたモデル。


  1. SD_unitychan_humanoid がシーンにあることを確認
    もしなければシーンに配置します。

  2. blender_SDUnityChan をシーン上に配置。

  3. 空のGameObjectをシーンに配置。
    CTRL+SHIDT+N で空のGameObjectを追加できます。
    Setup_Animations_for_SDUnityChan を追加し、Inspector上の
    • Go_Original にシーン上の  SD_unitychan_humanoid をドラッグ&ドロップ。
    • Go_Target  にシーン上の blender_SDUnityChan をドラッグ&ドロップ。
  4. Unity を Play。
    START ~ COMPLETE とログウィンドウに表示されれば設定完了しています。
    ※もし ERROR や not found などが見える場合は、Go_Original、Go_Targetの設定やモデルに問題がある可能性があります。

  5. シーン上の blender_SDUnityChan をAssetにドラッグ&ドロップ。
    この状態で(UnityがPlay状態のまま)、シーン上の blender_SDUnityChan をAsset(フォルダ Assets/Blender_SDUnityChan/Prefab あたりに)にドラッグ&ドロップ。
    各種設定済み状態でAssetに保存されます。
    このモデル名を便宜上 blender_SDUnityChan 1 としておきます。
    ※名前はなんでも構いません。文中で区別する為です。

  6. Unity のPlayを停止。

  7. blender_SDUnityChan 1 をシーンに配置。
    Inspector上から以下のコンポーネントにチェックを入れてEnableに。
    • Animator。
    • AutoBlinkforSD
    • RandomWind


  8.  シーン上blender_SDUnityChan 1blender_SDUnityChan_FaceOKにリネーム。

  9. シーン上の blender_SDUnityChan_FaceOK をAsset(フォルダ Assets/Blender_SDUnityChan/Prefab あたりに)にドラッグ&ドロップ。

    以後このモデルを使えば、設定済み状態で使えます。

blender_SDUnityChan_FaceOKをシーンに配置してPlayします。
(他にSD_unitychan_humanoid 等のモデルはシーンに置かないで下さい)
GUIからいろいろボタン操作すると表情も動きます。


公式配布のアニメーション動作にも表情が連動します。

補足: ユレモノ設定(SDユニティちゃん活用その6 ~SDユニティちゃんにユレモノを自動設定する~)をしていない場合は、RandomWindスクリプトは外して下さい。Consoleウィンドウにエラー表示がでます。


0 件のコメント:

コメントを投稿