- Home /
Rect to RectTransform on overlay Canvas?
I spent an entire work day and a half trying to do what sounds like a very simple task. Trying everything I could find in Unity Answers and have not been able to do one very simple thing:
I have a canvas space set up as Screen Space - Overlay, and I have a menu script that uses GUI elements. I literally just want to be able to make blank canvas buttons over the GUI.Buttons in my script so I can have mouseover effects.
My GUI uses a scaling matrix, and no matter what I try, the RectTransform buttons always seem to be off from the GUI.Button(Rect).
If there's anyone out there who knows how to convert a screen Rect to a RectTransform I would be eternally grateful
Answer by Glurth · Jun 07, 2017 at 06:03 PM
Given a Rect
called screenRect
. This code should allow you to assign the control (`UIbutton` in the example- the child of a screen-space-overlay canvas), to the screen space RECT provided (`Rect screenRect`). The critical part is setting the anchors and pivot properly, after that it's an (almost) straight conversion.
RectTransform rt = (RectTransform)UIbutton.transform;
rt.anchorMin = new Vector2(0, 1);
rt.anchorMax = new Vector2(0, 1);
rt.pivot = new Vector2(0, 1);
rt.position = new Vector3( ( screenRect.x), (Screen.height- screenRect.y), rt.position.z);
rt.sizeDelta = new Vector2(screenRect.width, screenRect.height);
Edit: "My GUI uses a scaling matrix" I'm not quite sure what you mean by this, I didn't take it into account above. (which gui? the one that uses the screen space rect? when is it applied? )
Holy canoli in a guacomole stromboli, preli$$anonymous$$ary tests lead me to believe this worked. thanks so much!
Your answer
Follow this Question
Related Questions
UI rect touch is not working? 1 Answer
Force Unity UI element to refresh/update? 4 Answers
On Click paramaters disappear from button prefab? 5 Answers
How to instantiate a prefab between Canvas and a Button? 0 Answers
If button highlighted 2 Answers