Json

最終更新: 2021年6月10日

概述

Live2D Cubism以json格式处理一些运行用数据。
Cubism SDK for Unity包括解析和副本化这些json格式文件的类。

SDK中包含的资产载入器会在它们被载入时解析并副本化它们,但它也可以由用户在运行时导入。

CubismModel3Json

它是.model3.json的解析器。

您可以获得各种其他json路径,例如.model3.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解析器仅解析表情数据的参考。

使用CubismModel3Json.ToModel()从解析的.model3.json生成模型Prefab。

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

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

Cubism SDK for Unity中实装的处理以从Unity Editor导入项目中的资产为前提。
在运行时从 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);

使用CubismMotion3Json.ToAnimationClip()从解析的.motion3.json生成AnimationClip。

// 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);

使用CubismPhysics3Json.ToRig()将物理模拟设置从解析的.physics3.json转变为Unity处理的格式。

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 Editor中设置的参数、部件和参数组的名称、以及配对它们的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);
关于本报道,敬请提出您的意见及要求。