/// <summary>
/// 判断是否在攻击范围(4*6)
/// </summary>
/// <param name="attack">攻击者</param>
/// <param name="attacked">被攻击者</param>
/// <returns></returns>
public bool IsEnterAttackRange(Transform attack, Transform attacked)
{
//先判断与forward的夹角是否小于90度,再判断在forward上的投影是否小于3 true:继续判断向量在x轴上的投影的绝对值是否小于2 false:直接返回false
Vector3 vec = attacked.position - attack.position;//主角指向npc的向量
Vector3 forward = attack.forward;//正方向的单位向量
float angle = Vector3.Dot(forward, vec);//正值表示两个向量夹角小于90度; 在正方向上的投影长度
if (angle > 0) //在正前方
{
if (angle <= 3)//在正前方上的投影小于3
{
float x = Mathf.Abs(Vector3.Dot(transform.right, vec));//有可能在正前方的左或右
if (x <= 2)//在x轴上的投影小于2
{
return true;
}
}
}
return false;
}
判断是否在攻击范围内
最新推荐文章于 2020-06-24 16:21:55 发布