123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211 |
- using Adon.Game.Data;
- using AdonGameKit;
- using BehaviorDesigner.Runtime;
- using Chronos;
- using Cinemachine;
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
- namespace Adon.Game.BO
- {
- /// <summary>
- /// 基础角色类
- /// </summary>
- public partial class BaseCharacterAdon : Role
- {
- /// <summary>
- /// 受击点
- /// </summary>
- public Transform m_HitObj;
- public Transform m_TopObj;
- public Transform m_FootObj;
- /// <summary>
- /// 动作控制器
- /// </summary>
- public Animator m_Animator;
- /// <summary>
- /// 名字
- /// </summary>
- private string m_Name;
- private int m_Id;
- /// <summary>
- /// 当前攻击id
- /// </summary>
- public int m_CurAttackIdx;
- /// <summary>
- /// 技能id
- /// </summary>
- public int m_SkillId;
- /// <summary>
- /// 当前状态
- /// </summary>
- public eState m_CurState;
- /// <summary>
- /// 队伍Id
- /// </summary>
- private int m_TeamId;
- ///// <summary>
- ///// Buff 列表
- ///// </summary>
- //private List<BaseBuff> m_Buffs = new List<BaseBuff>();
- ///// <summary>
- ///// DeBuff 列表
- ///// </summary>
- //private List<BaseDeBuff> m_Debuffs = new List<BaseDeBuff>();
- /// <summary>
- /// 角色属性
- /// </summary>
- private CharStatAdon m_Stat = new CharStatAdon();
- /// <summary>
- /// 伤害闪光材质对象
- /// </summary>
- public Transform m_damageFlash;
- public Transform m_freezeFlashs;
- public Transform m_CuringFlashs;
- public Material[] m_damageFlashMaterial;
- public Material[] m_freezeFlashMaterial;
- public Material[] m_CuringFlashMaterial;
- /// <summary>
- /// 特效管理
- /// </summary>
- public FxManagerAdon m_FxManagerAdon;
- /// <summary>
- /// 震屏组件
- /// </summary>
- public CinemachineImpulseSource m_CinemachineImpulseSource;
- /// <summary>
- /// 头部看向目标组件
- /// </summary>
- public HeadLookAtTarget m_PerfectLookAtAdon;
- public CapsuleCollider m_CapsuleCollider;//胶囊碰撞体
- /// <summary>
- /// 武器碰撞体
- /// </summary>
- public Collider m_WeaponCol;
- /// <summary>
- /// 第三人称虚拟相机
- /// </summary>
- public CinemachineFreeLook mCM_ThirdPerson;
- /// <summary>
- /// 角色相机管理
- /// </summary>
- public CameraManagerAdon m_CameraManagerAdon;
- /// <summary>
- /// 模型对象
- /// </summary>
- public Transform m_fbx;
- //public int Id { get => m_Id; set => m_Id = value; }
- //public string Name { get => m_Name; set => m_Name = value; }
- //public eState CurState { get => m_CurState; set => m_CurState = value; }
- public LocalClock[] m_LocalClocks;//局部时钟列表
- /// <summary>
- /// 是否不受伤
- /// </summary>
- public bool m_NotHurt;
- /// <summary>
- /// 不受伤时间
- /// </summary>
- public bool m_NotHurtTime;
- protected virtual void Awake()
- {
- m_LocalClocks = GetComponentsInChildren<LocalClock>();//获取局部时钟列表
- m_fbx = transform.Find("FBX");
- m_Animator = m_fbx.GetComponent<Animator>();
- m_PerfectLookAtAdon = m_fbx.GetComponent<HeadLookAtTarget>();//看向目标组件
- m_HitObj = transform.Find("FBX/Effect_000/Hit");
- m_TopObj = transform.Find("FBX/Effect_000/Top");
- m_FootObj = transform.Find("FBX/Effect_000/Foot");
- if (m_HitObj == null) m_HitObj = transform.Find("FBX/00/Hit");
- if (m_TopObj == null) m_TopObj = transform.Find("FBX/00/Top");
- if (m_FootObj == null) m_FootObj = transform.Find("FBX/00/Foot");
- //获取伤害闪光材质球
- m_damageFlash = transform.Find("DamageFlashs");
- //获取冰冻伤害材质球
- m_freezeFlashs = transform.Find("FreezeFlashs");
- //获取治愈材质球
- m_CuringFlashs = transform.Find("CuringFlashs");
- if (m_damageFlash != null)
- {
- SkinnedMeshRenderer[] damageFlashs = m_damageFlash.GetComponentsInChildren<SkinnedMeshRenderer>();
- m_damageFlashMaterial = new Material[damageFlashs.Length];
- for (int i = 0; i < m_damageFlashMaterial.Length; i++)
- {
- m_damageFlashMaterial[i] = damageFlashs[i].GetComponent<SkinnedMeshRenderer>().material;
- }
- }
- if (m_freezeFlashs != null)
- {
- SkinnedMeshRenderer[] freezeFlashs = m_freezeFlashs.GetComponentsInChildren<SkinnedMeshRenderer>();
- m_freezeFlashMaterial = new Material[freezeFlashs.Length];
- for (int i = 0; i < m_freezeFlashMaterial.Length; i++)
- {
- m_freezeFlashMaterial[i] = freezeFlashs[i].GetComponent<SkinnedMeshRenderer>().material;
- }
- }
- if (m_CuringFlashs != null)
- {
- SkinnedMeshRenderer[] CuringFlashs = m_CuringFlashs.GetComponentsInChildren<SkinnedMeshRenderer>();
- m_CuringFlashMaterial = new Material[CuringFlashs.Length];
- for (int i = 0; i < m_CuringFlashMaterial.Length; i++)
- {
- m_CuringFlashMaterial[i] = CuringFlashs[i].GetComponent<SkinnedMeshRenderer>().material;
- }
- }
- m_FxManagerAdon = this.gameObject.AddComponent<FxManagerAdon>();//添加角色特效管理器
- m_CinemachineImpulseSource = GetComponent<CinemachineImpulseSource>();//震屏组件
-
- m_CapsuleCollider = GetComponent<CapsuleCollider>();//获取胶囊碰撞体
- }
- /// <summary>
- /// 发现目标消息
- /// </summary>
- /// <param name="baseData"></param>
- public virtual void OnMsgFindTarget(){}
- public virtual void OnMsg_Attacked(Adon.Game.Data.StructData.Attacked_MsgData data) { }
- /// <summary>
- /// 设置震屏
- /// </summary>
- /// <param name="pos">震动起始位置</param>
- /// <param name="lv">震动等级</param>
- /// <param name="shakeTime">震动持续时间</param>
- /// <param name="decayTime">衰减时间</param>
- public void SetCameraShake(Vector3 pos, float lv, float sustainTime = 0.1f, float decayTime = 0.1f)
- {
- m_CinemachineImpulseSource.m_ImpulseDefinition.m_AmplitudeGain = lv;
- m_CinemachineImpulseSource.m_ImpulseDefinition.m_TimeEnvelope.m_SustainTime = sustainTime;
- m_CinemachineImpulseSource.m_ImpulseDefinition.m_TimeEnvelope.m_DecayTime = decayTime;
- m_CinemachineImpulseSource.GenerateImpulseAt(pos, Vector3.one);
- }
- /// <summary>
- /// 设置局部时钟时间比例
- /// </summary>
- /// <param name="timeScale"></param>
- public void SetLocalClockTimeScale(float timeScale)
- {
- for (int i = 0; i < m_LocalClocks.Length; i++)
- {
- LocalClock _localClock = m_LocalClocks[i];
- _localClock.localTimeScale = timeScale;
- }
- }
-
- }
- }
|