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