转自:http://blog.csdn.net/kuloveyouwei/article/details/23598171

  GUI在游戏的开发中占有重要的地位,游戏的GUI是否友好,使用是否方便,很大程度上决定了玩家的游戏体验。Unity内置了一套完整地GUI系 统,提供了从布局、控件到皮肤的一整套GUI解决方案,可以做出各种风格和样式的GUI界面。在Unity中使用GUI来完成GUI的绘制工作,目前 Unity没有提供内置的GUI可视化编辑器,因此GUI界面的制作需要全部通过编写脚本代码来实现,如果游戏有比较多的界面制作需求,可以通过编写编辑 器脚本来制作适合自身需求的GUI编辑器,或者借助第三方的GUI插件,如NGUI。

Unity的GUI类提供了丰富的界面控件,可以将这些控件配合使用,GUI控件,如下图:

GUI代码需要在OnGUI函数中调用才能绘制,GUI的控件一般都需要传人Rect参数来指定屏幕绘制区域,例如 Rect(0,10,200,300),对应的屏幕矩形区域左上角的坐标为(0,10),宽度为200,高度为300,在Unity GUI中,屏幕坐标系以左上角为原点

接下来我们看Label控件,Label控件适合用来显示文本信息或者图片,我们新建一个c#脚本,叫做TestGUI.cs,然后绑定到我们的Main Camera对象上,Label初始化代码如下:

void OnGUI()
{//GUI.color = Color.red;GUI.Label(new Rect (10, 10, 100, 200), "Hello World!");GUI.Label (new Rect (100, 100, texture.width/4, texture.height/4), texture);
}

我们定于了两个label,一个显示文字,另一个显示了一张图片,如下图:

