二、坐标:2、本地坐标和世界坐标

1、从自身坐标到世界坐标

transform.TransformPoint()
这个方法的返回值就是Vector3类型的世界坐标,transform就是相对的物体,括号里的就是相对这个transform的本地坐标。

2、Unity 不同父物体的UI坐标转换

场景中A的父物体和B的父物体并不是同一个物体,但是他们有可能需要进行坐标上的交互,那么此时需要用到
RectTransformUtility.ScreenPointToLocalPointInRectangle() 这个方法。
用法:
Vector2 ui2ScreenPos = Camera.main.WorldToScreenPoint(ui2.position);
Vector2 localPos;
bool isSucess = RectTransformUtility.ScreenPointToLocalPointInRectangle(uiParent1, ui2ScreenPos, Camera.main, out localPos);
得到的localPos就是ui2.position相对于uiParent1的屏幕坐标,这样uiParent下的物体就可以用这个坐标进行交互。
这个方法体一共有四个参数,下面分别讲一下:
参数一:需要进行位置改变的ui物体的父物体的RectTransform组件
参数二:参照物体的屏幕坐标
参数三:相机,一般为主相机,或者特殊需求换相机也可
参数四:接收返回值得Vector2类型,这个值就是需要进行位置改变的ui物体的相对坐标
返回值:bool类型,为true时证明转换成功
需要注意的是:这个相机只是针对worldspace和camera模式,如果用的是overlay模式,第三个参数直接给null即可。
这个方法典型应用,是用在摇杆制作上。但是这里需要注意到的是,这里得到的是UI体系的坐标,也就是屏幕坐标。屏幕坐标以像素来定义的,屏幕的左下角为(0,0),右    上角为(Screen.width, Screen.height),z轴的坐标是相机的世界坐标中z轴坐标的负值。相机如果没给对,则有可能达不到预期的效果。

你可能感兴趣的:(二、坐标:2、本地坐标和世界坐标)