Unity 点乘(Dot)判断目标在物体的前后左右上下

我们一步一步从最基础的来,刚开始学习Unity的时候分不清up、right、forward,用这张图就非常清晰了
在这里插入图片描述

Vector3.forward和transform.forward的区别

  • v3.forward:坐标系中的z轴的正方向(蓝轴),该值固定为(0,0,1)
    x、y轴同理

  • transform.forward:物体自身坐标系中的z轴(蓝轴)的方面在世界坐标系中的指向。对于物体来说,该参数就是物体自身的正前方。
    x、y轴同理

这个问题详解 上面两条是对这个详解的简化

点乘(Dot)

点乘的数学公式为: a·b=|a|·|b|cos<a,b>(两向量的模与其夹角的余弦值相乘) 其中|a|和|b|表示向量的模,<a,b>表示两个向量的夹角。

在这里插入图片描述

这张图就很好的解释了,我们知道向量的点乘得到的是一个数值,通过点乘的正负值,我们可以判断两个向量的方向关系。
蓝轴------------>人物的正前方
绿轴------------>目标距离人物的向量在这里插入图片描述
判断目标在左还是在右(这个例子并不是很合理)
在这里插入图片描述

点乘判断方向 代码如下 前后左右上下已经标记清楚

 public Transform target;
   void SelfPos()
    {
        Vector3 delta = target.position - transform.position;
        //判断前后
        if (Vector3.Dot(transform.forward, delta)>0)
            Debug.Log("在前方!!!");
        else
            Debug.Log("在后方!!!");

        //判断左右
        if (Vector3.Dot(transform.right, delta) > 0)
            Debug.Log("在右方!!!");
        else
            Debug.Log("在左方!!!");

        if (Vector3.Dot(transform.up, delta) > 0)
            Debug.Log("在上方!!!");
        else
            Debug.Log("在下方!!!");
    }

之前看到过很多这种写法:“点乘判断前后,叉乘判断左右”,很不理解为什么要这样说,如果只是判断左右问题的话感觉点乘就可以了,像跟随抛物线可以用叉乘。希望有大哥说下为什么要用叉乘来算左右,和点乘算出来的有什么区别
在这里插入图片描述

这个是个两个Cube画线的代码 比较简单

using UnityEngine;

public class TestStone : MonoBehaviour
{
   public Transform target;
   
   void SelfPos()
    {
        Vector3 delta = target.position - transform.position;
       
        Debug.DrawLine(transform.position, target.position);
        Debug.DrawLine(transform.position, transform.forward * 5);
        Debug.DrawLine(transform.position, transform.up*40* Vector3.Dot(transform.right, delta));
    }
    void Update()
    {
        SelfPos();
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值