IMGUI的自适应缩放
最近有个很怪的需求 要对GUI写的debug窗口做4K分辨率的适配
我虽然很想吐槽 明明是个发布后不会实际用到的东西
为啥还要特意做适配呢
但是没办法 就开搞吧
我一开始并不知道能够做等比例缩放
所以我用的方法是做新的GUI style
里面赋值的数据乘上算好的缩放系数
但是这样bug很多
特别是对于索引式的按钮列表
传进去一个string数组和每行显示的个数
就会自动生成一排能返回索引的按钮列表
通过这个再和委托什么的关联就可以实现按钮点击事件了
这样单纯替换GUI style你还得手写一个功能实现
总之这么搞很不划算 昨天一提主干马上就炸了 很难受
今天上午回来整了整 终于搞清楚了矩阵缩放要怎么搞
首先我们先明确一下需求
因为Unity的Game窗口是有很多种分辨率的
平时策划用习惯的都是在Free Aspect下的窗口
也就是一般小于标准1920*1080的大小
所以我打算不对小于标准的做缩放 这样策划那看到的还是原来的大小
然后以1920*1080也就是2k为基准
GUISkin cachedGuiSkin = GUI.skin; Matrix4x4 cachedMatrix = GUI.matrix; //在大于1920 1080的情况下再进行矩阵缩放 if (Screen.width >= 1920 && Screen.height >= 1080) { Vector3 vector1 = Vector3.zero; Quaternion vector2 = Quaternion.identity; //按照当前屏幕的比例进行缩放 Vector3 vector3 = Vector3.zero; vector3.x = Screen.width / 1920f; vector3.y = Screen.height / 1080f; vector3.z = 1; Matrix4x4 temp = Matrix4x4.identity; //设置矩阵缩放 temp.SetTRS(vector1, vector2, vector3); GUI.matrix = temp; } //width和height 画布的大小要写死 //如果前面没有写死这边也要写死 m_WindowRect.width = 1072; m_WindowRect.height = 480; GUI.skin = m_Skin; //绘制画布 m_WindowRect = GUILayout.Window(0, m_WindowRect, DrawWindow, "<b>GAME FRAMEWORK DEBUGGER</b>"); //还原缩放 GUI.matrix = cachedMatrix; GUI.skin = cachedGuiSkin;
位置默认是左上角 所以我没有修改 如果需要可以改Vector1的值
然后要注意的是 画布一定是写死宽高的 否则缩放就要变形了
然后绘制画布看看效果 4k下和2k下的大小是一样的 总算搞定了