本文主要是介绍unity3d ugui中如何获取ui控件位置?或者说如何将ugui中ui控件(组件)的坐标转化为屏幕坐标或canvas坐标(大坑)?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
unity3d ugui中如何获取ui控件位置?或者说如何将ugui中ui控件(组件)的坐标转化为屏幕坐标或canvas坐标(大坑)?
网上有一些转化坐标的方法,但我试了后发现都有问题,有一些方法和锚点的位置是有关的,比如锚点必须左下角,而且用他们的方法转化后还有比例问题,导致判断不准确。
他们是这么做的:设kongjian是我们要获取坐标的控件,那么
kongjian.GetComponent<RectTransform>().anchoredPosition.x 是x轴坐标
kongjian.GetComponent<RectTransform>().anchoredPosition.y是y轴坐标
这是个大坑,他是根据四个锚点的中心位置来计算的,你锚点位置设置不同,计算结果也不同。
还有人是这么算的:
他们使用RectTransformUtility.ScreenPointToLocalPointInRectangle方法获取坐标
见http://www.xuanyusong.com/archives/3476
太麻烦了,而且我试过也好像不对。
那么到底怎样获取ui控件在屏幕的准确坐标呢?
答案是:直接用WorldToScreenPoint方法
public Camera mycamera;//要转化到的目的摄像机,通常canvas在这个摄像机下(即canvas的render mode设置为这个摄像机)
Image kongjian;//自己要获取屏幕坐标的控件,可以是image,也可以是button等等float x=mycamera.WorldToScreenPoint(kongjian.transform.position).x;
float y=mycamera.WorldToScreenPoint(kongjian.transform.position).y;
//x,y即为控件在屏幕的坐标camera.WorldToScreenPoint()方法返回的是一个position类型 是vector3类型,camera为要转化到的目标摄像机,传入的参数为控件的世界坐标
我们点击箭头所指的中间位置,代码debug输出鼠标点击坐标,同时输出圆形操纵杆按钮的坐标(这里默认为图片中心坐标)
可以看到:
我们使用的方法正确,获得了正确坐标。
这篇关于unity3d ugui中如何获取ui控件位置?或者说如何将ugui中ui控件(组件)的坐标转化为屏幕坐标或canvas坐标(大坑)?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!