【Unity+Live2D】UnityからLive2Dモデルを触るときの個人的メモ
UnityからLive2Dを触るときにこうしたほうが良かったとかこうだったのかとか思ったとこの個人的なメモ。
あくまで個人製作の中で触ってて思ったことなので当然のことばかりかもしれない
そうじゃないよとかより良い方法があるよとかあればコメント頂けると嬉しいです。
1.Live2Dモデル作成時にパラメータIDをつけ忘れないように
2.モデルのパラメータを直接操作する際IDを使う
3.モデルの画質
4.モデルの更新タイミング
Live2Dモデル作成時にパラメータIDをつけ忘れないように
モデルにパラメータを設定する際、パラメータの「名前」と「ID」を指定できますが、
このとき必ず「ID」にわかりやすい名前を付けましょう。
Unityからモデルを見た際、パラメータの名前ではなくIDが表示されてしまうため、デフォルトの「Param0」みたいなIDになってるとなんのパラメータなのかがわかりづらいです。
モデルのパラメータを直接操作する際IDを使う
公式のサンプルがそうなっていなかったので一応。
Cubism SDK for Unityの値の操作タイミングについて
上記公式マニュアルで、パラメータ操作はLateUpdateでやること~と書いてあります。それはまぁいいのですが、サンプルコードが
// 推奨 private void LateUpdate() { _cubismModel.Parameters[0].Value = value; _cubismModel.Parameters[1].BlendToValue(CubismParameterBlendMode.Additive, value); }
こうなってます。
上記のように、モデル作成時に設定したパラメータは上から順に0,1,2,3,と配列に設定されていくのですが、
当然パラメータとパラメータの間に新たにパラメータを設定することもあると思います。
そうするとプログラム中で指定した添え字が変わってしまうのでIDで指定したほうがいいです。
しかし、CubismModelクラスから直接IDを指定してパラメータを検索することができなかったので、私の場合以下のような拡張メソッドを作っておきました。
using System.Collections; using System.Collections.Generic; using Live2D.Cubism.Core; using UnityEngine; public static class CubismModelExtention { public static CubismParameter FindParam(this CubismModel self, string paramId) { CubismParameter[] cp = self.Parameters; foreach(CubismParameter cubismParameter in cp) { if(paramId == cubismParameter.Id) { return cubismParameter; } } throw new System.Exception("指定されたIDを持つParametaterがありません。" + "ID:" + paramId); } }
//使用例 _model.FindParam(param.paramId).Value = 30;
(LateUpdateから頻繁に呼ぶような場合パフォーマンスが落ちたりするだろうか・・・)
モデルの画質
作ったモデルにもよると思うのですが、初期状態だと画質が荒いです。
モデルに付随しているテクスチャファイルをUnity上で選択し、以下のようにMaxSizeやCompressionを設定し直した方がいいです。
実行するプラットフォームごとに設定できるのでそこは調整しましょう。
モデルの更新タイミング
インポートしたモデルを更新
上記工式マニュアルの通り一度Unityに取り込んだモデルを更新できるのですが・・・
私のやり方が悪いのか、更新はできたもののモデルの見た目がめちゃくちゃになってしまうケースがありました。
恐らくテクスチャアトラスの内容かサイズが変わった時に何かある気がするのですが・・
細かいところは未検証ですが、テクスチャアトラスが大きく変わる予定があるのであれば、その作業の完了を待ってからモデルを取り込んだ方が良さそうです。