2013-02-23 626 views
3
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,实际上我的球体上有纹理材质?

Sphere properties

回答

5

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

更新

要改变对撞机类型的游戏对象在Unity编辑器中选中它,去组分 - >物理学的> MeshCollider。如果提示“替换现有组件”,请选择“替换”。

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

+0

添加屏幕截图 – 2013-02-23 22:31:13

+0

@PeterMorris是的,它有一个球**对撞**。尝试切换到网格**对撞机**。组件 - >物理 - > MeshCollider,'是'来代替。 – Jerdak 2013-02-23 22:39:11

+0

如果您将此添加到答案中,并且还要提到材料类型需要更改为“高级”,以便可以检查“已启用读/写”,那么我会很乐意接受它。 感谢您的帮助! – 2013-02-24 19:27:08

1

是对的Texture2D宽度和高度实际上你期待什么? maintexture可能不是您使用的着色器上的正确纹理。

+0

是的,512x512和我对素材的唯一纹理 – 2013-02-23 22:23:26

相关问题