Json

最終更新: 2021年6月10日

概要

Live2D Cubismでは、ランタイム用データのいくつかをjson形式で扱っています。
Cubism SDK for Unity には、それらのjson形式のファイルをパース、及びインスタンス化を行うクラスが同梱されています。

SDK同梱のアセットインポーターによって、それらがインポートされたときにパース、インスタンス化していますが、ユーザがランタイムで読み込ませることも可能です。

CubismModel3Json

.model3.jsonのパーサです。

.model3.json内に記述されたモーションや表情など、各種他のjsonのパスを取得することができます。

CubismModel3Jsonで.model3.jsonをパースするには、CubismModel3Json.LoadAtPath() を使用します。

var json = ((TextAsset) Resources.Load<TextAsset>("path/to/file")).text;

var model3Json = CubismModel3Json.LoadAtPath(json);

パースしたデータからは、.model3.jsonに記述された各種ファイルの相対パスを取得することが可能です。

// .moc3
var mocPath = model3Json.FileReferences.Moc;

// textures
for(var i = 0; i < model3Json.FileReferences.Textures.Length; i++)
{
    var texturePath = model3Json.FileReferences.Textures[i];
}

// .physics3.json
var physicsPath = model3Json.FileReferences.Physics;

// .userdata3.json
var userdataPath = model3Json.FileReferences.UserData;

...

基本的に.model3.jsonの階層と同じ構造でパスを取得することができますが、.model3.jsonに記述された表情用データの参照につきましては独自の構造となっております。
これは、Cubismにおける.model3.jsonの構造の仕様上、UnityのビルトインのJsonパーサであるJsonUtilityでパースできないためです。
Cubism SDK for Unity では、表情データの参照だけ独自のJsonパーサによってパースしております。

パースした.model3.jsonからモデルのPrefabを生成するには、CubismModel3Json.ToModel()を使用します。

// Initialize
var model = model3Json.ToModel();

// Original Workflow
var modelForOW = model3Json.ToModel(true);

Cubism SDK for Unity に実装されている処理は、Unityエディタ上からプロジェクト内のアセットを読み込むことを前提としております。
ランタイムでAssetBundleなどから読み込む場合、読み込み処理をユーザ側で実装して頂く必要がございます。

ランタイムでのモデルの読み込み方法については こちら のチュートリアルをご覧ください。

CubismMotion3Json

.motion3.jsonのパーサです。

.motion3.json内に記述されたカーブ情報からAnimationClipを生成することができます。

CubismMotion3Jsonで.motion3.jsonをパースするには、CubismMotion3Json.LoadFrom() を使用します。

var json = ((TextAsset) Resources.Load<TextAsset>("path/to/file")).text;
 
var motion3Json = CubismMotion3Json.LoadFrom(json);

パースした.motion3.jsonからAnimationClipを生成するには、CubismMotion3Json.ToAnimationClip() を使用します。

// Initialize
var animationClip = motion3Json.ToAnimationClip();

// Original Workflow
var animationClipForOW = motion3Json.ToAnimationClip(true, true, true, pose3Json);

CubismUserData3Json

.userdata3.jsonのパーサです。

.userdata3.json内に記述された情報からモデルのアートメッシュにユーザデータを適用することができます。

CubismUserData3Jsonで.userdata3.jsonをパースするには、CubismUserData3Json.LoadFrom()を使用します。

var json = ((TextAsset) Resources.Load<TextAsset>("path/to/file")).text;
 
var userData3Json = CubismUserData3Json.LoadFrom(json);

パースした.userdata3.jsonからユーザデータを取得するには、CubismUserData3Json.ToBodyArray()を使用します。

var drawableBodies = userData3Json.ToBodyArray(CubismUserDataTargetType.ArtMesh);

CubismPhysics3Json

.physics3.jsonのパーサです。

.physics3.json内に記述された物理演算設定をUnityで使用できるよう変換することができます。

CubismPhysics3Jsonで.physics3.jsonをパースするには、CubismPhysics3Json.LoadFrom()を使用します。

var json = ((TextAsset) Resources.Load<TextAsset>("path/to/file")).text;
 
var physics3Json = CubismPhysics3Json.LoadFrom(json);

パースした.physics3.jsonからUnityで扱う形式に物理演算設定を変換するには、CubismPhysics3Json.ToRig() を使用します。

var cubismPhysicsController = GetComponent<CubismPhysicsController>();
cubismPhysicsController.Initialize(physics3Json.ToRig());

CubismExp3Json

.exp3.jsonのパーサです。

.exp3.json内に記述された表情差分の情報をUnity上で扱う形式に変換することができます。

CubismExp3Jsonで.exp3.jsonをパースするには、CubismExp3Json.LoadFrom()を使用します。

var json = ((TextAsset) Resources.Load<TextAsset>("path/to/file")).text;
 
var exp3Json = CubismExp3Json.LoadFrom(json);

CubismPose3Json

.pose3.jsonのパーサです。

.pose3.json内に記述された情報から、Unity上でパーツの表示状態を制御する設定を取得できます。
Cubism SDK for Unity においては、Poseは生成されるAnimationClipのカーブを加工するのに使用されます。

Pose機能の詳細につきましては こちら をご覧ください。

CubismPose3Jsonで.pose3.jsonをパースするには、CubismPose3Json.LoadFrom()を使用します。

var json = ((TextAsset) Resources.Load<TextAsset>("path/to/file")).text;

var pose3Json = CubismPose3Json.LoadFrom(json);

CubismDisplayInfo3Json

.cdi3.jsonのパーサです。

.cdi3.jsonには、Cubismエディタで設定されたパラメータやパーツ、パラメータグループの名前と、それらと対になる各IDが記述されています。

Cubism SDK for Unity においては、Inspectorウィンドウに表示されるパラメータやパーツの名前表示に使用しています。
.cdi3.jsonが存在しないモデルの場合はIDが表示されます。

CubismDisplayInfo3Json で.cdi3.jsonをパースするには、CubismDisplayInfo3Json.LoadFrom()を使用します。

var json = ((TextAsset) Resources.Load<TextAsset>("path/to/file")).text;

var cdi3Json = CubismDisplayInfo3Json.LoadFrom(json);
この記事に関するご意見・
ご要望をお聞かせください。