判断是否在攻击范围内

/// <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;
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值