CubismParametersInspector.cs 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  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;
  8. using System;
  9. using System.Linq;
  10. namespace Live2D.Cubism.Framework
  11. {
  12. /// <summary>
  13. /// Allows inspecting <see cref="Core.CubismParameter"/>s.
  14. /// </summary>
  15. public sealed class CubismParametersInspector : CubismInspectorAbstract
  16. {
  17. /// <summary>
  18. /// Called by cubism update controller. Order to invoke OnLateUpdate.
  19. /// </summary>
  20. public override int ExecutionOrder => CubismUpdateExecutionOrder.CubismParametersInspector;
  21. /// <summary>
  22. /// Called by cubism update controller. Updates controller.
  23. /// </summary>
  24. public override void OnLateUpdate()
  25. {
  26. #if UNITY_EDITOR
  27. // Fail silently.
  28. if (!enabled)
  29. {
  30. return;
  31. }
  32. if (Model == null)
  33. {
  34. Model = this.FindCubismModel();
  35. }
  36. if (Model.Parameters == null)
  37. {
  38. return;
  39. }
  40. OverrideFlags ??= new bool[Model.Parameters.Length];
  41. if (OverrideFlags.Length != Model.Parameters.Length)
  42. {
  43. Array.Resize(ref OverrideValues, Model.Parameters.Length);
  44. }
  45. OverrideValues ??= new float[Model.Parameters.Length];
  46. if (OverrideValues.Length != Model.Parameters.Length)
  47. {
  48. Array.Resize(ref OverrideValues, Model.Parameters.Length);
  49. }
  50. for (var i = 0; i < Model.Parameters.Length; i++)
  51. {
  52. if (OverrideFlags[i])
  53. {
  54. Model.Parameters[i].OverrideValue(OverrideValues[i]);
  55. }
  56. else
  57. {
  58. OverrideValues[i] = Model.Parameters[i].Value;
  59. }
  60. }
  61. DispatchValueChanges();
  62. #endif
  63. }
  64. #if UNITY_EDITOR
  65. /// <summary>
  66. /// Called by Inspector.
  67. /// </summary>
  68. public void Refresh()
  69. {
  70. Model = this.FindCubismModel();
  71. if (Model == null)
  72. {
  73. OverrideValues = new float[0];
  74. OverrideFlags = new bool[0];
  75. }
  76. else
  77. {
  78. OverrideValues = Model.Parameters.Select(e => e.Value).ToArray();
  79. OverrideFlags = new bool[Model.Parameters.Length];
  80. }
  81. }
  82. #endif
  83. }
  84. }