首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >单位:在光标下确定平面的紫外线

单位:在光标下确定平面的紫外线
EN

Stack Overflow用户
提问于 2018-01-28 14:27:44
回答 1查看 1.2K关注 0票数 1

我有个平面物体。这个平面相对于照相机是固定的(平面是照相机的子平面,总是对着相机-- 固定平面)。

这架飞机上有一些RenderTexture。现在我想知道,什么是UV坐标,目前在鼠标光标下。以下脚本位于此平面对象上:

代码语言:javascript
复制
    //....
    _collider = gameObject.GetComponent<Collider>(); // Plane's mesh collider
    //....


    void FixedUpdate()
{
    RaycastHit hit;

    var p = UnityEngine.Input.mousePosition;

    if (_collider.Raycast(Camera.main.ScreenPointToRay(p), out hit, 100f))
    {
        var meshCollider = hit.collider as MeshCollider;
        var rend = hit.collider.GetComponent<Renderer>();

        if (rend == null || rend.sharedMaterial == null || rend.sharedMaterial.mainTexture == null || meshCollider == null)
            return;

        var pixelUV = hit.textureCoord;

        pixelUV.x *= rend.material.mainTexture.width;
        pixelUV.y *= rend.material.mainTexture.height;

        Debug.Log("UV=[" + hit.textureCoord.x + ";" + hit.textureCoord.y + "]" + ", XY=[" + pixelUV.x + ";" + pixelUV.y + "]");
    }
}

但是我在日志里看到的坐标很奇怪。首先,当我改变视口的纵横比时,16:10中有on 51,466的点变成on 95,464,4:3,依此类推。第二,偏移量太大了,即使鼠标指针离这个平面很远,我也能得到紫外线读数。我想不出怎么才能把这件事做好。

无论屏幕大小如何,如何正确获取这些紫外线读数?

UPD:我最终完全放弃了鼠标指针。如果您隐藏游标,只需查看碰撞检测,上面的代码实际上运行良好。现在我在光线中点显示一个非常小的球,当你移动鼠标时,这个球平滑地跟随平面表面:现在这是我的“指针”。它运行得非常好,甚至比“真实”指针更好:我的3D光标实际上遵循物体的几何学。由于这个球体代表的是实际的射线投射命中点,所以精度很高。

我真的很喜欢这个解决办法,但问题仍然存在。

EN

回答 1

Stack Overflow用户

发布于 2018-01-29 12:38:46

看看RaycastHit.textureCoord。(链接以供参考)

您可以使用这样的工具获得一个RaycastHit-object:

代码语言:javascript
复制
    ...
    Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
    RaycastHit hit;

    if (Physics.Raycast(ray, out hit, 100))
    {
        //use hit.textureCoord here
    }
   ...

来源

希望这能有所帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48487397

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档