我试着弄清楚鼠标是否在矩形变换内部。
每次用户点击屏幕时,都会抛出一个球。但是如果用户点击暂停按钮,则不应该抛出任何球。
我尝试用这段代码解决,但似乎只识别了rect变换的右上角四分之一。这是一个显示实际问题的简短视频:https://youtu.be/gdyDBK6ubgo
以下是代码段:
nil | string
这里是screenshot,显示了矩形变换。
答案 0 :(得分:1)
使用RectTransformUtility.RectangleContainsScreenPoint检查鼠标指针是否在Rect Transform中。无论rectTransform在本地放置在哪里,该方法都将起作用。
public RectTransform rectTransform;
...
Vector2 mousePos = Input.mousePosition;
RectTransformUtility.RectangleContainsScreenPoint(rectTransform, mousePos);
答案 1 :(得分:0)
它无法正常工作,因为您正在执行一些不必要的工作。你不需要这一行:
Vector2 mousePos = new Vector3(Screen.width - Input.mousePosition.x,Screen.height - Input.mousePosition.y, 0);
只需将Input.mousePosition
传递给Rect.Contains
函数即可。
Vector2 mousePos = Input.mousePosition;
pauseButton.GetComponent<RectTransform>().rect.Contains (mousePos);
即使这可能有效,但这并不是如何在UI或GameObjects上正确检测点击。 EventSystems用于此目的。例如,请参阅this。
答案 2 :(得分:0)
在我的情况下,这些都不起作用。这是我最终要做的事情:
public RectTransform rectTransform;
...
Vector2 lp;
Vector2 mousePos = Input.mousePosition;
RectTransformUtility.ScreenPointToLocalPointInRectangle(rectTransform, mousePos, Camera.main, out lp);
if (rectTransform.rect.Contains(lp))
..ect