Unity 网格碰撞体光线投射不起作用
本文关键字:光线投射 不起作用 碰撞 网格 Unity | 更新日期: 2023-09-27 18:36:07
我似乎无法让光线投射击中网格对撞机。我需要这个来获取纹理 uv 坐标。
if (Input.GetMouseButtonUp(0))
{
var ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;
if (Physics.Raycast(ray, out hit, 100f))
{
// We've hit this mesh b/c its the only one we have ...
var texture = meshRenderer.material.mainTexture as Texture2D;
var pixelUV = hit.textureCoord;
print("pixs uvs" + pixelUV.ToString());
pixelUV.x *= texture.width;
pixelUV.y *= texture.height;
var position = new Position(pixelUV.x, pixelUV.y);
print("Position: " + position.x + " " + position.y);
texture.FloodFillBorder(position.x, position.y, fillColor, borderColor);
texture.Apply();
}
}
我的游戏对象具有此脚本,其中包含检查输入的更新函数,以及网格过滤器、网格渲染器和网格碰撞器。网格是由 Unity 的菜单制作的简单四边形。
我做错了什么?我只是不明白为什么它没有击中网格。相机的z position
-10
,网格处于0
。以不同的方式放置会产生相同的结果。
您可以检查网格组件,看看是否选中了"IsTrigger",但我可以提出其他建议吗?
默认情况下,Unity 会为您完成整个光线投射。MonoBehavior 类具有诸如 OnMouseDown() 或 onMouseDrag() 等函数,其中 GUIElement 或在您的情况下带有 Collider 组件的对象会获取这些事件。因此,如果您的游戏对象具有碰撞器组件,只需实现这些方法之一,您就可以开始使用了。
这可以保持更新功能干净。
检查:http://docs.unity3d.com/ScriptReference/MonoBehaviour.html