Unity3d:找到前面的游戏对象
我有两个Unity3d:找到前面的游戏对象,unity3d,math,vector,position,Unity3d,Math,Vector,Position,我有两个gameObjectsA和B。它们以90度旋转,使其局部y轴朝前 第一个案例 在这种情况下,B的本地y位置在A的本地y位置之前 第二种情况 尽管它们的全局位置与第一种情况相同,但我们可以在这里观察到A的局部y位置早于B的局部y位置 我尝试使用A.transform.localPosition.y和B.transform.localPosition.y来找出哪个更大,但它不起作用。在这两种不同的情况下,我能做些什么来找出哪一个在前面呢?向量投影是你的朋友。将两个位置投影到一条线上,比较
gameObjects
A
和B
。它们以90度旋转,使其局部y轴朝前
第一个案例
在这种情况下,B的本地y位置
在A的本地y位置之前
第二种情况
尽管它们的全局位置与第一种情况相同,但我们可以在这里观察到A的局部y位置早于B的局部y位置
我尝试使用A.transform.localPosition.y
和B.transform.localPosition.y
来找出哪个更大,但它不起作用。在这两种不同的情况下,我能做些什么来找出哪一个在前面呢?向量投影是你的朋友。将两个位置投影到一条线上,比较它们的大小(或平方大小,速度更快)
案例1:
Vector3 a = Vector3.Project(A.position, Vector3.up);
Vector3 b = Vector3.Project(B.position, Vector3.up);
if (a.sqrMagnitude > b.sqrMagnitude)
{
// a is ahead
}
else
{
// b is ahead
}
案例2:将两个位置投影到Vector3.left上
也许你甚至可以简单地将两个位置投影到两个对象的前向向量上(A.forward或B.forward,假设它们旋转相等)
希望这能有所帮助。您可以比较矢量3.Dot(A.position,A.forward)
和矢量3.Dot(B.position,B.forward)
以找到与它们的前进相关的前面的一个。
较大的对象在前面,这适用于所有旋转,包括3D旋转
您可以使用以下代码段自行测试:
//在检查器上分配这些值
公共交通a、b;
公共浮动轮换z;
无效更新(){
a、 eulerAngles=新矢量3(0,0,旋转Z);
b、 eulerAngles=新矢量3(0,0,旋转Z);
Debug.DrawRay(a.position,a.right,Color.green);
Debug.DrawRay(b.position,b.right,Color.red);
var DotA=矢量2.点(a.位置,a.右侧);
var DotB=向量2.点(b.位置,b.右);
如果(DotA>DotB){Debug.Log(“A在前面”);}
else{Debug.Log(“B在前面”);}
}