RectTransform 的 scale对计算鼠标的影响

RectTransform 的 scale对计算鼠标的影响
最近项目有需求要在游戏里面弄出取色版 然后参考了某位大神的博客直接导入插件

https://blog.****.net/qq_29579137/article/details/72834457
然后在UGUI下面发现取色位置和鼠标位置不太对

private Vector3 mousPosition( )
        {
			return (Input.mousePosition - m_transform.position) / Root.rootScaleX ;
		}

最后在更改取色点位置的代码上面更改了一下,如上所示
这里要注意Root.rootScaleX 是UI根节点的recttransform的尺寸
RectTransform 的 scale对计算鼠标的影响
rootScaleX要在start的时候获取,在Awake获取的时候还是1,这个scale是根据根节点的Canvas Scaler的不同配置来调节的,可以自己调试下看看

rootScaleX = GetComponent<RectTransform>().localScale.x;

最后再解释下Input.mousePosition - m_transform.position这句的含义
如果基础不是很好的同学可能不是很清楚
这句是因为坐标系不同导致的,看下图
RectTransform 的 scale对计算鼠标的影响

private Vector3 mousPosition( )
        {
			return (Input.mousePosition - m_transform.position) / Root.rootScaleX ;
		}

Input.mousePosition是根据图中黄色箭头所指的地方作为原点的
蓝色的是坐标是上面函数的返回。
m_transform.position表示下图中的这段距离
RectTransform 的 scale对计算鼠标的影响
这样减去的原因是
假如我鼠标刚好点击到上图坐标系的原点
那么此时减去之后的值是Vector3.zero了
这样就是将坐标系从屏幕左下角变成上图的坐标系了
最后除以Root.rootScaleX 的原因是
原来的减法是基于UI整体尺寸为1的时候
如果这个插件导进来创建了调色板的时候 你的UIRoot的尺寸和插件场景里的不同 就需要考虑一下这个因素了
这个尺寸会调节UIRoot下面的所以图片的缩放,如下图所示
RectTransform 的 scale对计算鼠标的影响