Box控件,Box控件用来绘制带有边框背景的文字或图片,代码如下:

        void OnGUI(){//GUI.color = Color.red;//GUI.Label(new Rect (10, 10, 100, 200), "Hello World!");//GUI.Label (new Rect (100, 100, texture.width/4, texture.height/4), texture);GUI.Box (new Rect (10, 10, Screen.width * 0.5f, Screen.height * 0.5f), "This is a title");GUI.Box (new Rect (150, 170, texture.width/4, texture.height/4), texture);}

效果如下:

Button控件,Button控件用来绘制响应单击事件的按钮,代码如下:

     GUI.Button (new Rect (10, 10, 150, 50), "这是一个文字按钮");//图片按钮GUI.Button (new Rect (150, 100, texture.width/4, texture.height/4), texture);

效果如下图:

绘制一个文字图片的按钮,代码如下:

            //绘制一个带图片和文字按钮GUIContent guic = new GUIContent("按钮", texture);GUI.Button(new Rect(10, 70, 150, 30), guic);

我们可以设置按钮的点击事件,代码如下:

GUI.Button (new Rect (10, 10, 150, 50), "这是一个文字按钮");
//图片按钮
if(GUI.Button (new Rect (150, 100, texture.width/4, texture.height/4), texture))
{Debug.Log("--------aaa");
}
//绘制一个带图片和文字按钮
GUIContent guic = new GUIContent("按钮", texture);
GUI.Button(new Rect(10, 70, 150, 30), guic);

当我们点击了按钮,就会在控制台输出打印的内容,

TextField控件,在游戏中,经常需要用到信息输入的窗口,比如聊天窗、用户信息的输入等;PasswordField控件用于绘制密码输入 框,经常用于用户登录界面中;TextArea控件与TextField的用法类似,区别就是TextField是单行的,TextArea可以编辑多行 的文字,创建的代码如下:

using UnityEngine;
using System.Collections;public class TestGUI : MonoBehaviour {public Texture2D texture;public string userName;public string password;public bool isSuccess;// Use this for initializationvoid Start () {userName = "admin";password="123";}// Update is called once per framevoid Update () {}void OnGUI(){//GUI.color = Color.red;//GUI.Label(new Rect (10, 10, 100, 200), "Hello World!");//GUI.Label (new Rect (100, 100, texture.width/4, texture.height/4), texture);//GUI.Box (new Rect (10, 10, Screen.width * 0.5f, Screen.height * 0.5f), "This is a title");//GUI.Box (new Rect (150, 170, texture.width/4, texture.height/4), texture);//        GUI.Button (new Rect (10, 10, 150, 50), "这是一个文字按钮");
//        //图片按钮
//        if(GUI.Button (new Rect (150, 100, texture.width/4, texture.height/4), texture))
//        {
//            Debug.Log("--------aaa");
//
//
//        }
//
//        //绘制一个带图片和文字按钮
//        GUIContent guic = new GUIContent("按钮", texture);
//        GUI.Button(new Rect(10, 70, 150, 30), guic);
userName=GUI.TextField (new Rect (10, 10, 150, 30), userName);//'*'密码字符串的掩码字符password=GUI.PasswordField (new Rect (10, 50, 150, 30), password, '*', 25);GUI.TextArea(new Rect(10, 100, 150, 50),"abcderfasdasdasdasfasdaasdfdfsfsd");if (GUI.Button (new Rect (Screen.width / 2 - 50, Screen.height / 2 - 50, 100, 100), "登录")){//判断登录if (userName.Equals("admin") && password.Equals("123")){isSuccess=true;}else{isSuccess=false;}}if (isSuccess){GUI.Label(new Rect(10, 200, 100, 30), "登录成功!");} else {  GUI.Label(new Rect(10, 200, 100, 30), "登录失败!");}}
}

效果如下:

Toggle控件可以用于制作开关按钮,每次单击,它都会在开和关的状态之间切换,创建代码如下:

      //文字toggleTxt = GUI.Toggle (new Rect (10, 10, 100, 30), toggleTxt, "A Toggle text");//图片toggleImg = GUI.Toggle (new Rect (10, 50, 50, 50), toggleImg, texture);

效果如下图:

ToolBar控件适用于绘制一组按钮,在这些按钮中同时只激活一个,可以用来制作工具栏,创建代码如下:

    public int toolbarInt;toolbarInt=GUI.Toolbar(new Rect(10,10,250,30),toolbarInt,new string[]{"功能一","功能二","功能三"});

效果如下图:

Silder滑动条是一种很常用的界面元素,可用在音量调整、进度显示、数值调整的GUI界面中,在Unity中Slider控件分为水平和垂直2种,对应的GUI函数为HorizontalSlider和VerticalSlider,创建代码如下:

hSliderValue = GUI.HorizontalSlider (new Rect (50, 25, 100, 30), hSliderValue, 0.0f, 10.0f);
//显示水平滑动条数值
GUI.Label(new Rect(25,22,100,30),hSliderValue.ToString("0.00"));vSliderVaule = GUI.VerticalSlider (new Rect (25, 70, 30, 100), vSliderVaule, 0.0f, 10.0f);//显示垂直滑动条数值
GUI.Label(new Rect(22,170,100,30),vSliderVaule.ToString("0.00"));

效果如下图:

Scrollbar控件,滚动条Scrollbar常用于页面区域的滚动,例如文档浏览中,在Unity中Scrollbar控件分为水平和垂直2种,对应的GUI函数为HorizontalScrollbar和VerticalScrollbar,创建代码如下:

hSbarValue = GUI.HorizontalScrollbar (new Rect (25, 25, 100, 30), hSbarValue, 1.0f, 0.0f, 10.0f);vSbarVaule = GUI.VerticalScrollbar (new Rect (25, 50, 30, 100), vSbarVaule, 1.0f, 10.0f, 0.0f);

效果如下图:

Unity默认的控件外观十分简单,在游戏开发过程中,开发者都会根据游戏的类型和内容来设计一套个性化的游戏界面,Unity可以通过配置 GUISkin来更改控件的默认样式,制作出符合游戏风格的控件外观。依次打开菜单栏中的Assets->Create->GUI Skin来创建GUISkin,如下图:

单击GUISkin文件,在Inspector视图中可以对GUISkin的参数进行设置,假设现在需要更换按钮的背景图片,以及按钮上的字体大小 等,单击Button折叠项,展开Button控件的样式参数,更改Normal、Hover、Active、On Normal、On Hover、On Hover、Font Size这几个参数,如下图:

然后我们在代码中创建一个button,代码如下:

public GUISkin mySkin;GUI.skin = mySkin;GUI.Button (new Rect (60, 50, 588 / 2, 288 / 2), "开始游戏");

设置mySkin为我们刚才创建的GUISkin,绑定,点击后的效果如下图:

GUILayout自动布局,在Unity中GUI控件的布局方式有两种,一种为固定布局,即在绘制控件的时候将位置参数传人,指定控件的精确位 置;另外Unity还支持控件的自动布局,自动布局适用于控件数量动态的情况,或者是有时候开发者不太在乎控件的精准位置,如果想使用自动布局,那么需要 使用GUILayout类来代替前面使用的GUI类,并且去掉Rect()位置参数。

//自动布局
GUILayout.Button ("aaaaaaa");

转载于:https://www.cnblogs.com/dad-bod/p/5507641.html

[转]unity3D游戏开发之GUI相关推荐

  1. Unity3D游戏开发之GUI

    继续昨天的文章,在开始今天的文章以前我们来回顾下上一篇文章中的内容: 1.所有的Unity3D脚本都继承自MonoBehaviour 2.Start()方法是脚本的初始化方法,Update()方法是用 ...

  2. Unity3D游戏开发之GUI的使用

    GUI是图形用户界面(Graphical User Interface)的缩写和简称,又叫图形用户接口.听起来好像很专业的感觉,其实我们每天都在接触.比如浏览器上面的前进.后退.收藏按钮.地址栏.右键 ...

  3. [整理]Unity3D游戏开发之Lua

    原文1:[Unity3D]Unity3D游戏开发之Lua与游戏的不解之缘(上) 各位朋友,大家好,我是秦元培,欢迎大家关注我的博客,我地博客地址是blog.csdn.net/qinyuanpei.如果 ...

  4. Unity3D游戏开发之Unity3D中的动态阴影

    http://blog.csdn.net/qinyuanpei/article/details/32355267 博主今天想和大家分享的是Unity3D中的动态阴影,昨天博主重温了一下自己喜欢的游戏& ...

  5. Unity3D游戏开发之在uGUI中使用不规则精灵制作按钮

      各位朋友大家好,欢迎关注我的博客,我的博客地址是http://www.qinyuanpei.com.最近因为受到工作上业务因素影响,所以博主在Unity引擎上的研究有所停滞.虽然目前的工作内容和U ...

  6. [Unity3D]Unity3D游戏开发之Xml解析实现NPC对话系统

    各位朋友,大家好,我是秦元培,欢迎大家关注我的博客,我的博客地址是blog.csdn.net/qinyuanpei.今天我们来说说Unity3D中Xml的解析,为什么要说Xml的解析呢?因为在项目中我 ...

  7. [Unity3D]Unity3D游戏开发之ACT游戏三连击效果实现综述

    各位朋友,大家好,我是秦元培,欢迎大家关注我的博客,我的博客地址是blog.csdn.net/qinyuanpei.在研究了Unity3D Mecanim动画系统的重定向特性后,今天我们继续来探索Me ...

  8. [Unity3D]Unity3D游戏开发之Unity与Android交互调用研究

    各位朋友,大家好,我是秦元培,欢迎大家关注我的博客,我的博客地址是blog.csdn.net/qinyuanpei.在前一篇文章中,我们研究了Android平台上Unity3D的手势操作并在之前的基础 ...

  9. [Unity3D]Unity3D游戏开发之MatchTarget实现角色攀爬效果

    大家好,我是秦元培,欢迎大家关注我的博客,我的博客地址是blog.csdn.net/qinyuanpei.今天我们来一起学习在Unity3D中如何实现角色攀爬效果. 在RPG游戏中,某些游戏场景常常需 ...

最新文章

  1. QueryPerformanceFrequency用法--Windows高精度定时计数
  2. Activity悬浮并可拖动(访悬浮歌词)
  3. 【元气云妹】有趣有料的云吞铺子,来一碗吗?
  4. 京东技术主导:全新架构的分布式事务Hmily 2.1.1发布
  5. 【BZOJ1572】【usaco 2009 open】工作安排job
  6. Overview-ISA-2004-SP3
  7. 两个点击事件共用一个方法_杭州淘宝直播代运营:一个简单的方法,提升直播间封面图点击率!...
  8. MFC:ListControl数据修改
  9. java的技术定义_java基础知识——Java的定义,特点和技术平台
  10. Python使用折线图、柱状图、热力图比较不同班级相同学号学生的成绩
  11. Android中如何使用Intent在Activity之间传递对象[使用Serializable或者Parcelable]
  12. linux中gzip与bzip2的区别,gzip与bzip2命令
  13. 触发器详解——(一)D触发器
  14. php 写ps功能,ps的作用是什么
  15. HTML5_用语义化标记重新定义博客
  16. 苹果授权登录,后端校验(Sign in with Apple)
  17. MD5 标准算法详解
  18. GPU驱动、CUDA和cuDNN之间的版本匹配与下载
  19. 物联计算机大赛,“翼灵杯”第七届物联网创意大赛成功举办
  20. MAXENT模型的生物多样性生境模拟

热门文章

  1. 最安全的js类型检测
  2. 为什么[]==0;JavaScript里什么情况下a==!a为true呢?
  3. uni-app微信小程序获取手机号;微信小程序获取手机号,获取到后需要进行解密;微信小程序获取手机号失败 Error:该appId没有权限
  4. 如何开始了解一个新知识(Vuex)
  5. [js] 微信的JSSDK都有哪些内容?如何接入?
  6. 工作168:代码中的删除逻辑处理
  7. 前端学习(2526):Vuex成果和展示
  8. 前端学习(2330):angular之二级路由
  9. 前端学习(1731):前端系列javascript之发布窗口布局下
  10. java面试题4 牛客:运行下列代码,运行结果为