BaseCharacterAdon.cs 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211
  1. using Adon.Game.Data;
  2. using AdonGameKit;
  3. using BehaviorDesigner.Runtime;
  4. using Chronos;
  5. using Cinemachine;
  6. using System.Collections;
  7. using System.Collections.Generic;
  8. using UnityEngine;
  9. namespace Adon.Game.BO
  10. {
  11. /// <summary>
  12. /// 基础角色类
  13. /// </summary>
  14. public partial class BaseCharacterAdon : Role
  15. {
  16. /// <summary>
  17. /// 受击点
  18. /// </summary>
  19. public Transform m_HitObj;
  20. public Transform m_TopObj;
  21. public Transform m_FootObj;
  22. /// <summary>
  23. /// 动作控制器
  24. /// </summary>
  25. public Animator m_Animator;
  26. /// <summary>
  27. /// 名字
  28. /// </summary>
  29. private string m_Name;
  30. private int m_Id;
  31. /// <summary>
  32. /// 当前攻击id
  33. /// </summary>
  34. public int m_CurAttackIdx;
  35. /// <summary>
  36. /// 技能id
  37. /// </summary>
  38. public int m_SkillId;
  39. /// <summary>
  40. /// 当前状态
  41. /// </summary>
  42. public eState m_CurState;
  43. /// <summary>
  44. /// 队伍Id
  45. /// </summary>
  46. private int m_TeamId;
  47. ///// <summary>
  48. ///// Buff 列表
  49. ///// </summary>
  50. //private List<BaseBuff> m_Buffs = new List<BaseBuff>();
  51. ///// <summary>
  52. ///// DeBuff 列表
  53. ///// </summary>
  54. //private List<BaseDeBuff> m_Debuffs = new List<BaseDeBuff>();
  55. /// <summary>
  56. /// 角色属性
  57. /// </summary>
  58. private CharStatAdon m_Stat = new CharStatAdon();
  59. /// <summary>
  60. /// 伤害闪光材质对象
  61. /// </summary>
  62. public Transform m_damageFlash;
  63. public Transform m_freezeFlashs;
  64. public Transform m_CuringFlashs;
  65. public Material[] m_damageFlashMaterial;
  66. public Material[] m_freezeFlashMaterial;
  67. public Material[] m_CuringFlashMaterial;
  68. /// <summary>
  69. /// 特效管理
  70. /// </summary>
  71. public FxManagerAdon m_FxManagerAdon;
  72. /// <summary>
  73. /// 震屏组件
  74. /// </summary>
  75. public CinemachineImpulseSource m_CinemachineImpulseSource;
  76. /// <summary>
  77. /// 头部看向目标组件
  78. /// </summary>
  79. public HeadLookAtTarget m_PerfectLookAtAdon;
  80. public CapsuleCollider m_CapsuleCollider;//胶囊碰撞体
  81. /// <summary>
  82. /// 武器碰撞体
  83. /// </summary>
  84. public Collider m_WeaponCol;
  85. /// <summary>
  86. /// 第三人称虚拟相机
  87. /// </summary>
  88. public CinemachineFreeLook mCM_ThirdPerson;
  89. /// <summary>
  90. /// 角色相机管理
  91. /// </summary>
  92. public CameraManagerAdon m_CameraManagerAdon;
  93. /// <summary>
  94. /// 模型对象
  95. /// </summary>
  96. public Transform m_fbx;
  97. //public int Id { get => m_Id; set => m_Id = value; }
  98. //public string Name { get => m_Name; set => m_Name = value; }
  99. //public eState CurState { get => m_CurState; set => m_CurState = value; }
  100. public LocalClock[] m_LocalClocks;//局部时钟列表
  101. /// <summary>
  102. /// 是否不受伤
  103. /// </summary>
  104. public bool m_NotHurt;
  105. /// <summary>
  106. /// 不受伤时间
  107. /// </summary>
  108. public bool m_NotHurtTime;
  109. protected virtual void Awake()
  110. {
  111. m_LocalClocks = GetComponentsInChildren<LocalClock>();//获取局部时钟列表
  112. m_fbx = transform.Find("FBX");
  113. m_Animator = m_fbx.GetComponent<Animator>();
  114. m_PerfectLookAtAdon = m_fbx.GetComponent<HeadLookAtTarget>();//看向目标组件
  115. m_HitObj = transform.Find("FBX/Effect_000/Hit");
  116. m_TopObj = transform.Find("FBX/Effect_000/Top");
  117. m_FootObj = transform.Find("FBX/Effect_000/Foot");
  118. if (m_HitObj == null) m_HitObj = transform.Find("FBX/00/Hit");
  119. if (m_TopObj == null) m_TopObj = transform.Find("FBX/00/Top");
  120. if (m_FootObj == null) m_FootObj = transform.Find("FBX/00/Foot");
  121. //获取伤害闪光材质球
  122. m_damageFlash = transform.Find("DamageFlashs");
  123. //获取冰冻伤害材质球
  124. m_freezeFlashs = transform.Find("FreezeFlashs");
  125. //获取治愈材质球
  126. m_CuringFlashs = transform.Find("CuringFlashs");
  127. if (m_damageFlash != null)
  128. {
  129. SkinnedMeshRenderer[] damageFlashs = m_damageFlash.GetComponentsInChildren<SkinnedMeshRenderer>();
  130. m_damageFlashMaterial = new Material[damageFlashs.Length];
  131. for (int i = 0; i < m_damageFlashMaterial.Length; i++)
  132. {
  133. m_damageFlashMaterial[i] = damageFlashs[i].GetComponent<SkinnedMeshRenderer>().material;
  134. }
  135. }
  136. if (m_freezeFlashs != null)
  137. {
  138. SkinnedMeshRenderer[] freezeFlashs = m_freezeFlashs.GetComponentsInChildren<SkinnedMeshRenderer>();
  139. m_freezeFlashMaterial = new Material[freezeFlashs.Length];
  140. for (int i = 0; i < m_freezeFlashMaterial.Length; i++)
  141. {
  142. m_freezeFlashMaterial[i] = freezeFlashs[i].GetComponent<SkinnedMeshRenderer>().material;
  143. }
  144. }
  145. if (m_CuringFlashs != null)
  146. {
  147. SkinnedMeshRenderer[] CuringFlashs = m_CuringFlashs.GetComponentsInChildren<SkinnedMeshRenderer>();
  148. m_CuringFlashMaterial = new Material[CuringFlashs.Length];
  149. for (int i = 0; i < m_CuringFlashMaterial.Length; i++)
  150. {
  151. m_CuringFlashMaterial[i] = CuringFlashs[i].GetComponent<SkinnedMeshRenderer>().material;
  152. }
  153. }
  154. m_FxManagerAdon = this.gameObject.AddComponent<FxManagerAdon>();//添加角色特效管理器
  155. m_CinemachineImpulseSource = GetComponent<CinemachineImpulseSource>();//震屏组件
  156. m_CapsuleCollider = GetComponent<CapsuleCollider>();//获取胶囊碰撞体
  157. }
  158. /// <summary>
  159. /// 发现目标消息
  160. /// </summary>
  161. /// <param name="baseData"></param>
  162. public virtual void OnMsgFindTarget(){}
  163. public virtual void OnMsg_Attacked(Adon.Game.Data.StructData.Attacked_MsgData data) { }
  164. /// <summary>
  165. /// 设置震屏
  166. /// </summary>
  167. /// <param name="pos">震动起始位置</param>
  168. /// <param name="lv">震动等级</param>
  169. /// <param name="shakeTime">震动持续时间</param>
  170. /// <param name="decayTime">衰减时间</param>
  171. public void SetCameraShake(Vector3 pos, float lv, float sustainTime = 0.1f, float decayTime = 0.1f)
  172. {
  173. m_CinemachineImpulseSource.m_ImpulseDefinition.m_AmplitudeGain = lv;
  174. m_CinemachineImpulseSource.m_ImpulseDefinition.m_TimeEnvelope.m_SustainTime = sustainTime;
  175. m_CinemachineImpulseSource.m_ImpulseDefinition.m_TimeEnvelope.m_DecayTime = decayTime;
  176. m_CinemachineImpulseSource.GenerateImpulseAt(pos, Vector3.one);
  177. }
  178. /// <summary>
  179. /// 设置局部时钟时间比例
  180. /// </summary>
  181. /// <param name="timeScale"></param>
  182. public void SetLocalClockTimeScale(float timeScale)
  183. {
  184. for (int i = 0; i < m_LocalClocks.Length; i++)
  185. {
  186. LocalClock _localClock = m_LocalClocks[i];
  187. _localClock.localTimeScale = timeScale;
  188. }
  189. }
  190. }
  191. }