Effect(十三)—— flyEffect

来源:互联网 发布:linux批量重命名 编辑:程序博客网 时间:2024/06/05 16:31

目录为:Assets/Scripts/Effect/目录下
flyEffect.cs

using UnityEngine;using System.Collections;using System.Collections.Generic;using System.Linq;//技能飞行效果public class FlyEffect: IEffect{    public bool isAbsorb = false;   //是否是吸附技能 0:不是  1:是    public bool isTurn = false;    public int emitType;        //保存飞行类型    //构造函数    public FlyEffect()    {        mType = IEffect.ESkillEffectType.eET_FlyEffect;    }    //对丝带拖曳类型,收回    public void DragRibbonBack()    {        fyDragRibbon[] mDragRibbon = obj.GetComponentInChildren<fyDragRibbon> ();        foreach (fyDragRibbon ribbon in mDragRibbon)        {            ribbon.ForceBack ();        }    }    public override void OnLoadComplete()    {        SkillEmitConfig skillInfo = ConfigReader.GetSkillEmitCfg (skillID);        Transform point;        Ientity enOwner;        Ientity enTarget;        EntityManager.AllEntitys.TryGetValue (enOwnerKey, out enOwner);        EntityManager.AllEntitys.TryGetValue (enTargetKey, out enTarget);        point = enOwner.RealEntity.objPoint.transform;        //拖曳效果        if (skillInfo.emitType == 8)        {            fyDragRibbon[] mDragRibbon = obj.GetComponentInChildren<fyDragRibbon> ();            foreach (fyDragRibbon ribbon in mDragRibbon)            {                ribbon.mDir = dir;                ribbon.Link (point);            }        }        else        {            if (point != null)            {                GetTransform ().position = point.transform.position;            }            if (skillInfo.emitType == 1 || skillInfo.emitType == 4 || skillInfo.emitType == 5)            {                if (enTarget == null)                {                    Quaternion rt = Quaternion.LookRotation (fixPosition - GetTransform ().position);                    GetTransform ().rotation = rt;                }                else                {                    Quaternion rt = Quaternion.LookRotation (enTarget.RealEntity.transform.position - GetTransform ().position);                    GetTransform ().rotation = rt;                }            }            else if (skillInfo.emitType == 2 || skillInfo.emitType == 6)            {                Quaternion rt = Quaternion.LookRotation (dir);                GetTransform ().rotation = rt;            }        }        //播放声音        //相对于Resources文件夹下        //                              "sound/"             +     资源名        string soundPath = GameconstDefine.LoadGameSoundPath + skillInfo.sound;        ResourceUnit objUnit = ResourcesManager.Instance.loadImmediate (soundPath, ResourceType.ASSET);        if (objUnit.Asset != null)        {            AudioClip clip = objUnit.Asset as AudioClip;            if (clip != null)            {                AudioSource audio = AudioManager.Instace.PlayEffectAudio (clip);                SceneSoundManager.Instance.addSound (audio, obj);            }        }    }    private void UpdateNoTargetType()    {        //获取配置文件信息        SkillEmitConfig skillInfo = ConfigReader.GetSkillEmitCfg (skillID);        Vector3 flyDir = Vector3.zero;        float speed = skillInfo.flySpeed;        Vector3 Pos = GetTransform ().position;        flyDir = dir;        flyDir.Normalize ();        Quaternion rt = Quaternion.LookRotation (flyDir);        GetTransform ().rotation = rt;        GetTransform ().rotation = rt;        Pos += flyDir * Time.deltaTime * speed;        GetTransform ().position = Pos;    }    private void UpdateTargetType()    {        Ientity enTarget;        EntityManager.AllEntitys.TryGetValue (enTargetKey, out enTarget);        SkillEmitConfig skillInfo = ConfigReader.GetSkillEmitCfg (skillID);        Vector3 flyDir = Vector3.zero;        float speed = skillInfo.flySpeed;        Vector3 Pos = GetTransform ().position;        float distance;        if (enTarget == null || enTarget.RealEntity == null || enTarget.RealEntity.objAttackPoint == null)        {            flyDir = fixPosition - Pos;            distance = Vector3.Distance (Pos, fixPosition);        }        else        {            flyDir = enTarget.RealEntity.objAttackPoint.transform.position - Pos;            distance = Vector3.Distance (GetTransform ().position, enTarget.RealEntity.objAttackPoint.position);        }        if (flyDir == Vector3.zero)        {            flyDir = Vector3.one;        }        flyDir.Normalize ();        Quaternion rt = Quaternion.LookRotation (flyDir);        GetTransform ().rotation = rt;        Pos += flyDir * Time.deltaTime * speed;        GetTransform ().position = Pos;        if (speed * Time.deltaTime > distance)        {            isDead = true;        }    }    private void UpdateTurnType()    {        Ientity enOwner;        EntityManager.AllEntitys.TryGetValue (enOwnerKey, out enOwner);        if (isTurn == false)        {            SkillEmitConfig skillInfo = ConfigReader.GetSkillEmitCfg (skillID);            Vector3 flyDir = Vector3.zero;            float speed = skillInfo.flySpeed;            Vector3 Pos = GetTransform ().position;            flyDir = dir;            flyDir.Normalize ();            Quaternion rt = Quaternion.LookRotation (flyDir);            GetTransform ().rotation = rt;            GetTransform ().rotation = rt;            Pos += flyDir * Time.deltaTime * speed;            GetTransform ().position = Pos;        }        else        {            SkillEmitConfig skillInfo = ConfigReader.GetSkillEmitCfg (skillID);            Vector3 flyDir = Vector3.zero;            float speed = skillInfo.flySpeed;            Vector3 Pos = GetTransform ().position;            float distance;            if (enOwner == null || enOwner.RealEntity == null || enOwner.RealEntity.objAttackPoint == null)            {                flyDir = fixPosition - Pos;                distance = Vector3.Distance (Pos, fixPosition);            }            else            {                flyDir = enOwner.RealEntity.objAttackPoint.transform.position - Pos;                distance = Vector3.Distance (GetTransform ().position, enOwner.RealEntity.objAttackPoint.postion);            }            if (flyDir == Vector3.zero)            {                flyDir = Vector3.one;            }            flyDir.Normalize ();            Quaternion rt = Quaternion.LookRotation (flyDir);            GetTransform ().rotation = rt;            Pos += flyDir * Time.deltaTime * speed;            GetTransform ().position = Pos;            if (speed * Time.deltaTime > distance)            {                isDead = true;            }        }    }    public override void Update()    {        if (isDead)        {            return;        }        base.Update ();        SkillEmitConfig skillInfo = ConfigReader.GetSkillEmitCfg (skillID);        //拖拽效果,不需要更新        if (skillInfo.emitType == 8)        {            return;        }        Ientity enTarget;        EntityManager.AllEntitys.TryGetValue (enTargetKey, out enTarget);        //目标角色消失,特效消失        if (skillInfo.emitType == 1 && enTarget == null)        {            isDead = true;            return;        }        switch (skillInfo.emitType)        {        case 1:     //有目标类型        case 4:        case 5:        case 7:            UpdateTargetType ();            break;        case 2:     //无目标类型        case 6:            UpdateNoTargetType ();            break;        case 3:            UpdateTurnType ();            break;        }    }}
原创粉丝点击