InverseTransformPoint
Transform.InverseTransformPoint :相对于谁的坐标。如果是相对2D UI,请使用localposition,如果是3D场景,请使用position
文档
http://www.ceeger.com/Script/Transform/Transform.InverseTransformPoint.html
UI结构
UIRoot/PanelRoot/Center/Battle/BuffsOnHero/BuffIconTemplate (这是buff图标)
UIRoot/PanelRoot/Center/Battle/BuffDetail (这是buff详细信息窗口)
UI坐标变换需求
BuffDetail的坐标和BuffIconTemplate顶对齐,就是按住不同的图标,弹出窗口的Y和图标的Y相同。
思路分析
BuffDetail 和BuffIconTemplate 的父节点,同级(这一点很重要)
1、获得BuffIconTemplate的UI坐标的Y设置成BuffDetail的Y
涉及到UI坐标的转换。
实现方法
//获取图标相对于父节点的UI坐标
var localPos = transform.InverseTransformPoint(BuffIconTemplate.transform.position);
//窗体和Buff图标的坐标顶对齐,和buffTable的右侧有一个offset
var offX = localPos.x - BuffWinBg.width * 0.5f - ;
BuffDetailWindow.localPosition = new Vector3(offX, localPos.y, localPos.z);
解释:Transform.InverseTransformPoint 相当于把buffIconTemplate从父节点拉出来,获取它在UI上的localposition,如下图所示
附加资料
UICamera下的gameobject 使用localpostion
SceneCamera下的gameobject 使用wordpostion