123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188 |
- using Adon.Game.BO;
- using Adon.Game.Helper;
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
- namespace AdonGameKit
- {
- /// <summary>
- /// 言灵星空法阵爆炸
- /// </summary>
- public class YLStarrySkyBomb : MonoBehaviour
- {
- /// <summary>
- /// 爆炸范围
- /// </summary>
- public float m_AttackSight = 4;
- /// <summary>
- /// 爆炸角度
- /// </summary>
- public float m_AttackAngle = 360;
- [SerializeField]
- private BaseYLPartAdon m_YL;//释放者挂件(言灵)
- [SerializeField]
- private BaseHero m_Hero;
- [SerializeField]
- private Transform m_BombEff;
- float m_FireTimeMax = 0.6f;//发射周期
- [SerializeField]
- private string m_CurUseSkill;
- float fireTime;
- bool isFire;
- //上次检测怪
- List<GameObject> LastMonsters = new List<GameObject>();
- List<GameObject> CurrentMonsters = new List<GameObject>();
- List<GameObject> CleanMonsters = new List<GameObject>();
- /// <summary>
- /// 初始化
- /// </summary>
- /// <param name="_YL">释放者挂件(言灵)</param>
- /// <param name="_hero">释放者(英雄)</param>
- /// <param name="_TargetPoint">目标点</param>
- /// <param name="_CurUseSkill">当前技能ID</param>
- public void init(BaseYLPartAdon _YL, BaseHero _hero, Transform _BombEff, string _CurUseSkill)
- {
- m_YL = _YL;
- m_Hero = _hero;
- m_BombEff = _BombEff;
- m_CurUseSkill = _CurUseSkill;
- }
- void Awake()
- {
- fireTime = m_FireTimeMax;
- }
- // Start is called before the first frame update
- void Start()
- {
- gameObject.GetComponentInChildren<FBXEventYL>().SetOwner(this.gameObject);//设置事件类拥有者
- }
- private void Update()
- {
- if (isFire)
- {
- //计时,周期发送伤害
- if (fireTime >= m_FireTimeMax)
- {
- fireTime = 0;
- ///检测范围内的怪
- CurrentMonsters = PlayerHelperAdon.GetNearMonsters(m_AttackSight, m_AttackAngle, gameObject);
-
- for (int i = 0; i < CurrentMonsters.Count; i++)
- {
-
- BaseMonsterAdon monster = CurrentMonsters[i].GetComponent<BaseMonsterAdon>();
- //X2Battle.X2BattleManager.Instance.mBulletModel.OnCastSkill(
- // m_Hero.mData.UID, m_CurUseSkill,
- // false, m_YL.M_YLType, monster.mData.UID, false);
- BulletMessage.catSkillFun(m_Hero.mData.UID, m_CurUseSkill,
- false, (int)m_YL.M_YLType, monster.mData.UID, false);
- //实例化克隆爆炸光效
- Transform effobj = Instantiate(m_BombEff);
- effobj.position = monster.m_HitObj.position;//设置爆炸位置
- effobj.gameObject.SetActive(true);
- //给星云旋涡内对敌人施加吸力
- Vector3 force = transform.position - monster.transform.position;//推力方向
- monster.m_RigidbodyTimeline3D.velocity = force * 2.5f;//吸力速度
- //敌人播放移动动作
- //敌人看向外围方向
- //暂停AI行为树
- monster.CurrentBehaviorTree.DisableBehavior(true);
- //计算吸力角度
- //比对之前的怪列表,清理之前的怪
- //for (int l = 0; l < LastMonsters.Count; i++)
- //{
- // //移除相同怪
- // if (monster == LastMonsters[l])
- // {
- // LastMonsters.RemoveAt(l);
- // break;
- // }
- //}
- }
- //比对之前的怪列表,清理之前的怪
- for (int i = 0; i < LastMonsters.Count; i++)
- {
- bool isCurren = true;
- GameObject temp = LastMonsters[i];
- for (int l = 0; l < CurrentMonsters.Count; l++)
- {
- if (temp == CurrentMonsters[i])
- {
- isCurren = false;
- }
- }
- if (isCurren)
- {
- CleanMonsters.Add(temp);//添加进清理列表
- //清理debuff,恢复正常
- BaseMonsterAdon monster = CleanMonsters[i].GetComponent<BaseMonsterAdon>();
- monster.CurrentBehaviorTree.EnableBehavior();
- }
- }
- //for (int i = 0; i < CleanMonsters.Count; i++)
- //{
- // //清理debuff,恢复正常
- // BaseMonsterAdon monster = CleanMonsters[i].GetComponent<BaseMonsterAdon>();
- // monster.CurrentBehaviorTree.EnableBehavior();
- //}
- }
- fireTime += Time.deltaTime;
- LastMonsters = CurrentMonsters;
- }
-
- }
- //public void SetHero(BaseHero _hero)
- //{
- // m_Hero = _hero;
- //}
- //public void SetBombEff(Transform _bombEff)
- //{
- // m_BombEff = _bombEff;
- //}
- ///// <summary>
- /// 攻击触发
- /// </summary>
- /// <param name="attackId">子连击id</param>
- public void OnAttackOn(string attackId)
- {
- isFire = true;
- }
- public void OnAttackOff()
- {
- isFire = false;
- //释放被吸对象AI行动
- for(int i = 0;i< CurrentMonsters.Count;i++)
- {
- BaseMonsterAdon monster = CurrentMonsters[i].GetComponent<BaseMonsterAdon>();
- monster.CurrentBehaviorTree.EnableBehavior();
- }
- }
- #if UNITY_EDITOR
- /// <summary>
- /// 绘制打击配置
- /// </summary>
- private void OnDrawGizmosSelected()
- {
- Vector3 forward = transform.forward;
- UnityEditor.Handles.color = new Color(1.0f, 0.0f, 0.0f, 0.1f);
- Vector3 rotatedForward = Quaternion.Euler(0, -m_AttackAngle * 0.5f, 0) * transform.forward;
- UnityEditor.Handles.DrawSolidArc(transform.position, Vector3.up, rotatedForward, m_AttackAngle, m_AttackSight);
- }
- #endif
- }
- }
|