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当我确实在我的球体上有一个带有纹理的材质?

其实让我在这里移动我的评论,球体是使用网格对撞机还是球体对撞机?如果它不使用网格对撞机,textureCoord将返回Vector2.zero.
更新:
要更改GameObject的碰撞器类型,请在Unity编辑器中突出显示它,然后转到Component-> Physics-> MeshCollider.如果系统提示"替换现有组件",请选择"替换".
从Unity的GameObject-> Create_Other菜单添加的GameObjects倾向于默认基于对象形状(球体,盒子等)的碰撞器,因为网格碰撞器在计算上更昂贵.
| 归档时间: |
|
| 查看次数: |
2069 次 |
| 最近记录: |