Unity算法——扇形和圆形技能伤害判断

扇形攻击范围

Unity算法——扇形和圆形技能伤害判断_第1张图片

 /// 
    /// 伞形攻击范围
    /// 
    /// 攻击方
    /// 被攻击方
    /// 伞形角度
    /// 伞形半径
    /// 
    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之间的距离是否小于半径即可。

Unity算法——扇形和圆形技能伤害判断_第2张图片

/// 
    /// 不定点式圆形攻击
    /// 
    /// 被攻击方
    /// 技能释放位置
    /// 半径
    /// 
    public bool CircleAttack(Transform attacked,Transform skillPosition, float radius)
    {
        float distance = Vector3.Distance(attacked.position, skillPosition.position);
        if (distance < radius)
        {
            return true;
        }
        return false;
    }

你可能感兴趣的:(Unity算法——扇形和圆形技能伤害判断)