Vector 任意方向的联合光线投射

Vector 任意方向的联合光线投射,vector,unity3d,Vector,Unity3d,这一点点代码不会给我一个前向光线投射,我已经在几个小时内搜索了许多解决方案,但都没有结果 所以,上面的这些不会给我一个直接的光线投射出物体的正面,我不知道为什么。我认为这可能是一个疏忽。的构造函数采用了原点和方向。返回围绕x、y和z轴的三个角度的向量。“方向”听起来可能类似于角度,但事实并非如此:角度是旋转,而不是方向。重要的区别在于,方向向量“指向”某个方向,但旋转描述了事物的方向。您可以使用旋转信息创建方向向量,但幸运的是Unity可以为您做到这一点 解决此问题的最简单方法是使用Unity的

这一点点代码不会给我一个前向光线投射,我已经在几个小时内搜索了许多解决方案,但都没有结果

所以,上面的这些不会给我一个直接的光线投射出物体的正面,我不知道为什么。我认为这可能是一个疏忽。

的构造函数采用了原点和方向。返回围绕
x
y
z
轴的三个角度的向量。“方向”听起来可能类似于角度,但事实并非如此:角度是旋转,而不是方向。重要的区别在于,方向向量“指向”某个方向,但旋转描述了事物的方向。您可以使用旋转信息创建方向向量,但幸运的是Unity可以为您做到这一点

解决此问题的最简单方法是使用Unity的内置方式获取对象的前进方向向量(如
Ray
doc中所示):


为您提供
变换的前进方向向量
,这意味着光线将沿对象面对的方向发射。

为什么不使用“transform.forward”而不是“this.transform.euleranges”?这里有很多错误。eulerAngles不会产生与方向向量相同的结果。(0180,0)的欧拉曲线可能给出(0,0,-1)或类似的方向。此外,默认情况下,光线在世界空间中投射。因此,首先通过说Vector3 dir=target.transform.pos-this.transform.position获得方向,并将其用作方向参数。@reasuria我看不出有任何理由假设存在
目标。Q要求“从对象前面投射直光线”。但第一部分你是对的,答案是正确的。我知道我在做一些非常糟糕的事情,考虑到我在团结方面的丰富经验,这是可悲的。我用Vector3.forward代替transform.forward 9_9。但谢谢你花时间让我更清楚地知道在这种情况下该怎么办,因为这可能会帮助我将来更好地记住。
Ray r = new Ray(this.transform.position, this.transform.eulerAngles);
        RaycastHit hit;
        if(Physics.Raycast(r, out hit, 3000, 256 /*layer 8*/ )){
// Create a ray from the transform position along the transform's z-axis
Ray ray = new Ray(transform.position, transform.forward);