DropItem.cs 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. /// <summary>
  5. /// 掉落的道具
  6. /// </summary>
  7. public class DropItem : MonoBehaviour
  8. {
  9. /// <summary>
  10. /// 方向
  11. /// </summary>
  12. private Vector3 mDir = Vector3.zero;
  13. private float mSpeedX = 10;
  14. private float mSpeedY = 4.0F;
  15. private float gravity = 20.0F;
  16. private Vector3 moveDirection = Vector3.zero;
  17. private bool mFly = false;
  18. /// <summary>
  19. /// 道具ID
  20. /// </summary>
  21. public int m_ItemID = 0;
  22. /// <summary>
  23. /// 道具名称
  24. /// </summary>
  25. public string m_ItemName = string.Empty;
  26. /// <summary>
  27. /// 稀有度
  28. /// </summary>
  29. public int m_Star = 1;
  30. /// <summary>
  31. /// 是否一次性
  32. /// </summary>
  33. public bool m_Once = true;
  34. /// <summary>
  35. /// 是否使用过
  36. /// </summary>
  37. public bool m_Used = false;
  38. /// <summary>
  39. /// CD
  40. /// </summary>
  41. public float m_CDTime = 60;
  42. /// <summary>
  43. /// 当前的CD时间
  44. /// </summary>
  45. private float mCurDCTime = 0;
  46. /// <summary>
  47. /// 是否CD中
  48. /// </summary>
  49. private bool mCD = false;
  50. /// <summary>
  51. /// 控制器
  52. /// </summary>
  53. private CharacterController _CharacterController = null;
  54. /// <summary>
  55. /// 特效
  56. /// </summary>
  57. private Transform mEffectTransform = null;
  58. public EItemType mType = EItemType.EIT_NONE;
  59. private BoxCollider _BoxCollider = null;
  60. /// <summary>
  61. /// 更新飞
  62. /// </summary>
  63. private bool _updateFly = true;
  64. private void Awake()
  65. {
  66. mEffectTransform = transform.Find("bisha/guangtiao");
  67. }
  68. /// <summary>
  69. /// 初始化
  70. /// </summary>
  71. /// <param name="itemId">物品ID</param>
  72. /// <param name="xSpeed">X轴速度</param>
  73. /// <param name="ySpeed">Y速度</param>
  74. /// <param name="dir">方向</param>
  75. public void Init(int itemId, string _name, int star, EItemType type, float xSpeed, float ySpeed, Vector3 dir)
  76. {
  77. m_ItemID = itemId;
  78. m_ItemName = _name;
  79. m_Star = star;
  80. mSpeedX = xSpeed;
  81. mSpeedY = ySpeed;
  82. mDir = dir;
  83. mFly = true;
  84. _updateFly = true;
  85. _CharacterController = GetComponent<CharacterController>();
  86. _CharacterController.enabled = true;
  87. _BoxCollider = GetComponent<BoxCollider>();
  88. _BoxCollider.enabled = false;
  89. mType = type;
  90. moveDirection = mDir;
  91. moveDirection *= mSpeedX;
  92. moveDirection.y = mSpeedY;
  93. // 忽略碰撞层
  94. Physics.IgnoreLayerCollision(LayerMask.NameToLayer("Player"), LayerMask.NameToLayer("Item"), true);
  95. }
  96. /// <summary>
  97. /// 是否CD
  98. /// </summary>
  99. public bool CD
  100. {
  101. get
  102. {
  103. return mCD;
  104. }
  105. set
  106. {
  107. mCD = value;
  108. if (mCD && mEffectTransform)
  109. {
  110. mEffectTransform.gameObject.SetActive(false);
  111. }
  112. }
  113. }
  114. /// <summary>
  115. /// 更新
  116. /// </summary>
  117. private void Update()
  118. {
  119. if (_updateFly && _CharacterController != null)
  120. {
  121. if (_CharacterController.isGrounded)
  122. {
  123. if (mFly == false)
  124. {
  125. moveDirection = mDir;
  126. moveDirection *= mSpeedX;
  127. moveDirection.y = mSpeedY;
  128. mFly = true;
  129. }
  130. else
  131. {
  132. _updateFly = false;
  133. _BoxCollider.enabled = true;
  134. _CharacterController.enabled = false;
  135. // 恢复碰撞层
  136. Physics.IgnoreLayerCollision(LayerMask.NameToLayer("Player"), LayerMask.NameToLayer("Item"), false);
  137. return;
  138. }
  139. }
  140. moveDirection.y -= gravity * Time.deltaTime;
  141. _CharacterController.Move(moveDirection * Time.deltaTime);
  142. }
  143. if (CD)
  144. {
  145. mCurDCTime += Time.deltaTime;
  146. if (mCurDCTime >= m_CDTime)
  147. {
  148. CD = false;
  149. mCurDCTime = 0;
  150. if (mEffectTransform)
  151. {
  152. mEffectTransform.gameObject.SetActive(true);
  153. }
  154. }
  155. }
  156. }
  157. }