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当我确实在我的球体上有一个带有纹理的材质?
答案 0 :(得分:5)
其实让我在这里移动我的评论,球体是使用网格对撞机还是球体对撞机?如果它不使用网格对撞机,textureCoord returns Vector2.zero。
<强>更新强>:
要更改GameObject的碰撞器类型,请在Unity编辑器中突出显示它,然后转到 Component-&gt; Physics-&gt; MeshCollider 。如果系统提示“替换现有组件”,请选择“替换”。
从Unity的 GameObject-&gt; Create_Other 菜单添加的GameObjects倾向于默认基于对象形状(球体,盒子等)的对撞机,因为网格对撞机的计算成本更高。
答案 1 :(得分:1)
texture2d的宽度和高度实际上是您所期望的吗?可能主纹理不是您正在使用的着色器上的正确纹理。