unity3d 如何将鼠标位置重新Map到可能移动的UI元素?

pnwntuvh  于 2022-11-30  发布在  其他
关注(0)|答案(1)|浏览(138)

我正在开发一款即时战略游戏,它的用户界面非常丰富,所以我把主摄像头的输出移到了一个四像素的屏幕上,这个屏幕只占了屏幕的一半,我把一些用户界面效果放到了剩下的屏幕上。我目前与游戏交互的方式是使用Unity的Input. mousePosition。当我把摄像头的输入移到四像素的屏幕上时,很明显这些像素坐标被扭曲了,所以我这样修正了它们:
mapMousePos = (Input.mousePosition * mscaleCorr - mapCorrection * mscaleCorr);
mapCorrection是较小提要的像素偏移量,mscaleCorr是通过反复试验得到的幻数--临时修复。
重点是,现在我意识到,在不同的分辨率下运行这个游戏几乎肯定会打破这些神奇的数字。
我希望mapMousePos是在我把游戏移到小四边形之前的Input.mousePosition--从四边形左下角的(0,0)到四边形右上角的屏幕(宽度,高度)。这只是为了让它在我的游戏摄像头上与screenToWorld点配合得很好。
我有一个全屏四元的父代相机饲料四元,并尝试使用它们的相对位置来应用必要的转换,但它没有工作,我猜是因为它是一个像素问题。
我已经在文档中找到了一个使用Camera内置的worldToScreenPoint函数的解决方案,但没有任何运气。我相信我最终会遇到一个修复方案,但我会非常感谢任何指示。

omhiaaxx

omhiaaxx1#

这是我想到的虽然很蠢,但很管用
我把对象放在四边形的左下角和右上角,在代码中存储为bL和tR。
然后,我使用ScreenToWorldPoint()将mousePosition转换为worldPosition,通过减去左下角的位置来重新Map它,并通过将其除以右上角的增量来获得屏幕上的百分比。将百分比乘以游戏摄像头的像素尺寸,瞧。
在程式码中,这个:

Vector3 wPos = finalcam.ScreenToWorldPoint(Input.mousePosition);
    wPos -= bL.transform.position;
    mapMousePos = new Vector2(Mathf.Abs(wPos.x), Mathf.Abs(wPos.y));

    mapMousePos = new Vector2(
        mapMousePos.x / (tR.transform.position.x -bL.transform.position.x),
        mapMousePos.y / (tR.transform.position.y - bL.transform.position.y));

    mapMousePos = new Vector2(mapMousePos.x * Camera.main.pixelWidth, mapMousePos.y * Camera.main.pixelHeight);

同样,这很愚蠢,但似乎很有效。我把这个放在这里,以防有人知道更干净的方法。

相关问题