public void updateRect(bool force = false) { // 是否为编辑器手动预览操作,手动预览不需要启动游戏 #if UNITY_EDITOR bool preview = !EditorApplication.isPlaying; #else bool preview = false; #endif // 如果是第一次更新,则需要获取原始属性 if (mFirstUpdate || preview) { mScreenScale = UnityUtility.getScreenScale(UnityUtility.getRootSize(preview)); mOriginSize = WidgetUtility.getRectSize(GetComponent <RectTransform>()); mOriginPos = transform.localPosition; mFirstUpdate = false; } if (!preview && !force && !mDirty) { return; } mDirty = false; Vector3 realScale = UnityUtility.adjustScreenScale(mScreenScale, mKeepAspect ? mAspectBase : ASPECT_BASE.NONE); float thisWidth = mOriginSize.x * realScale.x; float thisHeight = mOriginSize.y * realScale.y; MathUtility.checkInt(ref thisWidth, 0.001f); MathUtility.checkInt(ref thisHeight, 0.001f); Vector2 newSize = new Vector2(thisWidth, thisHeight); // 只有在刷新时才能确定父节点,所以父节点需要实时获取 WidgetUtility.setRectSize(GetComponent <RectTransform>(), newSize, mAdjustFont); transform.localPosition = MathUtility.round(MathUtility.multiVector3(mOriginPos, realScale)); }
public static Vector2 getScreenScale(Vector2 rootSize) { #if MAKE_CS_DLL return((Vector2)callStatic(UTILITY_UNITY, "getScreenScale", new object[] { rootSize })); #else return(UnityUtility.getScreenScale(rootSize)); #endif }