Нет описания
Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. using System;
  2. using System.Collections.Generic;
  3. using UnityEngine.Scripting.APIUpdating;
  4. namespace UnityEngine.U2D.IK
  5. {
  6. /// <summary>
  7. /// Component to manager 2D IK Solvers.
  8. /// </summary>
  9. [DefaultExecutionOrder(-2)]
  10. [MovedFrom("UnityEngine.Experimental.U2D.IK")]
  11. [ExecuteInEditMode]
  12. public partial class IKManager2D : MonoBehaviour
  13. {
  14. [SerializeField]
  15. List<Solver2D> m_Solvers = new List<Solver2D>();
  16. [SerializeField]
  17. [Range(0f, 1f)]
  18. float m_Weight = 1f;
  19. /// <summary>
  20. /// Get and Set the weight for solvers.
  21. /// </summary>
  22. public float weight
  23. {
  24. get => m_Weight;
  25. set => m_Weight = Mathf.Clamp01(value);
  26. }
  27. /// <summary>
  28. /// Get the Solvers that are managed by this manager.
  29. /// </summary>
  30. public List<Solver2D> solvers => m_Solvers;
  31. void OnValidate()
  32. {
  33. m_Weight = Mathf.Clamp01(m_Weight);
  34. OnEditorDataValidate();
  35. }
  36. void Reset()
  37. {
  38. FindChildSolvers();
  39. OnEditorDataValidate();
  40. }
  41. void FindChildSolvers()
  42. {
  43. m_Solvers.Clear();
  44. var solvers = new List<Solver2D>();
  45. transform.GetComponentsInChildren<Solver2D>(true, solvers);
  46. foreach (var solver in solvers)
  47. {
  48. if (solver.GetComponentInParent<IKManager2D>() == this)
  49. AddSolver(solver);
  50. }
  51. }
  52. /// <summary>
  53. /// Add Solver to the manager.
  54. /// </summary>
  55. /// <param name="solver">Solver to add.</param>
  56. public void AddSolver(Solver2D solver)
  57. {
  58. if (!m_Solvers.Contains(solver))
  59. {
  60. m_Solvers.Add(solver);
  61. AddSolverEditorData();
  62. }
  63. }
  64. /// <summary>
  65. /// Remove Solver from the manager.
  66. /// </summary>
  67. /// <param name="solver">Solver to remove.</param>
  68. public void RemoveSolver(Solver2D solver)
  69. {
  70. RemoveSolverEditorData(solver);
  71. m_Solvers.Remove(solver);
  72. }
  73. /// <summary>
  74. /// Updates the Solvers in this manager.
  75. /// </summary>
  76. public void UpdateManager()
  77. {
  78. foreach (var solver in m_Solvers)
  79. {
  80. if (solver == null || !solver.isActiveAndEnabled)
  81. continue;
  82. if (!solver.isValid)
  83. solver.Initialize();
  84. solver.UpdateIK(weight);
  85. }
  86. }
  87. private void LateUpdate()
  88. {
  89. UpdateManager();
  90. }
  91. #if UNITY_EDITOR
  92. internal static Events.UnityEvent onDrawGizmos = new Events.UnityEvent();
  93. void OnDrawGizmos()
  94. {
  95. onDrawGizmos.Invoke();
  96. }
  97. #endif
  98. }
  99. }