Is it possible to get the screen rect for a button regardless of its parent?
I am searching for a way to get the screen rect of a button regardless of it's parent.
Explanation : In my game, I have a GUI with a pause button Depending on the configuration, the button can be at different places in the UI.
To control the game I wrote an input manager that use the Input.mousePosition propertie.
When I detect a press, I would like to determine if the pointer is in the rectangle of the pause button to avoid missintepreting an input.
however when I look at the rectransform of the pause button I get a rect with those values : (x:-100.00, y:-100.00, width:100.00, height:100.00)
It seems to me that all the info I can get from the rectTransform are relatives to its parent.
I can't find a simple way to get the rect such as
pauseButtonRect.Contains(MousePosition)
returns true when the mouse is in the button.
It feels like I've been searching too far and there might be a super simple answer but I didn't find any on the web.
Thanks for your time.
Answer by Redoxee · Dec 18, 2016 at 07:26 PM
Of course after searching for a long time and trying to ask my question as clearly as possible, I immediately found a solution to my problem :s
I'll post it here if someone has the same problem as me
here is the code that seems to do the trick for me
Vector2 ScreenSize = new Vector2(Screen.width, Screen.height);
RectTransform pTransform = (m_pauseButton.transform as RectTransform);
Rect buttonRect = pTransform.rect;
float originx = ScreenSize.x * pTransform.anchorMax.x - pTransform.pivot.x * buttonRect.width + pTransform.anchoredPosition.x;
float originy = ScreenSize.y * pTransform.anchorMax.y - pTransform.pivot.y * buttonRect.height + pTransform.anchoredPosition.y;
m_pauseRect = new Rect(originx,originy,buttonRect.width,buttonRect.height);
The resulting rect seems to fit my requierment : being in the same coordinate space as Input.MousePosition.
I need to put some warnings though:
this solution work if the parent of the button take the whole screen (surely there is a way to make it fully generic).
Also it assume the button doesn't scale with the screen ratio (ie : pTransform.anchorMax == pTransform.anchorMin)
I found this by trial and error and haven't done extensive testing yet. I fear it might break on devices with different dpi or devices with different ratio / resolution.
Your answer
Follow this Question
Related Questions
using a button witout pressing it ? 1 Answer
UI GameObject (Button prefab) randomly changing Z axis RectTransform when instantiated 1 Answer
CrossPlatformInput Detect Multiple Input Headache 1 Answer
Porting to mobile how to assign input manager axes to GUIButtons. 0 Answers
Have a UI Button do what my Input.GetButtonDown("Use") does? 0 Answers