Unity3D笔记第三天——GUI

2023-11-13

GUI:
GUI是Graphical User Interface的缩写。Unity的图形界面系统能容易和快速创建出各种交互界面。与传统的方法:创建GUI对象,标出位置,再写对应的事件函数不同,只需要用很少的代码,就可以把这些工作搞定。原理是内置的控制元素,可以把创建实例,标出位置与对应函数一次搞定。
例如:
void OnGUI()
	{
		GUI.Label (new Rect (20,20,100,30),"登陆成功");
		if (GUI.Button (new Rect (20, 80, 80, 80), "返回")) 
		{
			Application.LoadLevel(0);//加载索引值为0的场景
		}
	}

游戏界面是游戏作品中不可或缺的部分,它可以为游戏提供导航,也可以为游戏内容提供重要的信息,同时也是美化游戏的一个重要手段。Unity内置了一套完整地GUI系统,提供了从布局、控件到皮肤的一整套GUI解决方案,可以做出各种风格和样式的GUI界面。目前Unity没有提供内置的GUI可视化编辑器,因此GUI界面的制作需要全部通过编写脚本代码来实现。


因为OnGUI()函数每祯都执行,不需要另外再去创建或销毁GUI控制元素。如果要在某一情况下显示而在另一情况下不显示GUI,就需要用另外的逻辑去实现。(每祯都创建新的GUI元素,个人不推荐用GUI)


绘制GUI:
方法OnGUI():GUI部分是每“帧”擦除重绘的,只应该在OnGUI中

标签: void GUILayout. Label(string)
文本输入域: string GUILayout.TextField(string);
多行文本框: msgBody = GUILayout.TextArea(msgBody);
密码框: string GUILayout.PasswordField(pwd,„*‟),第二个参数为掩码字符。
按钮: Button只有鼠标抬起才会返回true,这样用Button做发射子弹就不能按下一直发射,可以使用RepeatButton,这样按下期间会一直返回true。


典型基本控件(续)
Tab页: selectedToolBarId =GUILayout.Toolbar(selectedToolBarId,new string[]{“装备”,“经验”,“队友”});  返回值为点击的按钮的序号;
复选框:isMuted = GUILayout.Toggle(isMuted,“静音”);
多行文本框: msgBody = GUILayout.TextArea(msgBody);


GUILayout
GUILayout布局默认会伸展控件的尺寸。Button等控件支持params
GUILayoutOption[]options可变参数数组,可以通过GUILayout.Width(100)返回一个
设置控件宽度的GUILayoutOption对象, Height()、 MinWidth()、MinHeight()等同理。
例子:GUILayout.Button("Test",GUILayout.Width(500),GUILayout.Height(30))
GUILayout采用线性布局,类似于StackPanel,默认是纵向布局。
通过GUILayout.BeginHorizontal();开启和GUILayout.EndHorizontal()结束一个横向排列区域,同理BeginVertical() 、EndVertical() 如果嫌控件太挤,可以使GUILayout.Space(30);增加若干像素的间隙。


