Hi,
Short description
My image doesn’t go where I click. Here’s a video: https://youtu.be/u-xWNVt2LJM
Detailed description
I am trying to put a small white image in the position the mouse clicks. In the following setup:
Setup
Canvas - Render Mode: ScreenSpace - Overlay
Pixel perfect ticked
Canvas Scaler - UI Scale Mode: Scale Width or Height
Reference resolution: 1920x1080
Screen Match Mode: Match Width Or Height
Match: 0.5
Reference Pixels Per Unit: 100
I have an image attached to the canvas as child, anchored to the bottom left.
I have the following method I use to change Input.mousePosition to canvas space position that I apply to my image.
Vector2 UnscalePosition(Vector2 vec)
{
Vector2 referenceResolution = canvasScaler.referenceResolution;
Vector2 currentResolution = new Vector2(Screen.width, Screen.height);
float widthRatio = currentResolution.x / referenceResolution.x;
float heightRatio = currentResolution.y / referenceResolution.y;
float ratio = Mathf.Lerp(heightRatio, widthRatio, canvasScaler.matchWidthOrHeight);
return vec / ratio;
}
…
Vector2 startPos = UnscalePosition(Input.mousePosition);
mousePosImg.anchoredPosition = startPos;
It places the image correctly where I click when the aspect ratio is 16:10 or 16:9 (very close to the reference resolution), but it doesn’t when the height is very large and the width is very small (i.e. 300x900).
Unity has a strange explanation to what happens when matchWidthOrHeight is 0.5: Unity - Scripting API: UI.CanvasScaler.matchWidthOrHeight
How do you correctly bring Input.mousePosition in canvas space in this context?