判定攻击目标是否在攻击者扇形攻击范围类

忽略高度Y轴的扇形判定 

public static float GetDistance(float x1, float y1, float x2, float y2)
{
return Mathf.Sqrt(GetDistancePower(x1, y1, x2, y2));
}
public static float GetDistancePower(float x1, float y1, float x2, float y2)
{
return Mathf.Pow(x1 - x2, 2) + Mathf.Pow(y1 - y2, 2);
}
public static float GetDistance(Transform from, Transform to)
{
return GetDistance(from.position.x, to.position.x, from.position.z, to.position.z);
}
public static Vector3 GetVetor(Vector3 from, Vector3 to)
{
return new Vector3(to.x - from.x, from.y, to.z - from.z);
}
/// 
/// 判定攻击目标是否在攻击者扇形攻击范围类
/// 
/// 攻击者
/// 被击者
/// 扇形半径
/// 扇形角度
/// 
public static bool IsInSector(Transform source, Transform target, float radius, float angle)
{
float STDistance = GetDistance(source, target);

Vector3 _tVector = GetVetor(source.transform.position, target.transform.position);
Vector3 _sVector = (source.position + (source.rotation * Vector3.forward) * radius);
float targetAngle = Vector3.Angle(_tVector, _sVector);

if (STDistance < radius && targetAngle < angle / 2 && targetAngle > -(angle / 2))
return true;
return false;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值