unity 向量叉乘,点乘游戏中应用

一 两个向量点乘结果是一个标量 可以得到 怪物在我前方还是后方。游戏中 扇形,矩形 区域检测可以用点乘 代码如下

 1. 扇形检测

Vector3 toDir = enemy.transform.position - this.transform.position; //得到 怪物与我之间的距离

float angle = Mathf.Acos(Vector3.Dot(transform.forward, toDir.normalized)) * Mathf.Rad2Deg; //弧度转角度

 if (angle < maxAngle * 0.5f && toDir.magnitude < 5)
   {
                Debug.Log("进入范围");
   }

2 矩形检测

private bool RectAttack(Transform selfTrans, Transform enemy, float width, float distance)     //生成一个矩形体范围的碰撞区域
    {
        Vector3 tmpDis = enemy.position - selfTrans.position;     //算出攻击者和被攻击者之间的向量差

        float dir = Vector3.Dot(selfTrans.forward, tmpDis.normalized);  //判断前后
        if (dir > 0&& tmpDis.magnitude<= distance)
        {

            float leftOrRight = Mathf.Abs(Vector3.Dot(selfTrans.right, tmpDis));
            Debug.Log("leftOrRight:"+ leftOrRight);
            if (leftOrRight <= width)    //判断左右距离
            {
                Debug.LogError("进入攻击");
                return true;
            }

            return false;
        }

        return false;
    }

 两个向量点乘结果 为正  它们的夹角小于90度,为负 大于90 ,为零 相互垂直

2 两个向量叉乘结果是一个向量,可以得到 怪物是在左边还是右边(y值 判断)  叉乘代码如下

Vector3 toDir = enemy.transform.position - this.transform.position; //得到 怪物与我之间的距离 

Vector3 vCross = Vector3.Cross(this.transform.forward, toDir );

if(vCross.y >0)

{

Debug.Log("怪物在自己的右方");

}

else

{

Debug.Log("怪物在自己的左方");

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值