游戏开发学习笔记(十四)角色攻击处理

来源:互联网 发布:聊骚软件靠谱吗 编辑:程序博客网 时间:2024/06/05 15:06

思路:

先获取角色前面的敌人

通过攻击类别攻击敌人

新建脚本Player Attack,编辑脚本
public class PlayerAttack : MonoBehaviour {    public enum AttackRange    {        Forward,        Around    }    public static PlayerAttack _instance;    public Animator Anim;    public float forward_dis = 4f;      //向前攻击的距离    public float around_dis = 4f;       //周围攻击的距离    void Awake()    {        _instance = this;    }void Update () {        }    //通过攻击类型释放攻击    public void OnAttack_SkillBtn(bool isPress, AttackType attackType)    {        ArrayList array = null;        if (PlayerControl._instance.animatorInfo.normalizedTime > 0.5f)        {            switch (attackType)            {                case AttackType.Basic:                    array = GetEnemyInAttackRange(AttackRange.Forward);                    foreach (GameObject go in array)                        go.SendMessage("Hurt", PlayerState._instance.ReadAttack());                    break;                case AttackType.Skill01:                    array = GetEnemyInAttackRange(AttackRange.Around);                    foreach (GameObject go in array)                        go.SendMessage("Hurt", PlayerState._instance.ReadAttack() * 1.2f);                    break;                case AttackType.Skill02:                    array = GetEnemyInAttackRange(AttackRange.Forward);                    foreach (GameObject go in array)                        go.SendMessage("Hurt", PlayerState._instance.ReadAttack() * 1.5f);                    break;                case AttackType.Skill03:                    array = GetEnemyInAttackRange(AttackRange.Around);                    foreach (GameObject go in array)                        go.SendMessage("Hurt", PlayerState._instance.ReadAttack() * 1.8f);                    break;            }        }    }     //得到在范围之内的敌人    ArrayList GetEnemyInAttackRange(AttackRange attackRange)    {        ArrayList arrayList = new ArrayList();        if (attackRange == AttackRange.Around)    //范围攻击不需要判断是否在前面,只需判断距离时否在攻击范围内        {            foreach (GameObject go in TransformScripManage._instance.enemyList)            {                Vector3 pos = transform.InverseTransformPoint(go.transform.position);                float distance = Vector3.Distance(Vector3.zero, pos);    //敌人跟主角的距离                if (distance <= around_dis)                {                    arrayList.Add(go);                }                            }        }       if (attackRange == AttackRange.Forward) //在向前的攻击范围内        {            foreach(GameObject go in TransformScripManage._instance.enemyList)  //遍历敌人            {                Vector3 pos = transform.InverseTransformPoint(go.transform.position);   //把敌人坐标转化为主角的局部坐标                if (pos.z > -0.2f)  //如果在主角前面                {                    float distance = Vector3.Distance(Vector3.zero, pos);    //敌人跟主角的距离                    if (distance <= forward_dis)                        arrayList.Add(go);                }            }        }               return arrayList;    }    }
点击攻击按钮时,调用这里的方法即可攻击敌人
原创粉丝点击