/// <summary> /// Loads a pose3.json. /// </summary> /// <param name="pose3Json">pose3.json to deserialize.</param> /// <returns>Deserialized pose3.json on success; <see langword="null"/> otherwise.</returns> public static CubismPose3Json LoadFrom(string pose3Json) { if (string.IsNullOrEmpty(pose3Json)) { return(null); } var ret = new CubismPose3Json(); var value = CubismJsonParser.ParseFromString(pose3Json); ret.Type = (value.Get("Type") == null) ? null : value.Get("Type").toString(); ret.FadeInTime = (value.Get("FadeInTime") == null) ? 0.5f : value.Get("FadeInTime").ToFloat(); var groups = (value.Get("Groups") == null) ? null : value.Get("Groups").GetVector(null); if (groups != null) { ret.Groups = new SerializablePoseGroup[groups.Count][]; for (var i = 0; i < groups.Count; ++i) { var count = groups[i].GetVector(null).Count; ret.Groups[i] = new SerializablePoseGroup[count]; for (var j = 0; j < count; ++j) { ret.Groups[i][j].Id = groups[i].GetVector(null)[j].Get("Id").toString(); var link = groups[i].GetVector(null)[j].Get("Link").GetVector(null); if (link.Count == 0) { continue; } ret.Groups[i][j].Link = new string[link.Count]; for (var linkCount = 0; linkCount < link.Count; ++linkCount) { ret.Groups[i][j].Link[linkCount] = link[linkCount].toString(); } } } } return(ret); }
/// <summary> /// Loads a model.json asset. /// </summary> /// <param name="assetPath">The path to the asset.</param> /// <param name="loadAssetAtPath">Handler for loading assets.</param> /// <returns>The <see cref="CubismModel3Json"/> on success; <see langword="null"/> otherwise.</returns> public static CubismModel3Json LoadAtPath(string assetPath, LoadAssetAtPathHandler loadAssetAtPath) { // Load Json asset. var modelJsonAsset = loadAssetAtPath(typeof(string), assetPath) as string; // Return early in case Json asset wasn't loaded. if (modelJsonAsset == null) { return(null); } // Deserialize Json. var modelJson = JsonUtility.FromJson <CubismModel3Json>(modelJsonAsset); // Finalize deserialization. modelJson.AssetPath = assetPath; modelJson.LoadAssetAtPath = loadAssetAtPath; // Set motion references. var value = CubismJsonParser.ParseFromString(modelJsonAsset); // Return early if there is no references. if (!value.Get("FileReferences").GetMap(null).ContainsKey("Motions")) { return(modelJson); } var motionGroupNames = value.Get("FileReferences").Get("Motions").KeySet().ToArray(); modelJson.FileReferences.Motions.GroupNames = motionGroupNames; var motionGroupNamesCount = motionGroupNames.Length; modelJson.FileReferences.Motions.Motions = new SerializableMotion[motionGroupNamesCount][]; for (var i = 0; i < motionGroupNamesCount; i++) { var motionGroup = value.Get("FileReferences").Get("Motions").Get(motionGroupNames[i]); var motionCount = motionGroup.GetVector(null).ToArray().Length; modelJson.FileReferences.Motions.Motions[i] = new SerializableMotion[motionCount]; for (var j = 0; j < motionCount; j++) { if (motionGroup.Get(j).GetMap(null).ContainsKey("File")) { modelJson.FileReferences.Motions.Motions[i][j].File = motionGroup.Get(j).Get("File").toString(); } if (motionGroup.Get(j).GetMap(null).ContainsKey("FadeInTime")) { modelJson.FileReferences.Motions.Motions[i][j].FadeInTime = motionGroup.Get(j).Get("FadeInTime").ToFloat(); } if (motionGroup.Get(j).GetMap(null).ContainsKey("FadeOutTime")) { modelJson.FileReferences.Motions.Motions[i][j].FadeOutTime = motionGroup.Get(j).Get("FadeOutTime").ToFloat(); } } } return(modelJson); }