【问题标题】:Scaling a touch/mouse vector with a render texture?使用渲染纹理缩放触摸/鼠标矢量?
【发布时间】:2019-12-06 04:40:22
【问题描述】:

所以我的游戏是为 1920x1080 设计的,我正在从我的主摄像头创建一个渲染纹理,然后将该纹理拉伸/收缩到设备的屏幕尺寸,无论外观如何……这会在 4:3 上产生一些挤压等等,但老实说,我更喜欢稍微失真而不是信箱,而且游戏不适合扩展背景元素。 (有几个原因)

无论如何,我的游戏正在使用“ScreenToWorld”从渲染相机(显示渲染纹理的相机)读取输入,但由于最终渲染纹理被挤压,触摸位置不匹配。

EG:这里是 16:9 比例,完美匹配触摸位置

这是没有压缩纹理的 4:3 版本(屏幕边缘被剪掉)......再次完美

这是挤压后的 4:3 版本,从知道其 4:3 但没有意识到渲染纹理被挤压的相机读取触摸,因此它在我触摸的更左或向右偏移。

据我所知,在上面的方面示例中,我需要从压扁的纹理放大触摸位置以匹配实际游戏,但我所有尝试获得正确的触摸位置都不是' t 跨多个分辨率更正。

有人知道解决这个问题的最佳方法吗?还是统一有一些内置的东西我错过了?我之前在 XNA/Monogame 中使用矩阵做过此操作,但 Unity 中的类似代码不起作用。

【问题讨论】:

    标签: unity3d


    【解决方案1】:

    输入问题似乎帮助我解决了它:

            Vector2 tempFingerPos = renderCam.ScreenToWorldPoint(new Vector2(Input.mousePosition.x, Input.mousePosition.y));
            float actualAspect = (float)Screen.width / (float)Screen.height; // Actual size
            float intendedAspect = 1920f / 1080f; //Original Size
            float finalAspect = intendedAspect / actualAspect;
            Debug.Log("FINAL ASPECT: " + finalAspect);
    
            tempFingerPos.x *= finalAspect; // Only multiply X because image is only squashed on X and unity Y is accurate
    

    原来我之前的实验失败了,因为我没有强制浮点或添加“f”强制浮点,它给了我整数值......而且使用矩阵只是矫枉过正。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-08-09
      • 1970-01-01
      • 2018-01-14
      • 1970-01-01
      • 1970-01-01
      • 2015-12-12
      • 1970-01-01
      • 2013-04-10
      相关资源
      最近更新 更多