Unity - 检查鼠标单击是否在rect变换内

时间:2018-01-28 21:09:45

标签: c# user-interface unity3d

我试着弄清楚鼠标是否在矩形变换内部。

每次用户点击屏幕时,都会抛出一个球。但是如果用户点击暂停按钮,则不应该抛出任何球。

我尝试用这段代码解决,但似乎只识别了rect变换的右上角四分之一。这是一个显示实际问题的简短视频:https://youtu.be/gdyDBK6ubgo

以下是代码段:

nil | string

这里是screenshot,显示了矩形变换。

3 个答案:

答案 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