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|表示向量的模,表示两个向量的夹角。

在这里插入图片描述

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

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

 public Transform target;void SelfPos(){Vector3 delta = target.position - transform.position;//判断前后if (Vector3.Dot(transform.forward, delta)>0)Debug.Log("在前方!!!");elseDebug.Log("在后方!!!");//判断左右if (Vector3.Dot(transform.right, delta) > 0)Debug.Log("在右方!!!");elseDebug.Log("在左方!!!");if (Vector3.Dot(transform.up, delta) > 0)Debug.Log("在上方!!!");elseDebug.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();}
}


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部