最近项目有需求要在游戏里面弄出取色版 然后参考了某位大神的博客直接导入插件
https://blog.csdn.net/qq_29579137/article/details/72834457 然后在UGUI下面发现取色位置和鼠标位置不太对
private Vector3 mousPosition( )
{
return (Input.mousePosition - m_transform.position) / Root.rootScaleX ;
}
最后在更改取色点位置的代码上面更改了一下,如上所示 这里要注意Root.rootScaleX 是UI根节点的recttransform的尺寸 rootScaleX要在start的时候获取,在Awake获取的时候还是1,这个scale是根据根节点的Canvas Scaler的不同配置来调节的,可以自己调试下看看
rootScaleX = GetComponent().localScale.x;
最后再解释下Input.mousePosition - m_transform.position这句的含义 如果基础不是很好的同学可能不是很清楚 这句是因为坐标系不同导致的,看下图
private Vector3 mousPosition( )
{
return (Input.mousePosition - m_transform.position) / Root.rootScaleX ;
}
Input.mousePosition是根据图中黄色箭头所指的地方作为原点的 蓝色的是坐标是上面函数的返回。 m_transform.position表示下图中的这段距离 这样减去的原因是 假如我鼠标刚好点击到上图坐标系的原点 那么此时减去之后的值是Vector3.zero了 这样就是将坐标系从屏幕左下角变成上图的坐标系了 最后除以Root.rootScaleX 的原因是 原来的减法是基于UI整体尺寸为1的时候 如果这个插件导进来创建了调色板的时候 你的UIRoot的尺寸和插件场景里的不同 就需要考虑一下这个因素了 这个尺寸会调节UIRoot下面的所以图片的缩放,如下图所示