Unity3D笔记七 GUILayout
一、说到GUILayout就要提到GUI,二者的区别是什么
GUILayout是游戏界面的布局。GUI(界面)和GUILayout(界面布局)功能上面是相似的从命名中就可以看到这两个东西非常相像,但是在使用过程中两者还是存在一定区别的。
1、使用GUI绘制控件的时候,需要设置控件的Rect()方法,这样设置的控件非常不灵活,因为它的坐标以及大小已经固定死了,这时如果控件中的内容长度发生改变,就会直接影响展示效果。如果我们需要制作控件的自适应?怎么办?GUILayout登场见2
2、GUILayout制作界面,可以很方便地为我们解决上述难题。GUILayout可以自适应组件大小和自动计算组件显示区域,无须设定显示区域,系统会自动帮我们计算控件的显示区域,并且保证它们不会重叠。
二、GUILayout常用分类
1、线性布局
1.1水平线性布局:首先需要使用BeginHorizontal()方法,然后将控件添加至线性布局当中,最后使用EndHorizontal()方法来结束当前线性布局
1.2垂直线性布局:首先需要使用BeginVertical()方法与EndVertical()方法。
public Texture2D texture2D; private void OnGUI()
{
//开始水平线性布局
GUILayout.BeginHorizontal();
GUILayout.Box("开始水平布局");
GUILayout.Button("按钮");
GUILayout.Label("文本");
GUILayout.TextField("输入框");
GUILayout.Box(texture2D, GUIStyle.none);
//结束水平线性布局
GUILayout.EndHorizontal(); //开始垂直线性布局
GUILayout.BeginVertical();
GUILayout.Box("开始垂直布局");
GUILayout.Button("按钮");
GUILayout.Label("文本");
GUILayout.TextField("输入框");
GUILayout.Box(texture2D, GUIStyle.none); //objCube.renderer.material.mainTexture=texture2D动态加贴图这么加的
//结束垂直线性布局
GUILayout.EndVertical();
}
2、控件偏移
使用Space()方法可以设置控件之间的偏移量
#region 控件偏移
GUILayout.BeginArea(new Rect(, , , ));//"开始一个显示的区域"
GUILayout.BeginHorizontal("开始最外层横向布局");
GUILayout.BeginVertical("嵌套第一个纵向布局");
GUILayout.Box("Box11");
GUILayout.Space();//两个Box中间偏移10 像素
GUILayout.Box("Box12");
GUILayout.EndVertical();//"结束嵌套的纵向布局"
GUILayout.Space();//两个纵向布局间隔20像素
GUILayout.BeginVertical("嵌套第二个纵向布局");
GUILayout.Box("Box21");
GUILayout.Space();//两个Box中间偏移10 像素
GUILayout.Box("Box22");
GUILayout.EndVertical();//"结束嵌套的纵向布局"
GUILayout.EndHorizontal();//结束最外层横向布局
GUILayout.EndArea();
#endregion
3、对齐方式
一般情况下,游戏窗口都是矩形的,而矩形由4个角组成:左上角、右上角、左下角和右下角。如果要使控件分别对齐在这4个角当中,就需要使用FlexibleSpace()对其做偏移了。FlexibleSpace(){[ˈfleksəbl]adj. 灵活的;易弯曲的;柔韧的;易被说服的}的原理是将两个控件完全左右或上下对齐在显示区域当中。它是一个非常重要的方法,在不同分辨率下可以直接确定偏移的位置,并且不会超出显示范围。
#region 对齐方式
GUILayout.BeginArea(new Rect(,,Screen.width,Screen.height));//开始一个显示区域
GUILayout.BeginHorizontal();//创建一个最外层横向布局
GUILayout.BeginVertical();//开始嵌套一个内层纵向布局
GUILayout.Box("Box1");//两个Box控件上下对齐
GUILayout.FlexibleSpace();
GUILayout.Box("Box2");
GUILayout.EndVertical();//结束内层嵌套的纵向布局
GUILayout.FlexibleSpace();//布局之间左右对齐
GUILayout.BeginVertical();
GUILayout.Box("Box3");
GUILayout.FlexibleSpace();
GUILayout.Box("Box4");
GUILayout.EndVertical();
GUILayout.EndHorizontal();
GUILayout.EndArea();
#endregion

