簡體   English   中英

Unity-檢查鼠標單擊是否在rect轉換內

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM