总览:NGUI深入理解
UIRoot,顾名思义,它是UI的根,非常重要。它保证gameobject的localScale保持在2/height。
使用UIRoot时要注意,他不能与UIOrthoCamera一起使用。
UIRoot中最重要的是activeHeight属性。
public int activeHeight
{
get
{
int height = Mathf.Max(2, Screen.height);
if (scalingStyle == Scaling.FixedSize) return manualHeight;
#if UNITY_IPHONE || UNITY_ANDROID
if (scalingStyle == Scaling.FixedSizeOnMobiles)
return manualHeight;
#endif
if (height < minimumHeight) return minimumHeight;
if (height > maximumHeight) return maximumHeight;
return height;
}
}
以为这个属性决定了localScale,决定了pixelSizeAdjustment
void Update ()
{
if (mTrans != null)
{
float calcActiveHeight = activeHeight;
if (calcActiveHeight > 0f )
{
float size = 2f / calcActiveHeight;
Vector3 ls = mTrans.localScale;
if (!(Mathf.Abs(ls.x - size) <= float.Epsilon) ||
!(Mathf.Abs(ls.y - size) <= float.Epsilon) ||
!(Mathf.Abs(ls.z - size) <= float.Epsilon))
{
mTrans.localScale = new Vector3(size, size, size);
}
}
}
}
UIRoot脚本很简单,核心Update就实现了一个功能,根据activeHeight来实时更新localScale。