[英]Unity - Check if mouse click was inside of a rect transform
我試圖找出鼠標單擊是否在rect轉換內。
每次用戶單擊屏幕時,都會拋出一個球。 但是,如果用戶單擊暫停按鈕,則不應擲球。
我試圖用這段代碼來解決,但似乎只能識別rect變換的右上四分之一。 這是顯示實際問題的簡短視頻: https : //youtu.be/gdyDBK6ubgo
這是代碼片段:
void Update() {
//Check if user touch on display / click mouse button
Vector2 mousePos = new Vector3(Screen.width - Input.mousePosition.x,Screen.height - Input.mousePosition.y, 0);
if (Input.GetMouseButtonDown(0) && props.throwable && !checkCollisionWithPauseButton(mousePos) && props.remainingBalls > 0)
{
fireBall(Input.mousePosition);
}
}
bool checkCollisionWithPauseButton(Vector3 mousePos){
//TODO: This does not work very well
return pauseButton.GetComponent<RectTransform>().rect.Contains (mousePos);
}
這是顯示rect變換的屏幕截圖 。
使用RectTransformUtility.RectangleContainsScreenPoint檢查鼠標指針是否在Rect Transform中。 無論rectTransform在本地位於何處,它都將起作用。
public RectTransform rectTransform;
...
Vector2 mousePos = Input.mousePosition;
RectTransformUtility.RectangleContainsScreenPoint(rectTransform, mousePos);
在我看來,這些都不起作用。 這是我最終要做的事情:
public RectTransform rectTransform;
...
Vector2 lp;
Vector2 mousePos = Input.mousePosition;
RectTransformUtility.ScreenPointToLocalPointInRectangle(rectTransform, mousePos, Camera.main, out lp);
if (rectTransform.rect.Contains(lp))
..ect
它不起作用,因為您正在執行一些不必要的工作。 您不需要此行:
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。 參見此示例。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.