- Home /
Snap UI Text inside canvas
Occasionally, when the user touches the screen, I want to show a message just above the point they touch (so that it's not hidden by their finger). I can get the position on screen easily enough, and it's straightforward to just call text.rectTransform.position = position
where text
is a UnityEngine.UI.Text
object and position
is the position they touched (plus some value), and this work fine. However when the position is close to the edges of the screen, part of the Text
is outside the canvas.
I'd like to somehow snap the Text to a position so that it will always be fully visible. I've tried testing the width of the Text
element with the position and the screen width, but it seems that when the screen size changes, the width of the Text
is always given in "reference pixels", while the width of the screen scales. This would make that calculation very complicated.
Does anyone know if there's a better way to make the check and adjustment, to ensure that the text is always fully visible?
Answer by Maurice_B · Jun 06, 2016 at 08:48 AM
If you can work out the size of the text you can do : here we have called them textwidth and textheight
int x = Mathf.Clamp(Text.rectTransform.position.x,-screen.width/2 + textwidth/2,screen.width/2 -textwidth/2))
int y = Mathf.Clamp(Text.rectTransform.position.y,-screen.height/2 + textheight/2,screen.height/2 -textheight/2))
Text.rectTransform.position = new Vector2(x,y)
hope that gives you an idea.
I've tried something very similar to that, but the problem is that Screen.width
changes to the actual pixels of the screen (matching the actual screen resolution), where as the text heights (`text.rectTransform.sizeDelta.x/y`). Of course if I could find the text width and height in actual pixels, this would work :)