【问题标题】:Unity mesh collider raycast not workingUnity网格对撞机光线投射不起作用
【发布时间】:2016-06-06 08:43:10
【问题描述】:

我似乎无法让光线投射击中网格对撞机。我需要这个来获取纹理 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();
    }
}

我的游戏对象有这个脚本,其中包含检查输入的更新函数,以及网格过滤器、网格渲染器和网格碰撞器。网格是由统一的菜单组成的简单四边形。

我做错了什么?我只是不明白为什么它没有击中网格。相机的z position-10,网格是0。不同的放置会产生相同的结果。

【问题讨论】:

    标签: c# unity3d


    【解决方案1】:

    您可以检查 Mesh 组件,看看是否检查了“IsTrigger”,但我可以建议其他的吗?

    默认情况下,Unity 会为您完成整个光线投射。 MonoBehaviour 类具有诸如 OnMouseDown() 或 onMouseDrag() 等功能,其中 GUIElement 或在您的情况下具有 Collider 组件的对象获取这些事件。因此,如果您的游戏对象有一个碰撞器组件,只需实现这些方法之一,您就可以开始了。

    这可以让你的更新功能保持干净。

    检查:http://docs.unity3d.com/ScriptReference/MonoBehaviour.html

    【讨论】:

    • 您好,谢谢您的回复,我需要命中对象的 uv 坐标。尽管如此,我还是决定采用一种更简单的方法,通过转换几个坐标来简单地确定用户点击的位置。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-18
    • 1970-01-01
    • 2016-04-22
    • 2016-06-19
    • 1970-01-01
    • 2021-02-18
    • 1970-01-01
    相关资源
    最近更新 更多