Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unity3d:找到前面的游戏对象_Unity3d_Math_Vector_Position - Fatal编程技术网

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在前面”);}
}