思路:
先获取角色前面的敌人
通过攻击类别攻击敌人
新建脚本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;
}
}
点击攻击按钮时,调用这里的方法即可攻击敌人