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 输出 x,y = 0,0 的纹理坐标,以及距离的正确值 0.35。当我的球体上确实有带纹理的 Material 时,为什么 textureCoord 始终为 0,0?

最佳答案

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

更新 :

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

从 Unity 的 GameObject->Create_Other 菜单中添加的游戏对象往往会根据对象的形状(球体、盒子等)默认为碰撞器,因为网格碰撞器的计算成本更高。

关于unity3d - 为什么 Unity3D RaycastHit.textureCoord 总是 0,0?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15046115/

10-12 04:04