扇形攻击范围
/// <summary>
/// 伞形攻击范围
/// </summary>
/// <param name="attacker">攻击方</param>
/// <param name="attacked">被攻击方</param>
/// <param name="angle">伞形角度</param>
/// <param name="radius">伞形半径</param>
/// <returns></returns>
public bool UmbrellaAttact( Transform attacker ,Transform attacked ,float angle, float radius)
{
Vector3 deltaA = attacked.position - attacker.position;
float tmpAngle = Mathf.Acos(Vector3.Dot(deltaA.normalized, attacker.forward)) * Mathf.Rad2Deg;
if (tmpAngle < angle * 0.5f && deltaA.magnitude < radius)
{
return true;
}
return false;
}
圆形攻击范围
圆形攻击范围有两种,以玩着荣耀的王昭君大招为例子,
第一种是制定位置施法:新版本的王昭君的大招是指定位置施法的,也就是说在玩家固定施法半径以内可随意放一个圆形的技能。在半径之内的敌人受伤。
第二种是固定位置施法:老版本的王昭君大招是在自身一定半径以内,敌人在这个范围内受伤。
其实两种判断都很简单,只需要判断敌人和SkillPosition之间的距离是否小于半径即可。
/// <summary>
/// 不定点式圆形攻击
/// </summary>
/// <param name="attacked">被攻击方</param>
/// <param name="skillPosition">技能释放位置</param>
/// <param name="radius">半径</param>
/// <returns></returns>
public bool CircleAttack(Transform attacked,Transform skillPosition, float radius)
{
float distance = Vector3.Distance(attacked.position, skillPosition.position);
if (distance < radius)
{
return true;
}
return false;
}