您的位置:首页 > 移动开发 > Unity3D

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

2017-09-11 19:13 489 查看

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

在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 就是自适应矩阵
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: