Unity3d--GUI自适应矩阵(通过Matrix4x4.SetTRS)

来源:互联网 发布:youtube显示无网络连接 编辑:程序博客网 时间:2024/06/05 06:11

一、为什么要用自适应矩阵

在UI界面设计过程中,由于每个玩家的屏幕尺寸不相同,为了使游戏界面在任何设备都能达到统一的布局,引入了通过屏幕信息计算出的自适应矩阵

二、原理讲解

比如我们游戏中先设定标准屏的高度和宽度:

public static float desiginWidth = 800.0f;  //标准宽度public static float desiginHeight = 480.0f; //标准高度

1、计算偏移量
计算lux位移距离

float lux = (Screen.width - ConstOfMenu.desiginWidth * Screen.height / ConstOfMenu.desiginHeight) / 2.0f;

对其的理解可以看下面的简图:

2、设置GUI矩阵

Matrix4x4 guiMatrix = Matrix4x4.identity;  //此时guiMatrix为单位矩阵guiMatrix.SetTRS(new Vector3(lux,0,0), Quaternion.identity, new Vector3(Screen.height / ConstOfMenu.desiginHeight, Screen.height / ConstOfMenu.desiginHeight, 1));  //The current matrix is modified so that places things at position pos, oriented in rotation q and scaled by s.

我们来看看SetTRS方法:Matrix4x4.SetTRS
其在手册上的定义为:

public void SetTRS(Vector3 pos, Quaternion q, Vector3 s);

它的作用为: 将 四元数 转化成 旋转矩阵
pos为一个三元坐标,表示place things at 即将物体设置在哪里的起始偏移坐标。
q 为定向旋转(一个四元数)
s为缩放倍数,默认(1,1,1);

以上述代码的调用为例:
pos 为 vector(lux,0,0) 理解为把画面设置向右平移到屏幕中间,结合简图
q为Quaternion.identity,这个四元数对应于“不旋转”(对象与世界或父轴完全对齐。)
最后缩放倍数为屏幕的长度参数与标准屏的比值

最后的guiMatrix 就是自适应矩阵

原创粉丝点击