PhysicsTeamData.cs 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. // Magica Cloth.
  2. // Copyright (c) MagicaSoft, 2020-2022.
  3. // https://magicasoft.jp
  4. using System.Collections.Generic;
  5. using UnityEngine;
  6. namespace MagicaCloth
  7. {
  8. /// <summary>
  9. /// 各チームのデータ
  10. /// </summary>
  11. [System.Serializable]
  12. public class PhysicsTeamData : IDataHash
  13. {
  14. // チーム固有のコライダーリスト
  15. [SerializeField]
  16. private List<ColliderComponent> colliderList = new List<ColliderComponent>();
  17. /// <summary>
  18. /// 移動制限で無視するコライダーリスト
  19. /// </summary>
  20. [SerializeField]
  21. private List<ColliderComponent> penetrationIgnoreColliderList = new List<ColliderComponent>();
  22. /// <summary>
  23. /// スキニング用ボーンリスト
  24. /// </summary>
  25. //[SerializeField]
  26. //private List<Transform> skinningBoneList = new List<Transform>();
  27. /// <summary>
  28. /// 親アバターのコライダーを結合するかどうか
  29. /// </summary>
  30. [SerializeField]
  31. private bool mergeAvatarCollider = true;
  32. //=========================================================================================
  33. /// <summary>
  34. /// ランタイムに追加されたコライダー
  35. /// </summary>
  36. private List<ColliderComponent> addColliderList = new List<ColliderComponent>();
  37. //=========================================================================================
  38. /// <summary>
  39. /// データハッシュを求める
  40. /// </summary>
  41. /// <returns></returns>
  42. public int GetDataHash()
  43. {
  44. return colliderList.GetDataHash();
  45. }
  46. //=========================================================================================
  47. public void Init(int teamId)
  48. {
  49. // コライダーをチームに参加させる
  50. foreach (var collider in colliderList)
  51. {
  52. if (collider)
  53. {
  54. collider.CreateColliderParticle(teamId);
  55. }
  56. }
  57. }
  58. public void Dispose(int teamId)
  59. {
  60. if (MagicaPhysicsManager.IsInstance())
  61. {
  62. // コライダーをチームから除外する
  63. foreach (var collider in colliderList)
  64. {
  65. if (collider)
  66. {
  67. collider.RemoveColliderParticle(teamId);
  68. }
  69. }
  70. // 追加されたコライダーをチームから除外する
  71. foreach (var collider in addColliderList)
  72. {
  73. if (collider)
  74. {
  75. collider.RemoveColliderParticle(teamId);
  76. }
  77. }
  78. addColliderList.Clear();
  79. }
  80. }
  81. /// <summary>
  82. /// ランタイム追加されたコライダーを管理リストに登録する
  83. /// </summary>
  84. /// <param name="collider"></param>
  85. public void AddCollider(ColliderComponent collider)
  86. {
  87. if (collider && addColliderList.Contains(collider) == false)
  88. addColliderList.Add(collider);
  89. }
  90. /// <summary>
  91. /// ランタイム追加されたコライダーを管理リストから削除する
  92. /// </summary>
  93. /// <param name="collider"></param>
  94. public void RemoveCollider(ColliderComponent collider)
  95. {
  96. if (collider && addColliderList.Contains(collider))
  97. addColliderList.Remove(collider);
  98. }
  99. /// <summary>
  100. /// コライダーなどの外部パーティクルの状態を更新する
  101. /// </summary>
  102. internal void UpdateStatus()
  103. {
  104. foreach (var collider in colliderList)
  105. collider.UpdateStatus();
  106. }
  107. //=========================================================================================
  108. public int ColliderCount
  109. {
  110. get
  111. {
  112. return colliderList.Count;
  113. }
  114. }
  115. public List<ColliderComponent> ColliderList
  116. {
  117. get
  118. {
  119. return colliderList;
  120. }
  121. }
  122. public List<ColliderComponent> PenetrationIgnoreColliderList
  123. {
  124. get
  125. {
  126. return penetrationIgnoreColliderList;
  127. }
  128. }
  129. //public List<Transform> SkinningBoneList => skinningBoneList;
  130. public bool MergeAvatarCollider
  131. {
  132. get
  133. {
  134. return mergeAvatarCollider;
  135. }
  136. }
  137. //=========================================================================================
  138. /// <summary>
  139. /// コライダーリスト検証
  140. /// </summary>
  141. public void ValidateColliderList()
  142. {
  143. // コライダーのnullや重複を削除する
  144. ShareDataObject.RemoveNullAndDuplication(colliderList);
  145. }
  146. }
  147. }