为什么Unity3D RaycastHit.textureCoord始终为0,0?
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(以便到达球外)。然后我创建一条射线指向距离相同的球体,以便它与球体的外部相碰撞。为什么Unity3D RaycastHit.textureCoord始终为0,0?
Debug.Log输出x,对于textureCoord输出y = 0,0,对于距离输出正确的0.35值。为什么textureCoord始终是0,0,实际上我的球体上有纹理材质?
其实让我在这里移动我的评论,球体是否使用网格对撞机或球体对撞机?如果它不使用网状碰撞器,textureCoord returns Vector2.zero。
更新:
要改变对撞机类型的游戏对象在Unity编辑器中选中它,去组分 - >物理学的> MeshCollider。如果提示“替换现有组件”,请选择“替换”。
从Unity的添加的GameObjects GameObject-> Create_Other菜单倾向于基于对象的形状(球体,框等)默认为碰撞体,因为网格碰撞体在计算上更昂贵。
是对的Texture2D宽度和高度实际上你期待什么? maintexture可能不是您使用的着色器上的正确纹理。
是的,512x512和我对素材的唯一纹理 – 2013-02-23 22:23:26
添加屏幕截图 – 2013-02-23 22:31:13
@PeterMorris是的,它有一个球**对撞**。尝试切换到网格**对撞机**。组件 - >物理 - > MeshCollider,'是'来代替。 – Jerdak 2013-02-23 22:39:11
如果您将此添加到答案中,并且还要提到材料类型需要更改为“高级”,以便可以检查“已启用读/写”,那么我会很乐意接受它。 感谢您的帮助! – 2013-02-24 19:27:08