こんにちは、y_a_s_です。
Live2DモデルのモーションをMecanimで管理できないかな~って考えてたら、無理矢理なやり方を思いついたので試してみました。
※プログラムの話もしますが、プログラミングわからない人でも扱えるように書いてます。
Mecanimについて:
詳しくは Unity公式のマニュアル をご覧ください。
要はUnityに搭載されているアニメーション機能だそうです。
ちなみに、既に Live2DのモーションをMecanim制御するやり方 はありますが、
今回はもう一歩踏み込んで、mtnも使わないやり方でやってみます。冒頭に書いたとおり無理矢理ですが。
Live2DモデルをMecanimで制御する手順:
・プログラミングわからない人向け:
以下の[パラメータID]をパラメータIDに置き換えて、パラメータの分だけ追加してください。
live2DModel.setParamFloat("[パラメータID]", [パラメータID]);
プログラムの話はここで終わりです。
ここからはUnity上での操作になります。
5.ProjectビューでCreate > Animator Controllerをクリックします。



8.ProjectビューでCreate > Animation をクリックして、AnimationClipを作成します。
これでLive2Dのアニメーションを制御するのが今回の目的です。


12.Add Property から、2で書いた変数を片っ端から(若しくは必要な分だけ)追加(+をクリック)します。
さらにもう一歩踏み込んだTips(プログラミングできる人向けの話):
この方式でなら、実はmtnからAnimationClipも作れます。
mtnは実はテキストファイルなので、中身をパースして、パラメータごとにAnimationCurveを作って
AnnimationClipを作成するとイケます。
利点:
・修正するときAnimatorまで戻らなくていい
・モーションのブレンドが可能
・モーションの途中でイベントを発行できる(途中で音声を再生等)
注意:
・このやり方の欠点として、AssetBundleにはスクリプトを含められないので、
アプリケーション自体にスクリプトを含めておかなくてはいけません。
・また、AnimationClipで制御してるのはモデルのパラメータではなくfloat値なので、
当然反転はできません。
以上です。
慌てて書いたので、わからないことなどありましたらコメントまでお願いします。
明日は三度naotaroさんです。
Live2DモデルのモーションをMecanimで管理できないかな~って考えてたら、無理矢理なやり方を思いついたので試してみました。
※プログラムの話もしますが、プログラミングわからない人でも扱えるように書いてます。
(Mecanim自体プログラミングの知識が必要なものですが、アニメーションつけるところまではデザイ
ナーさんが絡むので)
ナーさんが絡むので)
Mecanimについて:
詳しくは Unity公式のマニュアル をご覧ください。
要はUnityに搭載されているアニメーション機能だそうです。
ちなみに、既に Live2DのモーションをMecanim制御するやり方 はありますが、
今回はもう一歩踏み込んで、mtnも使わないやり方でやってみます。
環境:
・OS:実行環境はWindows7 Professional SP1(Macでも問題なし)
・Unity:Unity 5.2. (無料版でも4.X系列でも問題なし)
・Unity:Unity 5.2. (無料版でも4.X系列でも問題なし)
・SDK:Live2D SDK for Unity 2.1.01_1 (2.0でも大丈夫)
Live2DモデルをMecanimで制御する手順:
1. SDK付属のサンプルプロジェクト「Simple」を開きます。
(/sample/Simple/Assets/Scene/Sample.unity)

2. Scripts/SimpleModel をダブルクリックして開きます。
ちょっとだけプログラム触りますが、難しくはないはずです。


3.SampleModel に、モデルのパラメータIDを変数名にしたpublicなfloat型の変数を必要な分だけ用意します。
ついでにそのパラメータの初期値で初期化しておきましょう。
[例]
(/sample/Simple/Assets/Scene/Sample.unity)

2. Scripts/SimpleModel をダブルクリックして開きます。
ちょっとだけプログラム触りますが、難しくはないはずです。


