总览: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。