CubismUserData3Json.cs 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. /**
  2. * Copyright(c) Live2D Inc. All rights reserved.
  3. *
  4. * Use of this source code is governed by the Live2D Open Software license
  5. * that can be found at https://www.live2d.com/eula/live2d-open-software-license-agreement_en.html.
  6. */
  7. using Live2D.Cubism.Framework.UserData;
  8. using System;
  9. using System.Collections.Generic;
  10. using UnityEngine;
  11. namespace Live2D.Cubism.Framework.Json
  12. {
  13. /// <summary>
  14. /// Handles user data from cdi3.json.
  15. /// </summary>
  16. [Serializable]
  17. public sealed class CubismUserData3Json
  18. {
  19. /// <summary>
  20. /// Loads a cdi3.json asset.
  21. /// </summary>
  22. /// <param name="userData3Json">cdi3.json to deserialize.</param>
  23. /// <returns>Deserialized cdi3.json on success; <see langword="null"/> otherwise.</returns>
  24. public static CubismUserData3Json LoadFrom(string userData3Json)
  25. {
  26. return (string.IsNullOrEmpty(userData3Json))
  27. ? null
  28. : JsonUtility.FromJson<CubismUserData3Json>(userData3Json);
  29. }
  30. /// <summary>
  31. /// Loads a cdi3.json asset.
  32. /// </summary>
  33. /// <param name="userData3JsonAsset">cdi3.json to deserialize.</param>
  34. /// <returns>Deserialized cdi3.json on success; <see langword="null"/> otherwise.</returns>
  35. public static CubismUserData3Json LoadFrom(TextAsset userData3JsonAsset)
  36. {
  37. return (userData3JsonAsset == null)
  38. ? null
  39. : LoadFrom(userData3JsonAsset.text);
  40. }
  41. /// <summary>
  42. /// Makes <see cref="CubismUserDataBody"/> array that was selected by <see cref="CubismUserDataTargetType"/>.
  43. /// </summary>
  44. /// <param name="targetType">Target object type.</param>
  45. /// <returns><see cref="CubismUserDataBody"/> array. Selected by <see cref="CubismUserDataTargetType"/>.</returns>
  46. public CubismUserDataBody[] ToBodyArray(CubismUserDataTargetType targetType)
  47. {
  48. var userDataList = new List<CubismUserDataBody>();
  49. for (var i = 0; i < UserData.Length; ++i)
  50. {
  51. var body = new CubismUserDataBody
  52. {
  53. Id = UserData[i].Id,
  54. Value = UserData[i].Value
  55. };
  56. switch (targetType)
  57. {
  58. case CubismUserDataTargetType.ArtMesh:
  59. {
  60. // Only drawables.
  61. if (UserData[i].Target == "ArtMesh")
  62. {
  63. userDataList.Add(body);
  64. }
  65. break;
  66. }
  67. default:
  68. {
  69. break;
  70. }
  71. }
  72. }
  73. return userDataList.ToArray();
  74. }
  75. #region Json Data
  76. /// <summary>
  77. /// Json file format version.
  78. /// </summary>
  79. [SerializeField]
  80. public int Version;
  81. /// <summary>
  82. /// Additional data describing physics.
  83. /// </summary>
  84. [SerializeField]
  85. public SerializableMeta Meta;
  86. /// <summary>
  87. /// Array of user data.
  88. /// </summary>
  89. [SerializeField]
  90. public SerializableUserData[] UserData;
  91. #endregion
  92. #region Json Helpers
  93. /// <summary>
  94. /// Additional data describing user data.
  95. /// </summary>
  96. [Serializable]
  97. public struct SerializableMeta
  98. {
  99. /// <summary>
  100. /// Number of user data.
  101. /// </summary>
  102. [SerializeField]
  103. public int UserDataCount;
  104. /// <summary>
  105. /// Total number of user data.
  106. /// </summary>
  107. [SerializeField]
  108. public int TotalUserDataCount;
  109. }
  110. /// <summary>
  111. /// User data.
  112. /// </summary>
  113. [Serializable]
  114. public struct SerializableUserData
  115. {
  116. /// <summary>
  117. /// Type of target object.
  118. /// </summary>
  119. [SerializeField]
  120. public string Target;
  121. /// <summary>
  122. /// Name of target object.
  123. /// </summary>
  124. [SerializeField]
  125. public string Id;
  126. /// <summary>
  127. /// Value.
  128. /// </summary>
  129. [SerializeField]
  130. public string Value;
  131. }
  132. #endregion
  133. }
  134. }