MagicaAreaWind.cs 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. // Magica Cloth.
  2. // Copyright (c) MagicaSoft, 2020-2022.
  3. // https://magicasoft.jp
  4. using UnityEngine;
  5. namespace MagicaCloth
  6. {
  7. /// <summary>
  8. /// 形状風
  9. /// </summary>
  10. //[HelpURL("https://magicasoft.jp/directional-wind/")]
  11. [AddComponentMenu("MagicaCloth/MagicaAreaWind")]
  12. public partial class MagicaAreaWind : WindComponent
  13. {
  14. [SerializeField]
  15. private PhysicsManagerWindData.ShapeType shapeType = PhysicsManagerWindData.ShapeType.Box;
  16. [SerializeField]
  17. private bool isAddition = false;
  18. //=========================================================================================
  19. public override ComponentType GetComponentType()
  20. {
  21. return ComponentType.AreaWind;
  22. }
  23. /// <summary>
  24. /// 風タイプを返す
  25. /// </summary>
  26. /// <returns></returns>
  27. public override PhysicsManagerWindData.WindType GetWindType()
  28. {
  29. return PhysicsManagerWindData.WindType.Area;
  30. }
  31. /// <summary>
  32. /// 形状タイプを返す
  33. /// </summary>
  34. /// <returns></returns>
  35. public override PhysicsManagerWindData.ShapeType GetShapeType()
  36. {
  37. return shapeType;
  38. }
  39. /// <summary>
  40. /// 風向きタイプを返す
  41. /// </summary>
  42. /// <returns></returns>
  43. public override PhysicsManagerWindData.DirectionType GetDirectionType()
  44. {
  45. if (shapeType == PhysicsManagerWindData.ShapeType.Box)
  46. return PhysicsManagerWindData.DirectionType.OneDirection;
  47. else
  48. return directionType;
  49. }
  50. /// <summary>
  51. /// 風が加算モードか返す
  52. /// </summary>
  53. /// <returns></returns>
  54. public override bool IsAddition()
  55. {
  56. return isAddition;
  57. }
  58. /// <summary>
  59. /// エリアサイズを返す
  60. /// </summary>
  61. /// <returns></returns>
  62. public override Vector3 GetAreaSize()
  63. {
  64. if (shapeType == PhysicsManagerWindData.ShapeType.Box)
  65. return areaSize;
  66. else if (shapeType == PhysicsManagerWindData.ShapeType.Sphere)
  67. return new Vector3(areaRadius, areaRadius, areaRadius);
  68. Debug.LogError("Invalid wind shape type!");
  69. return Vector3.zero;
  70. }
  71. /// <summary>
  72. /// アンカー位置を返す
  73. /// </summary>
  74. /// <returns></returns>
  75. //public override Vector3 GetAnchor()
  76. //{
  77. // return anchor;
  78. //}
  79. /// <summary>
  80. /// 風エリアの体積を返す
  81. /// </summary>
  82. /// <returns></returns>
  83. public override float GetAreaVolume()
  84. {
  85. if (shapeType == PhysicsManagerWindData.ShapeType.Box)
  86. return (areaSize.x * 2) * (areaSize.y * 2) * (areaSize.z * 2);
  87. else if (shapeType == PhysicsManagerWindData.ShapeType.Sphere)
  88. return (4.0f / 3.0f) * areaRadius * areaRadius * areaRadius * Mathf.PI;
  89. Debug.LogError("Invalid wind volume!");
  90. return 0;
  91. }
  92. /// <summary>
  93. /// 風エリアの最大距離を返す
  94. /// </summary>
  95. /// <returns></returns>
  96. public override float GetAreaLength()
  97. {
  98. // 基本はエリアサイズの対角線距離、アンカーが離れていればその分水増しする
  99. var size = GetAreaSize();
  100. var areaLength = shapeType == PhysicsManagerWindData.ShapeType.Sphere ? size.x : size.magnitude;
  101. //var anchorRatio = Mathf.Clamp01(anchor.magnitude);
  102. //return areaLength + areaLength * anchorRatio;
  103. return areaLength;
  104. }
  105. //=========================================================================================
  106. /// <summary>
  107. /// パラメータ初期化
  108. /// </summary>
  109. protected override void ResetParams()
  110. {
  111. main = 5;
  112. turbulence = 1;
  113. frequency = 1;
  114. areaSize = new Vector3(5, 5, 5);
  115. //anchor = Vector3.zero;
  116. directionAngleX = 0;
  117. directionAngleY = 0;
  118. directionType = PhysicsManagerWindData.DirectionType.OneDirection;
  119. attenuation.SetParam(1, 1, false, 0, false);
  120. }
  121. }
  122. }