CubismParameter.cs 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  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.Core.Unmanaged;
  8. using Live2D.Cubism.Framework;
  9. using UnityEngine;
  10. namespace Live2D.Cubism.Core
  11. {
  12. /// <summary>
  13. /// Single <see cref="CubismModel"/> parameter.
  14. /// </summary>
  15. [CubismDontMoveOnReimport]
  16. public sealed class CubismParameter : MonoBehaviour
  17. {
  18. #region Factory Methods
  19. /// <summary>
  20. /// Creates drawables for a <see cref="CubismModel"/>.
  21. /// </summary>
  22. /// <param name="unmanagedModel">Handle to unmanaged model.</param>
  23. /// <returns>Drawables root.</returns>
  24. internal static GameObject CreateParameters(CubismUnmanagedModel unmanagedModel)
  25. {
  26. var root = new GameObject("Parameters");
  27. // Create parameters.
  28. var unmanagedParameters = unmanagedModel.Parameters;
  29. var buffer = new CubismParameter[unmanagedParameters.Count];
  30. for (var i = 0; i < buffer.Length; ++i)
  31. {
  32. var proxy = new GameObject();
  33. buffer[i] = proxy.AddComponent<CubismParameter>();
  34. buffer[i].transform.SetParent(root.transform);
  35. buffer[i].Reset(unmanagedModel, i);
  36. }
  37. return root;
  38. }
  39. #endregion
  40. /// <summary>
  41. /// Unmanaged parameters from unmanaged model.
  42. /// </summary>
  43. private CubismUnmanagedParameters UnmanagedParameters { get; set; }
  44. /// <summary>
  45. /// <see cref="UnmanagedIndex"/> backing field.
  46. /// </summary>
  47. [SerializeField, HideInInspector]
  48. private int _unmanagedIndex = -1;
  49. /// <summary>
  50. /// Position in unmanaged arrays.
  51. /// </summary>
  52. internal int UnmanagedIndex
  53. {
  54. get { return _unmanagedIndex; }
  55. private set { _unmanagedIndex = value; }
  56. }
  57. /// <summary>
  58. /// Copy of Id.
  59. /// </summary>
  60. public string Id
  61. {
  62. get
  63. {
  64. // Pull data.
  65. return UnmanagedParameters.Ids[UnmanagedIndex];
  66. }
  67. }
  68. /// <summary>
  69. /// Minimum value.
  70. /// </summary>
  71. public float MinimumValue
  72. {
  73. get
  74. {
  75. // Pull data.
  76. return UnmanagedParameters.MinimumValues[UnmanagedIndex];
  77. }
  78. }
  79. /// <summary>
  80. /// Maximum value.
  81. /// </summary>
  82. public float MaximumValue
  83. {
  84. get
  85. {
  86. // Pull data.
  87. return UnmanagedParameters.MaximumValues[UnmanagedIndex];
  88. }
  89. }
  90. /// <summary>
  91. /// Default value.
  92. /// </summary>
  93. public float DefaultValue
  94. {
  95. get
  96. {
  97. // Pull data.
  98. return UnmanagedParameters.DefaultValues[UnmanagedIndex];
  99. }
  100. }
  101. /// <summary>
  102. /// Current value.
  103. /// </summary>
  104. [SerializeField, HideInInspector]
  105. public float Value;
  106. /// <summary>
  107. /// Revives the instance.
  108. /// </summary>
  109. /// <param name="unmanagedModel">Handle to unmanaged model.</param>
  110. internal void Revive(CubismUnmanagedModel unmanagedModel)
  111. {
  112. UnmanagedParameters = unmanagedModel.Parameters;
  113. }
  114. /// <summary>
  115. /// Restores instance to initial state.
  116. /// </summary>
  117. /// <param name="unmanagedModel">Handle to unmanaged model.</param>
  118. /// <param name="unmanagedIndex">Position in unmanaged arrays.</param>
  119. private void Reset(CubismUnmanagedModel unmanagedModel, int unmanagedIndex)
  120. {
  121. Revive(unmanagedModel);
  122. UnmanagedIndex = unmanagedIndex;
  123. name = Id;
  124. Value = DefaultValue;
  125. }
  126. }
  127. }