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 就是自适应矩阵
相关文章推荐
- Unity3d gui自适应屏幕
- unity3d Matrix4x4列为主序
- Unity3d gui自适应屏幕
- 通过投影矩阵反求视域锥 get frustum via projection matrix
- Unity3d gui自适应屏幕
- GUI自适应矩阵
- Unity3d EZGUI 多语言自适应前期设计准则
- Unity3d 通过代码手动创建button(不用GUI自带的button以及其他插件)
- Android通过颜色矩阵(ColorMatrix)和坐标变换矩阵(Matrix)处理图片
- 绘图(五,Android图像变换基础知识矩阵Matrix)
- 程序员能力矩阵 Programmer Competency Matrix(转)
- poj 3233 Matrix Power Series 矩阵快速幂
- Numpy中矩阵matrix读取一列的方法及数组和矩阵的相互转换
- POJ3233 Matrix Power Series(矩阵)
- 通过基础矩阵和本质矩阵恢复摄像机矩阵
- 散布矩阵(Scatter Matrix)(一)
- POJ 3233 Matrix Power Series 二分+矩阵乘法
- [Unity3D]EZGUI 操作简单介绍
- Numpy中矩阵对象(matrix)
- 通过iframe 嵌套页面的宽高自适应问题