San*_*waj 18 unity-game-engine unity3d-gui
我有一个带有渲染模式世界空间集的UI画布.对于属于此画布的所有UI元素,我在编辑器的RectTransform组件中看到"left","right","top"和"bottom"变量.有没有办法通过代码访问这些变量?
mak*_*iuk 33
那些会是
RectTransform rectTransform;
/*Left*/ rectTransform.offsetMin.x;
/*Right*/ rectTransform.offsetMax.x;
/*Top*/ rectTransform.offsetMax.y;
/*Bottom*/ rectTransform.offsetMin.y;
Run Code Online (Sandbox Code Playgroud)
RectTransform rt = GetComponent<RectTransform>();
float left = rt.offsetMin.x;
float right = -rt.offsetMax.x;
float top = -rt.offsetMax.y;
float bottom = rt.offsetMin.y;
Run Code Online (Sandbox Code Playgroud)
TL; 博士
从这些值显示在检查器,我的分析是Left
,Right
,Top
和Bottom
为正,如果相应的边界是在通过的锚形矩形RectTransform
。
offsetMin.x
作为Left
和offsetMin.y
作为Bottom
始终但是实现这一评估offsetMax.x
作为Right
和offsetMax.y
作为Top
不。
我只是取了相反的值offsetMax
以使其兼容(基本空间修改)。
小智 5
上面两个答案有点正确,我因此一直拖延我的项目,但在床上编程时发现的。offsetMin 和 offsetMax 是您所需要的,但它们并不是全部,您需要包含来自矩形变换的锚点:
public RectTransform recTrans;
// Use this for initialization
void Start () {
Vector2 min = recTrans.anchorMin;
min.x *= Screen.width;
min.y *= Screen.height;
min += recTrans.offsetMin;
Vector2 max = recTrans.anchorMax;
max.x *= Screen.width;
max.y *= Screen.height;
max += recTrans.offsetMax;
Debug.Log(min + " " + max);
}
Run Code Online (Sandbox Code Playgroud)
如果您将其插入虚拟类,无论您使用什么锚点,它都应该为您提供正确的读数。
它的工作方式应该是显而易见的,但简单的解释也不会有什么坏处。
偏移量指的是最小值和最大值距矩形变换中心点的位置差异,将它们添加到锚点边界给出正确的矩形变换的最小值和最大值。尽管锚点的最小值和最大值已标准化,因此您需要通过乘以屏幕尺寸来缩小它们。
归档时间: |
|
查看次数: |
24160 次 |
最近记录: |