3.SampleModel に、モデルのパラメータIDを変数名にしたpublicなfloat型の変数を必要な分だけ用意します。
ついでにそのパラメータの初期値で初期化しておきましょう。
[例]
public class SimpleModel : MonoBehaviour{public TextAsset mocFile ;public Texture2D[] textureFiles ;private Live2DModelUnity live2DModel;private Matrix4x4 live2DCanvasPos;// 追加部分public float PARAM_ANGLE_X = 0 ;public float PARAM_ANGLE_Y = 0 ;public float PARAM_ANGLE_Z = 0 ;/*略*/void Start()
パラメータIDや初期値はModelerから確認できます。
モデルはマニュアルのサンプル「ハル」を使ってます。
・プログラミングわからない人向け:
以下の[ParamID]をパラメータIDに、[default]をそのパラメータの初期値に置き換えたものを
書いていってください。
0.1みたいに小数点以下がある数値の場合は、0.1f というように後ろに半角の f をつけてください。
public float [ParamID] = [default] ;
4.Update()内で、3で設定した数値をLive2Dのモデルのパラメータに反映させます。
モデルはマニュアルのサンプル「ハル」を使ってます。
・プログラミングわからない人向け:
以下の[ParamID]をパラメータIDに、[default]をそのパラメータの初期値に置き換えたものを
書いていってください。
0.1みたいに小数点以下がある数値の場合は、0.1f というように後ろに半角の f をつけてください。
public float [ParamID] = [default] ;
4.Update()内で、3で設定した数値をLive2Dのモデルのパラメータに反映させます。
void Update(){if (live2DModel == null) return;live2DModel.setMatrix(transform.localToWorldMatrix * live2DCanvasPos);if (!Application.isPlaying){live2DModel.update();return;}// ここは不要//double t = (UtSystem.getUserTimeMSec() / 1000.0) * 2 * Math.PI;//live2DModel.setParamFloat("PARAM_ANGLE_X", (float)(30 * Math.Sin(t / 3.0)));live2DModel.setParamFloat("PARAM_ANGLE_X", PARAM_ANGLE_X);live2DModel.setParamFloat("PARAM_ANGLE_Y", PARAM_ANGLE_Y);live2DModel.setParamFloat("PARAM_ANGLE_Z", PARAM_ANGLE_Z);/*略*/live2DModel.update();}
・プログラミングわからない人向け:
以下の[パラメータID]をパラメータIDに置き換えて、パラメータの分だけ追加してください。
live2DModel.setParamFloat("[パラメータID]", [パラメータID]);
プログラムの話はここで終わりです。
ここからはUnity上での操作になります。
5.ProjectビューでCreate > Animator Controllerをクリックします。


6.HierarchyビューでモデルのGameObjectを選択し、Inspectorビュー下部からAdd Component > Miscelaneous > Animatorをクリックします。






7.続けてInspectorビュー上でAnimatorのControllerという項目に、5で作成したAnimator Controllerをドラッグアンドドロップします。

8.ProjectビューでCreate > Animation をクリックして、AnimationClipを作成します。
これでLive2Dのアニメーションを制御するのが今回の目的です。


12.Add Property から、2で書いた変数を片っ端から(若しくは必要な分だけ)追加(+をクリック)します。
あとは7~11を好きなだけ繰り返すと、あとはMecanimで管理ができるようになります。
さらにもう一歩踏み込んだTips(プログラミングできる人向けの話):
この方式でなら、実はmtnからAnimationClipも作れます。
mtnは実はテキストファイルなので、中身をパースして、パラメータごとにAnimationCurveを作って
AnnimationClipを作成するとイケます。
利点:
・修正するときAnimatorまで戻らなくていい
・モーションのブレンドが可能
・モーションの途中でイベントを発行できる(途中で音声を再生等)
注意:
・このやり方の欠点として、AssetBundleにはスクリプトを含められないので、
アプリケーション自体にスクリプトを含めておかなくてはいけません。
・また、AnimationClipで制御してるのはモデルのパラメータではなくfloat値なので、
当然反転はできません。
以上です。
慌てて書いたので、わからないことなどありましたらコメントまでお願いします。
明日は三度naotaroさんです。