| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142 | using System;using Core.Audio;using Core.Triiger;using GameLogic.Combat.CombatTool;using GameLogic.Combat.Hero;using UnityEngine;using UTool.CustomizeTimeLogic.FxLogic.TimeLineEventinterface;namespace Common.Combat.FxAILogic{    [AddComponentMenu("特效脚本/弹道/直线飞行弹道")]    public class FxAIBeelineBulletLogic : FxAILogicBasic    {        public float speed;        private IUnRegister UnRegister = null;        [Header("释放碰撞到地面时结束")] public bool isTriggerGroundEnd;        [Header("碰撞到地面时的特效")] public string GroundHitFxName;        private Vector3 endPos;        private Vector3 dir;        public float maxDis = 20;        protected float maxDisSpr;        protected override void ProInit()        {            maxDisSpr= maxDis* maxDis;            UnRegister = gameObject.OnTriggerEnterEvent(this,OnTriggerEnterEvent);            if (isUseCustomTargetEndPos)            {                endPos = TimeLineEventParticleLogicBasic.customizePos[                    customTargetEndPosIndex];            }            else            {                endPos = AttTarget.GetSpecialDotInfo("hitpos").GetWorlPos();                endPos = new Vector3(endPos.x, CurrPos.y, endPos.z);            }            dir = (endPos - CurrPos).normalized;            gameObject.transform.rotation = Quaternion.LookRotation(dir);        }        void TriggerGround()        {            ITimeLineTriggerEvent timeLineTriggerEvent =                TimeLineEventParticleLogicBasic.ITimeLineTriggerEntity as ITimeLineTriggerEvent;            FinishHit(new Vector3(_currPos.x, 0.5f, _currPos.z), GroundHitFxName);            AudioManager.Instance.PlayAudio(hitAudioName, false);            if (timeLineTriggerEvent != null)            {                timeLineTriggerEvent.TimeLineTriggerGround(                    TimeLineEventParticleLogicBasic.TimeLineEventLogicGroup.groupName,                    this, triggerData);            }            AudioManager.Instance.PlayAudio(hitAudioName, false);            Dispose();        }        protected void OnTriggerEnterEvent(Collider collision,ITriggerEntity triggerEntity)        {            ITimeLineTriggerEvent timeLineTriggerEvent =                TimeLineEventParticleLogicBasic.ITimeLineTriggerEntity as ITimeLineTriggerEvent;            if (isTriggerGroundEnd)            {                if (collision.gameObject.CompareTag("dimian"))                {                    TriggerGround();                    return;                }            }            HeroEntityMono heroEntityMono = collision.gameObject.GetComponent<HeroEntityMono>();            if (heroEntityMono == null)            {                return;            }            CombatHeroEntity target = heroEntityMono.combatHeroEntity;            if (target.IsEnemy == CombatHeroEntity.IsEnemy)            {                return;            }            if (timeLineTriggerEvent != null)            {                timeLineTriggerEvent.TimeLineTrigger(TimeLineEventParticleLogicBasic.TimeLineEventLogicGroup.groupName,                    target.GetMainHotPoin<ILifetCycleHitPoint>(), this, triggerData,SkillFeaturesData);                if (!string.IsNullOrEmpty(hitFxName))                {                    FinishHit(collision.ClosestPoint(gameObject.transform.position), hitFxName);                }                AudioManager.Instance.PlayAudio(hitAudioName, false);                if (!isPenetrate)                {                    Dispose();                }            }        }              protected override void ProCombatUpdate(float time)        {            Vector3 lastPos = _currPos;            Vector3 movePos = dir * speed * time;            _currPos += movePos;            gameObject.transform.position = _currPos;            if (!isTriggerGroundEnd)            {                if (Vector3.SqrMagnitude(_currPos - startPos) >maxDisSpr)                {                    Dispose();                }            }            else            {                if (_currPos.y < 0.3f)                {                    TriggerGround();                }            }        }        protected override void ProDispose()        {            if (UnRegister != null)            {                UnRegister.UnRegister();            }            UnRegister = null;        }    }}
 |