UnityゲームでLive2Dを使用する
Use Live2d Unity Games
ワインに入ります
見えません。黄河の水が上がってきて、水が海に戻ってきています。
見えません、ガオタンの鏡は悲しくて白くて青い絹のようです。
人生は喜びに満ちているので、金は空です。
役に立つのは当然で、お金はなくなります。
羊の調理と牛の屠殺は必須であり、300杯を飲む必要があります。
、Dan Qiushengがワインに入り、カップが止まります。
歌で、聞いてください。
鐘や太鼓は高価ではないので、起きないでほしいです。
古代の賢人は孤独ですが、酒飲みは彼らの名前を残します。
陳王の宴会は宴会で、ワインは1万本でした。
所有者が言っているのはお金が少ないということです、道をたどらなければなりません。
5頭の馬、数千頭の金、そして子供たちがワインに置き換えられ、一緒に販売されます。
この記事は最初に登場しました Lohanryのブログ 転載してご指定ください。
Live2Dとは
- Live2D 日本のCybernoids社によって開発されました。
- Live2Dには、この段階でバージョン2.1とバージョン3.0の2つのメジャーバージョンがあります。
- 国内2.1バージョンがより多く使用されています(ps。これは彼ら自身の感覚であり、データのサポートはありません。国内の議論が2.1であると感じてください)。
- 公式ウェブサイトにアクセスして、バージョン2.1をダウンロードできます。バージョン3.0は現在のバージョンのUnityをサポートできないため、使用されません。
UnityのLive2D
Live2DはUnityのサポートを追加したので、SDKをダウンロードしてからそれを注ぐだけです。直接実行できる簡単な例もいくつかあります。
この記事では、UnityでのLive2Dの使用について説明し、Live2Dの作成については説明しません。
Live2Dによってエクスポートされたファイルから、次の標準形式を確認できます。
- model.1024フォルダーには、キャラクターのモデルマップが配置されています。 DrawCallは複数のテクスチャが原因で発生するため、ゲームでは1つのテクスチャのみを使用するようにしてください。
- モーションフォルダはすべてアクションファイルです。mtn
- 式フォルダはすべてemoticons.mtnです
- Model.mocはLive2Dのモデルファイルです
- 物理学は物理計算ファイルです
- Pose.jsonを使用して、特定のニーズを達成するためにパーツを動的に切り替えることができます
Live2DのModel.jsonファイル
ここでは主にmodel.jsonファイルについて説明します
{ 'version':'Sample 1.0.0', 'model':'model.moc', 'textures':[ 'model.1024/texture_00.png' ], 'motions':{ 'idle':[ {'file':'motions/idle_01.mtn'} ], '':[ {'file':'motions/x1.mtn'} ] }, 'physics':'physics.json', 'hit_areas':[ {'name':'face','id':'D_REF.FACE'}, {'name':'body','id':'D_REF.BODY'}, {'name':'arm_l','id':'D_REF.ARM_L'} ] }
実際、このJsonファイルは存在できません。MOCファイルとテクスチャファイルをロードするメソッドを手動で呼び出す限り、Live2Dの基本が表示されています。
ただし、リソースの管理に便利なため、ここではmodel.jsonを使用します。 L2Dモデルに含まれるリソースの数を確認すると便利です。
コードに直接ロードすることもできますが、ブートファイルとしてjsonを使用して、今ロードする必要のあるリソースと、簡単に呼び出すために参照されるリソースを指定する必要があります。
ゲームでは、SDKに含まれているLive2Dデモを参照し、フレームワークをベースとしてロードしてから、プロジェクトで使用できるフレームワークを作成するように変更します。
このModel.jsonのKey-Value値は、デモのフレームワークを参照します。自分でセットを作ることもできますが、既存のものを使うこともできます。
UnityでのLive2Dの問題
UnityでLive2Dを使用する場合、注意すべき問題がたくさんあります。使用中のピットもたくさん踏んでいます。今のところ解決策はありますが、これらは最善の解決策ではない可能性があります。みんなが私が指摘するのを手伝ってくれることを願っています。
1.Live2DのRenderMode。
このパラメータを使い始めたとき、多くの人がこのパラメータの設定に気づかなかったのかもしれません。デフォルトはL2D_RENDER_DRAW_MESH_NOWです。
このパラメーターには2つの変数があります L2D_RENDER_DRAW_MESH_NOW と L2D_RENDER_DRAW_MESH 。
L2D_RENDER_DRAW_MESH_NOWが入っているので主に区別されます OnRenderObject タイムコール ドロー() 関数。
OnRenderObjectでDraw()を呼び出すと、他のオブジェクトによって上書きされることなく、Live2Dが最後にレンダリングされます。
そしてL2D_RENDER_DRAW_MESHは 更新() 呼び出された ドロー() 半透明のオブジェクトのレンダリングを可能にする関数。
2.Live2Dのグラフィックレベルの問題
UnityでL2DSDK2.1を使用すると、非常に苦痛な問題が発生します。彼はレイヤーを変更できません。
私はこれらのプログラムをUguiとLive2Dの組み合わせで使用しました:
- UnityのRTテクノロジーを使用します。
- 専用カメラで撮影し、UIにレンダリングします。
- 実際の使用では、行列変換が必要です。
- そして、食事のパフォーマンスや記憶と比較して、必要以上に特別な用途はありません。
- レベル制御にはsortorderを使用します。
- 他の非Live2DUIのソート順を調整します。
- Uguiでsortorderを使用して、レンダリングレベルを指定できます。
- ただし、プロジェクトは当初live2Dを考慮していなかったため、Layerの定義は同じDeaflutにあります。
- レンダリング時に、L2dがすべて次数0のレイヤーにレンダリングされると思われます。
- したがって、この状況で、階層化する必要のある基になるオブジェクトの順序を負の数に設定することを検討できるとします。レイヤーのレイヤー化の問題を解決するには、上位レイヤーのオブジェクトの順序を正の数に設定する必要があります。
- L2D_RENDER_DRAW_MESH_NOWを使用して直接オーバーレイします。
- 2つのLive2Dモデルを重ね合わせる必要がある場合は、L2D_RENDER_DRAW_MESH_NOWをお勧めします。
- それなら誰かが誰がそれをレンダリングするだろうと言うだろうか?
- このような状況をテストした後、誰がインスタンス化され、誰が最終的にレンダリングするか。
- したがって、このスキームを使用する場合は、管理用のLive2Dビルドキューを作成するのが最善です。レンダリング順序を維持するため。
- オーバーレイにはL2D_RENDER_DRAW_MESHを使用します。
- 2つのLive2Dオーバーレイがあり、レンダリングモードとしてL2D_RENDER_DRAW_MESHを使用する必要がある状況が発生したとします。
- 2つのLive2Dがスーパーインポーズされる順序は、シーン内の順序と一致します。
- ただし、場合によっては、2つのLive2Dの一部の侵入に問題が発生することに注意してください。
- この問題の発生は、Live2D制作におけるレイヤーの浸透だと思います。
- しかし、それが再現されていない場合もあり、アートは最近忙しく、その理由を見つけるためにそれをテストする時間がありません。
- RenderQueueを使用します。
- ソリューションがUnity + NGUI + Live2Dの場合は、並べ替えにRenderQueueを使用することを検討してください。
- LiveShad独自のシェーダーが3000の場合、レベルに応じて独自のUIのRenderQueueを設定できますが、Live2DのRenderQueueの設定はサポートされていません。
- 同時に、UGUIを使用している場合でも、パーティクルをスーパーインポーズする場合など、RnederQueueを使用できます。
Live2Dアクション管理
- Live2Dで動作するファイルは、mtnサフィックスが付いたファイルです。
- model.jsonでは、感情の辞書を使用して管理できます
- キーで複数の異なる種類のアクションファイルを管理します。
Live2Dコードの解析(例としてデモのSampleApp1プロジェクトを使用):
1.リソース読み込み入力機能
LAppModel.LoadFromResource(String dir,String filename)
2.Model.Init関数(変更はDrawModeスイッチをサポートします)
public void Init(String modelJson,int DrawMode) { updating = true initialized = false modelSetting = new ModelSettingJson(modelJson) if (LAppDefine.DEBUG_LOG) Debug.Log('Start to load model') // Live2D Model if (modelSetting.GetModelFile() != null) { loadModelData(modelHomeDir + modelSetting.GetModelFile()) //setRenderMode must be loaded before the map is loaded after loading the Moc file. GetLive2DModelUnity().setRenderMode(DrawMode) var len = modelSetting.GetTextureNum() for (int i = 0 i 3.Model.Json解析ガイド
//In fact, all the actions and other resources are similarly managed. If you need to improve performance, you can implement the array separately. / / Analyze model.json through ModelSettingJson modelSetting = new ModelSettingJson(modelJson) / / Through function tracking can be found that it is actually returning json directly len = modelSetting.GetTextureNum()
4.アクションプレイ
ゲーム内のアクションは次のように分けられます。
- スタンバイアクション、
- 特別なスタンバイアクション、
- タッチイベントアクション、
- ショックイベントアクション。
スタンバイアクションに加えて、すべてのアクションを相互に交換できます。
特別なスタンバイアクション、タッチアクション、バイブレーションアクションは、辞書として維持され、一意のインデックスを持ち、呼び出されます。
/ / This method is already modified by me, the original method can be found in the example, the original method is to support the index number to play, I modified to play according to the name, you can modify it according to the code is relatively simple. LAppModel.StartMotion(string group,string motionName,int priority)
Live2D式管理
- ゲーム内の表現はあまり多くないので、議論はありません。
- タグファイルはjson形式です。
- 使用方法はアクションと同様です。
- 式を使用するときは、カバーの問題に注意してください。
LAppModel.SetExpression(string name)
Live2Dポート管理
Live2Dアニメーションの再生では、音声と口のタイプを次の方法で作成したい場合があります。
-
PARAM_MOUTH_OPEN_Yを制御する。
- システムレベルのAPIを使用して、現在のデバイスの再生音量を取得します
- 0-1の間で定量化
- 次に、PARAM_MOUTH_OPEN_Yを設定して、最新の開口部を制御します。
-
別のmtnマウスファイルを使用する
- 口のタイプのパラメータに対して個別にmtnアクションを実行します
- さまざまなMotionQueueManagerを作成して、口の形と一般的なアニメーションを管理します
- あなたは正しくなるために同時にプレーする必要があります。
Live2Dポーズファイル
- ゲームでPose.jsonファイルを使用して、特定の機能を実装できます。
- 実際、主な方法は、特定の特性を実現するために部品を切り替えることです。
- Pose.jsonファイルを読み取り、必要に応じて必要なコンポーネントをロードします
LAppModel.loadPose(String path)
- そうすると、ポーズファイルを切り替えてから最初に戻すことができないことに誰もが気付くでしょう。
- その後、テストの結果、再初期化によって復元されたことが判明しました。コードは次のように表示されます。
// Very simple, the pose variable is the L2DPose type, which is a variable on the LAppModel. //live2DModel is the current ALive2DModel. // This will be restored to the point before the pose file is loaded. pose.initParam(live2DModel)
Live2Dタッチイベントの管理
- Live2Dタッチイベントは、コンポーネント全体の再利用を改善するために、ゲームのシーンごとに異なります。
- コンポーネントのタッチイベントはイベントチェーンです
- さまざまなシナリオのコントローラーは、デリゲートを使用してイベントタッチイベントに反応できます。反応後、関数の戻り値を使用して、イベント全体の処理を続行する次のレベルを決定できるため、柔軟性が向上します。
しっぽに書かれている
- 実際、Live2Dのその他の機能は十分に検討されていません。
- この記事は、翡翠を誘発する役割として、私自身の能力が限られているため、単純な調査です。
- 国内情報は当面まだ比較的不足しています。私は私の大胆さを共有しました、そしてあなたが嘲笑されないことを願っています。
ジョーカー最後に、小さな広告を作成します〜
私の小さな記事を転載するのが好きです
ブログ: http://www.hailantown.com