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

Pet*_*ris 3 unity-game-engine

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
  ));
Run Code Online (Sandbox Code Playgroud)

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

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

球体属性

Jer*_*dak 5

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

更新:

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

从Unity的GameObject-> Create_Other菜单添加的GameObjects倾向于默认基于对象形状(球体,盒子等)的碰撞器,因为网格碰撞器在计算上更昂贵.