为什么Unity3D RaycastHit.textureCoord总是0,0?

时间:2013-02-23 21:46:52

标签: unity3d

var startPoint = 
  shaft.transform.position 
  + shaft.transform.forward;
var ray = new Ray(
    startPoint, 
    -shaft.transform.forward
  );

RaycastHit rayCastHit;
Physics.Raycast(ray, out rayCastHit);
var textured2D = (Texture2D)discoBall.renderer.material.mainTexture;
Vector2 textureCoord = rayCastHit.textureCoord;
Debug.Log(string.Format(
    "{0},{1} at distance {2}", 
    textureCoord.x * textured2D.width, 
    textureCoord.y * textured2D.height, 
    rayCastHit.distance
  ));

我有一个球体,里面有一个物体“轴”物体。我计算出一个startPoint,它在轴指向的方向上离轴(离开球体)。然后我创建一条指向球体的光线,其距离相同,以便它与我的球体外部碰撞。

Debug.Log为textureCoord输出x,y = 0,0,并为距离输出正确的值0.35。为什么textureCoord总是0,0当我确实在我的球体上有一个带有纹理的材质?

Sphere properties

2 个答案:

答案 0 :(得分:5)

其实让我在这里移动我的评论,球体是使用网格对撞机还是球体对撞机?如果它不使用网格对撞机,textureCoord returns Vector2.zero

<强>更新

要更改GameObject的碰撞器类型,请在Unity编辑器中突出显示它,然后转到 Component-&gt; Physics-&gt; MeshCollider 。如果系统提示“替换现有组件”,请选择“替换”。

从Unity的 GameObject-&gt; Create_Other 菜单添加的GameObjects倾向于默认基于对象形状(球体,盒子等)的对撞机,因为网格对撞机的计算成本更高。

答案 1 :(得分:1)

texture2d的宽度和高度实际上是您所期望的吗?可能主纹理不是您正在使用的着色器上的正确纹理。