GUISkin  皮肤
首先在Project中Create→GUI Skin,选中创建的GUISkin文件,在Inspector中修改每种控件的样式。
编写一个脚本,脚本中定义一个GUISkin类型的属性:
public GUISkin MySkin;
OnGUI中加载样式:
GUI.skin = MySkin;
GUILayout.Button(“确定");
GUILayout.Button(“取消");
选中脚本所拖的的模型,把GUISkin文件拖到MySkin属性上。这样所有按钮都是这样的风格GUI.Skin.GetStyle(“”)。
注意:如果没有效果,就把脚本remove后再添加。


附:登录界面代码

	void OnGUI()
	{
		GUI.skin = mySkin;

		istoggle_username = GUI.Toggle (new Rect (Screen.width / 2 - 100, Screen.height / 2 + 50, 150, 30), istoggle_username,"记住用户名");
		istoggle_password = GUI.Toggle(new Rect (Screen.width/2+50, Screen.height/2+50, 150,30),istoggle_password,"记住密码");

		GUI.Label (new Rect (Screen.width / 2 - 100, Screen.height / 2 - 100, 100, 30), "用户名:","username");
		GUI.Label (new Rect (Screen.width / 2 - 100, Screen.height / 2 - 50, 100, 30), "密码:","username");

		//单行文本
//		    username = GUI.TextField (new Rect (Screen.width / 2 + 10, Screen.height / 2 - 100, 100, 30), username);
		//多行文本区域
		username = GUI.TextArea (new Rect (Screen.width / 2 + 10, Screen.height / 2 - 100, 100, 30), username,"username");
		password = GUI.PasswordField (new Rect (Screen.width / 2 + 10, Screen.height / 2 - 50, 100, 30), password, '*',"username");

		if(username != "" || password != "")
		{
			isLoginFailed = false;
		}

		if (GUI.Button (new Rect (Screen.width / 2, Screen.height / 2, 50, 50), "登录")) 
		{
			if (username == "admin" && password == "123456") 
			{
				Application.LoadLevel(1);
			}
			else 
			{
				isLoginFailed = true;
			}
		}
		if(isLoginFailed == true)
		{
			GUI.color = Color.red;
			GUI.Label(new Rect (Screen.width/2,Screen.height/2+100 , 200 ,50),"用户名或者密码错误,请重新输入!!!");
			username = "";
			password = "";
		}
	}



相关知识点:
Gui的位置及大小用Rect来控制。
位置这个参数一般用RECT()这个函数来指明。它定义了X坐标,Y坐标,宽度,高度.以像素为单位的绝对坐标来计算. 通过Screen.width and Screen.height这两个属性可以得到屏幕尺寸,以此通过计算来设置位置.以适应不同分辨率的电脑。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Unity3D笔记第三天——GUI 的相关文章

  • Unity3d 简单的按照路径移动物体!

    在TORQUE引擎中 我们只要设置几个点 然后物体会按照这几个点顺序移动 Unity3d也可以的 现在介绍一个很简单的按照路径移动的方法 目标是让蓝色方块沿着紫色方块组成的路径移动 设计思想就是让蓝色方块移动第一个 然后继续移动到第二个 然
  • unity多个贴图shader

    在一个Material上放多个贴图的测试 比如一个plane上放四个贴图 Shader aaa Properties MainTex Texture 2D white MainTex2 Texture 2D white MainTex3 T
  • unity中通过touch旋转、放大和缩小物体以及滑动方向的判断

    unity中通过touch旋转 放大和缩小物体以及滑动方向的判断这个需求在游戏开发中也是非常频繁 话不多说直接上代码 using System Collections using System Collections Generic usi
  • Unity3D射线检测

    射线检测主要用于像子弹是否打中物体 捡取物品等情况 本来面向百度想找例子看看 不过没找到合适的 还是自己总结尝试吧 以下测试Unity3D版本 2017 4 2f2 射线的检测步骤如下 1 Ray 这个类为了产生一个射线 如果我们想要场景中
  • 《Unity Shader入门精要》彩图版免费分享~~~~~

    这书很多地方都要币或者要钱 这里就免费分享了 下面是网盘链接 顺手点个赞或者评论一波呗 下载链接 链接 https pan baidu com s 137Y1nkB6h8HIvKOfwFPnbQ 提取码 f8dw 顺手点个赞 蟹蟹蟹蟹
  • Unity笔记-打飞碟游戏

    目的 创建一个打飞碟游戏 简陋 游戏要求 游戏要分多个 round 飞碟数量每个 round 都是 n 个 但色彩 大小 发射位置 速度 角度 每次发射数量可以变化 游戏过程中 仅能创建 n 个飞碟 且不容许初始化阶段生成任何飞碟 飞碟线路
  • 离散仿真引擎基础作业与练习

    作业内容 一 简答题 1 解释 GameObjects 和 Assets 的区别与联系 2 下载几个游戏案例 分别总结资源 对象组织的结构 3 使用 debug 验证 MonoBehaviour 基本行为或事件触发条件 4 了解 GameO
  • Unity3D 碰撞器和触发器

    对于碰撞器和触发器经常忘记用法 这次主要记录下以便于能够复习用 1 碰撞器 发生条件 1 碰撞的双方中一定至少要有一个Rigidbody存在 并且碰撞双方必须都要有碰撞体组件 2 碰撞双方若只有一个有刚体 那么那个刚体一定要处于运动的状态下
  • Unity编辑器界面概述

    了解界面 如果您对编辑器界面没有非常地了解 那么请花一些时间查看并熟悉 Editor 编辑器 界面 Editor 主窗口由选项卡式窗口组成 这些窗口可重新排列 因此 Editor 的外观可能因项目或者开发者而异 具体取决于个人偏好 Wind
  • unity3d 理解刚体(Rigidbody)和碰撞体(Collider)以及触发器(Is Trigger),边学边更新

    unity3d 理解刚体 Rigidbody 和碰撞体 Collider 以及触发器 Is Trigger 边学边更新 分类 Unity3D 2014 04 01 16 50 2755人阅读 评论 2 收藏 举报 刚体 Rigidbody
  • Unity_如何使相机视角一直跟随角色移动

    实例代码如下 using System Collections using System Collections Generic using UnityEngine 相机视角跟踪 public class FollowTarget Mono
  • Unity动画系统详解5:BlendTree混合树是什么?

    摘要 Animator中有一个功能 用来解决多个动画之间的混合 经常用于移动动画之间的混合 这个功能叫做BlendTree 混合树 洪流学堂 让你快人几步 你好 我是跟着大智学Unity的萌新 我叫小新 这几周一起来复 yu 习 xi 动画
  • Unity里清除Console控制台Log的函数

    Log输出部分转发来自 http blog sina com cn s blog 13c4bf4b40102wz0r html 在控制台输出中 是开发者常用到的一种函数 通过Debug类来实现 打印字符串 Debug Log log 如果有
  • Unity3D Engine Architecture

    原文 http www umingo de doku php id paper mechs and tanks section03 Architecture To better understand the game s software
  • unity粒子特效附上贴图后播放动画

    转自 http jingyan baidu com article f96699bbb1a0d6894f3c1b77 html 参考 http www unitymanual com thread 2993 1 1 html dsign a
  • Python GUI案例之看图猜成语开发(第二篇)

    Python GUI案例之看图猜成语 第二篇 前言 看图猜成语小程序开发 第二篇 游戏选择模式页面 游戏训练模式页面 Python GUI案例之看图猜成语开发 第一篇 Python GUI案例之看图猜成语开发 第三篇 Python GUI案
  • 对Unity3D 静态批处理和动态批处理的理解

    Draw Call就是CPU调用图像编程接口 像OpenGL或者 DirectX 简单来说 Draw Call就是由CPU发起的一个命令 添加到一个命令缓冲区 当GPU完成了上一次的渲染任务之后 会从命令缓冲区的命令队列中再取出一个并执行
  • unity的LOD组件

    本文转载自http blog csdn net huutu article details 52106468 LOD是Level Of Detais 的简称 多细节层次 在游戏场景中 根据摄像机与模型的距离 来决定显示哪一个模型 一般距离近
  • VSCode『SSH』连接服务器『GUI界面』传输

    前言 最近需要使用实验室的服务器训练带有 GUI 画面的 AI 算法模型 pygame 但是我是使用 SSH 连接的 不能很好的显示模型训练的效果画面 所以下面将会讲解如何实现 SSH 连接传输 Linux GUI 画面的 注 我们没有采用
  • PyQt 布局:创建具有专业外观的 GUI 应用程序

    目录 在 GUI 上布置图形元素 储备 PyQt 布局库 Using General Purpose Layout Managers 构建水平布局 QHBoxLayout 构建垂直布局 QVBoxLayout 在网格中排列小部件 QGrid

随机推荐

  • Neo4j:入门基础(二)之导入CSV文件

    CSV文件 1 csv文件推荐是utf 8编码 否则会造成中文乱码 2 csv文件默认需要放在import目录下 如需从远程或者其他本地目录导入 则需要修改conf neo4j conf load csv时文件路径 默认需要放在 NEO4J
  • Cesium 之加载ArcGIS Server 4490切片服务(含orgin -400 400)

    对于ArcGIS Server发布的切片服务 在地理坐标系中Cesium默认只支持wgs84的4326坐标系 无法通过ArcGisMapServerImageryProvider直接加载CGCS2000的4490坐标系 虽然可以使用WebM
  • openGL之API学习(六十七)glTexParameter glTextureParameter

    设置纹理对象的参数 这两个函数其实是一个功能 void glTexParameterf GLenum target GLenum pname GLfloat param target Specifies the target to whic
  • DC-7靶机渗透测试

    文章目录 DC 7靶机渗透测试 1 信息收集 1 1 主机扫描 1 2 端口扫描 1 3 目录扫描 2 SSH远程登录 3 漏洞发现 4 漏洞利用 5 提权 DC 7靶机渗透测试 1 信息收集 1 1 主机扫描 netdiscover r
  • 数据结构 - 栈 与 队列 - (java)

    前言 本篇介绍栈和队列 了解栈有顺序栈和链式栈 队列底层是双链表实现的 单链表也可以实现队列 栈和队列的相互实现和循环队列 如有错误 请在评论区指正 让我们一起交流 共同进步 文章目录 前言 1 栈的认识 1 1 栈的使用 栈实现队列 2
  • 模拟电路设计(6)--- J-FET之实际使用注意事项

    上篇我们分析了J FET的输出 转移特性曲线 今天我们来说说J FET的实际使用注意事项 J FET的常用参数 J FET的等效电路数学模型 准确来说 FET是一个非线性器件 但对交流小信号来说 它可以等效成一个线性电路 该模型可用于小信号
  • Jupyter notebook工作空间默认路径的设置

    Jupyter notebook 安装后 启动后 默认的工作空间是当前用户目录 为了方便对文档进行管理 往往需要自行设置工作空间 修改配置文件 打开Anaconda的cmd 如果在windows中直接安装 就开windows的 在cmd中输
  • vue路由跳转时定位到页面顶部的方法汇总

    背景 在做vue项目时 发现路由跳转之后 页面默认停留在当前浏览的位置 但是很多时候我们想要的是路由跳转之后 页面重新定位到顶部 下面介绍一下可以实现的方法 方式一 在main js中添加以下代码即可 router beforeEach t
  • 【华为OD机试真题 Java】数字序列比大小

    006 数字序列比大小 前言 本专栏将持续更新互联网大厂机试真题 并进行详细的分析与解答 包含完整的代码实现 希望可以帮助到正在努力的你 关于大厂机试流程 面经 面试指导等 如有任何疑问 欢迎联系我 wechat steven moda e
  • 常用矩阵名词解释

    共轭矩阵 Hermite阵中每一个第i行第j列的元素都与第j行第i列的元素的共轭相等 然而矩阵A的共轭矩阵并非Hermite阵 自共轭矩阵是矩阵本身先转置再把矩阵中每个元素取共轭得到的矩阵 a bi的共轭是a bi 单位矩阵 主对角线上的元
  • 解决mysql一段时间后不能启动

    问题 同样的问题其实已经发生过好几次 就是本地计算机上的mysql服务器突然无法启动 在控制面板中尝试启动服务的时候报错 本地计算上的mysql服务启动后停止 某些服务在未由其他服务或程序启动时将自动停止 以前曾经 解决 过这个问题 加引号
  • webcore简易教程(一)

    简介 tms 公司出品 2018年推出 现在最新的1 3版本 原理 pas转换成html js pas2js 特点 可以直接在各种浏览器上运行 优点 1 生成js 跨平台 2 可以使用fnc组件 功能扩展较好 3 chrome浏览器上可以调
  • Python复习的知识点

    python语言程序设计基础的复习笔记 第一章内容 1 在python语言中解释和编译的区别 编译 编译是将源代码转换成目标代码的过程 源代码是计算机高级语言的代码 而目标代码则是机器语言的代码 执行编译的计算机程序称为编译器 Compil
  • T1 载波速率 为什么是1.544Mbps?

    这是大二时上的一节网络通信技术基础上学的内容 期末时却没能写出来 一直觉得有些遗憾 所以写在博客的第一篇 希望自己可以激励自己 知错则改 不断进步 分割线 人的话音信道在4Mhz之内 根据奈奎斯特采样定理按照2倍8MHz采样 并128级量化
  • 大工17春计算机组成原理,大工17春《计算机组成原理》在线作业3

    谋学网http doc wendoc com 一 单选题 共 10 道试题 共 50 分 V 1 是构成控制信号序列的最小单位 A 微程序 B 微操作命令 C 微指令 D 控制存储器 2 寻址方式中的寄存器间接寻址 其操作数处在 A 通用寄
  • win10打印机终结点映射器_解决win8打印机提示“终结点映射器中没有更多的终结点可用”的方法...

    打印机是我们办公是必备的一个设备 因此想必大家在办公室都给电脑安装了打印机吧 最近有位Win8用户在给电脑安装打印机的时候遇到了一个错误提示 虽然成功的安装了打印机 但是系统却提示 终结点映射器中没有更多的终结点可用 遇到这样的错误提示之后
  • 杂记——11.eclipse中更改Tomcat的配置

    这篇文章讲一下在eclipse中如何更改Tomcat的相关配置 第一步 打开eclipse 第二步 点击下方视窗的Servers 第三步 双击Tomcat 然后如下图所示 第四步 设置Tomcat的启动时间 第五步 启动Tomcat
  • gitee同一台电脑使用多个账号的问题

    官方文档 https gitee com help articles 4238 article header0 目录 一 通过 https ssh 协议推拉代码 二 通过 https 推拉代码但是存在多个账号的问题 三 通过 ssh 推拉代
  • python3 判断列表是一个空列表

    python3 判断空列表 python3 有个判断列表是否为空的需求 试了好多方式 比如 a if a is not None COMMAND a if a 0 is None COMMAND 各种乱七八糟的逻辑 老是无法满足 其实很简单
  • Unity3D笔记第三天——GUI

    GUI GUI是Graphical User Interface的缩写 Unity的图形界面系统能容易和快速创建出各种交互界面 与传统的方法 创建GUI对象 标出位置 再写对应的事件函数不同 只需要用很少的代码 就可以把这些工作搞定 原理是