4、添加与关闭窗口
游戏窗口是可以动态添加与关闭
#region 窗口
public ArrayList winList=new ArrayList();
public Texture icon;
#endregion
// Use this for initialization
void Start()
{
winList.Add(new Rect(winList.Count*, , , ));
} private void OnGUI()
{
#region 窗口 int count = winList.Count;
for (int i = ; i < count; i++)
{
winList[i] = GUILayout.Window(i, new Rect(count*, , , ), AddWindow, "窗口ID:" + i);
} #endregion
} private void AddWindow(int id)
{
GUILayout.BeginHorizontal();//开始一个水平布局
GUILayout.Label(icon, GUILayout.Width(), GUILayout.Height());//绘制图标
GUILayout.Label("这是一个全新的窗口");
GUILayout.EndHorizontal(); GUILayout.BeginHorizontal();//开始一个水平布局
if (GUILayout.Button("添加窗口按钮"))
{
winList.Add(new Rect(winList.Count*, , , ));
} if (GUILayout.Button("关闭窗口按钮"))
{
winList.RemoveAt(id);
}
GUILayout.EndHorizontal();//关闭水平布局
GUI.DragWindow(new Rect(,,Screen.width,Screen.height));
}
5、字体
Unity支持所有.ttf的字符集,默认的字体为Arial[ə'rɪəl]角,輻數
打开C:\Windows\Fonts 找到你需要的字体拖动到Unity当前工程资源下即可。
6、中文显示
默认是不支持中文的,可以把编码方式改成UTF-8 如果不行就改成UTf-16
Unity3D笔记七 GUILayout的更多相关文章
- 《MFC游戏开发》笔记七 游戏特效的实现(一):背景滚动
本系列文章由七十一雾央编写,转载请注明出处. http://blog.csdn.net/u011371356/article/details/9344721 作者:七十一雾央 新浪微博:http:// ...
- (转)Qt Model/View 学习笔记 (七)——Delegate类
Qt Model/View 学习笔记 (七) Delegate 类 概念 与MVC模式不同,model/view结构没有用于与用户交互的完全独立的组件.一般来讲, view负责把数据展示 给用户,也 ...
- Learning ROS for Robotics Programming Second Edition学习笔记(七) indigo PCL xtion pro live
中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 Learning ROS forRobotics Pro ...
- Elasticsearch笔记七之setting,mapping,分片查询方式
Elasticsearch笔记七之setting,mapping,分片查询方式 setting 通过setting可以更改es配置可以用来修改副本数和分片数. 1:查看,通过curl或浏览器可以看到副 ...
- Typescript 学习笔记七:泛型
中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...
- python3.4学习笔记(七) 学习网站博客推荐
python3.4学习笔记(七) 学习网站博客推荐 深入 Python 3http://sebug.net/paper/books/dive-into-python3/<深入 Python 3& ...
- Go语言学习笔记七: 函数
Go语言学习笔记七: 函数 Go语言有函数还有方法,神奇不.这有点像python了. 函数定义 func function_name( [parameter list] ) [return_types ...
- iOS 学习笔记七 【博爱手把手教你使用2016年gitHub Mac客户端】
iOS 学习笔记七 [博爱手把手教你使用gitHub客户端] 第一步:首先下载git客户端 链接:https://desktop.github.com 第二步:fork 大神的代码[这里以我的代码为例 ...
- 【opencv学习笔记七】访问图像中的像素与图像亮度对比度调整
今天我们来看一下如何访问图像的像素,以及如何改变图像的亮度与对比度. 在之前我们先来看一下图像矩阵数据的排列方式.我们以一个简单的矩阵来说明: 对单通道图像排列如下: 对于双通道图像排列如下: 那么对 ...
随机推荐
- 第三百零九节,Django框架,models.py模块,数据库操作——F和Q()运算符:|或者、&并且——queryset对象序列化
第三百零九节,Django框架,models.py模块,数据库操作——F()和Q()运算符:|或者.&并且 F()可以将数据库里的数字类型的数据,转换为可以数字类型 首先要导入 from dj ...
- AOP称为面向切面编程,在程序开发中主要用来解决一些系统层面上的问题
AOP称为面向切面编程,在程序开发中主要用来解决一些系统层面上的问题,比如日志,事务,权限等待,Struts2的拦截器设计就是基于AOP的思想,是个比较经典的例子. 一 AOP的基本概念 (1)Asp ...
- e681. 基本的打印程序
Note that (0, 0) of the Graphics object is at the top-left of the actual page, outside the printable ...
- bootstrap -- css -- 图片
图片样式 .img-rounded:添加 border-radius:6px 来获得图片圆角 .img-circle:添加 border-radius:500px 来让整个图片变成圆形. img-ci ...
- php date strtotime的用法
1.上个月第一天及最后一天. echo date('Y-m-01', strtotime('-1 month')); echo strtotime(date('Y-m-01 0:00:00', str ...
- CPU性能判断指标---上下文切换,运行队列和使用率
http://blog.chinaunix.net/uid-15007890-id-3064254.html uptime11:35:08 up 21:57, 6 users, load aver ...
- 视觉SLAM之词袋(bag of words) 模型与K-means聚类算法浅析(1)
在目前实际的视觉SLAM中,闭环检测多采用DBOW2模型https://github.com/dorian3d/DBoW2,而bag of words 又运用了数据挖掘的K-means聚类算法,笔者只 ...
- 使用mysqldump工具对数据库进行全备份
需求描述: 通过mysqldump工具的--all-databases选项对所有数据库进行备份. 操作过程: 1.通过--all-databases选项对所有的数据库进行备份 [mysql@redha ...
- [java ] java.util.zip.ZipException: error in opening zip file
严重: Failed to processes JAR found at URL [jar:file:/D:/tools/apache-tomcat-7.0.64_2/webapps/bbs/WEB- ...
- Java精选笔记_集合【List(列表)接口】
List(列表)接口 简介 List接口继承自Collection接口,是单列集合的一个重要分支,习惯性地会将实现了List接口的对象称为List集合. 元素是有序的,即元素的存入顺序和取出顺序一致, ...