1.工作原理和主要作用

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class lesson1 : MonoBehaviour
{#region GUI是什么//全称 即时模式游戏用户交互界面(IMGUI)//在Unity中一般简称为GUI//它是一个代码驱动的UI系统#endregion#region GUI的主要作用//1.作为程序员的调试工具 创建游戏内调试工具//2.为脚本组件创建自定义检视面板//3.创建新的编辑器窗口和工具以拓展Unity本身(一般用作内置游戏工具)//注意:不要用它为玩家制作UI功能#endregion#region GUI的工作原理//在继承MonoBehaviour的脚本中的特殊函数里//调用GUI提供的方法//类似生命周期函数private void OnGUI(){//在其中书写 GUI相关代码 即可显示GUI内容}//注意://1.它每帧执行 相当于是用于专门绘制GUI界面的函数//2.一般只在其中执行GUI相关界面绘制和操作逻辑//3.该函数 在 OnDisable之前 LateUpdate之后执行//4.只要是继承Mono的脚本 都可以在OnGUI中绘制GUI#endregion
}

2.文本和按钮控件

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class lesson2 : MonoBehaviour
{public Texture tex;public Rect rect;public Rect rect1;public GUIContent content;public GUIStyle style;public Rect btnRect;public GUIContent btnContent;public GUIStyle btnStyle;private void OnGUI(){#region GUI控件绘制的共同点//1.他们都是GUI公共类中提供的静态函数 直接调用即可//2.他们的参数都大同小异//  位置参数:Rect参数 x y位置 w h尺寸//  显示文本:string参数//  图片信息:Texture参数//  综合信息:GUIContent参数//  自定义样式:GUIStyle参数//3.每一种控件都有多种重载,都是各个参数的排列组合  //  必备的参数内容 是 位置信息和显示信息#endregion#region 文本控件//基本使用GUI.Label(new Rect(0,0,100,20),"欢迎你!!!");//显示文本GUI.Label(rect, tex);//显示图片//综合使用GUI.Label(rect1, content);//可以获取当前鼠标或者键盘选中的GUI控件 对应的 tooltip信息Debug.Log(GUI.tooltip);//自定义样式GUI.Label(new Rect(0, 0, 100, 20), "欢迎你!!!",style);#endregion#region 按钮控件//基本使用//综合使用//自定义样式//鼠标在按钮内 按下并抬起 才会返回trueif (GUI.Button(btnRect, btnContent, btnStyle)){//处理我们按钮点击的逻辑Debug.Log("按钮被点击");}//只要在长按按钮 就会一直返回trueif (GUI.RepeatButton(btnRect, btnContent, btnStyle)){Debug.Log("长按按钮");}#endregion}
}

3.多选框和单选框

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class lesson3 : MonoBehaviour
{private bool isSel;private bool isSel2;private GUIStyle style;private int nowSelIndex = 1;private void OnGUI(){#region 多选框#region 普通样式 isSel = GUI.Toggle(new Rect(0, 0, 100, 30), isSel, "效果开关");#endregion#region 自定义样式 显示问题//修改固定宽高 fixedWidth和fixedHeight//修改从GUIStyle边缘到内容起始处的空间 paddingisSel2 = GUI.Toggle(new Rect(0, 40, 100, 30), isSel2, "音效开关",style);#endregion#endregion#region 单选框//单选框是基于 多选框的实现if (GUI.Toggle(new Rect(0, 100, 100, 30), nowSelIndex == 1, "选项一")){nowSelIndex = 1;}if (GUI.Toggle(new Rect(0, 140, 100, 30), nowSelIndex == 2, "选项二")){nowSelIndex = 2;}if (GUI.Toggle(new Rect(0, 180, 100, 30), nowSelIndex == 3, "选项三")){nowSelIndex = 3;}#endregion}}

4.输入框和拖动条

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class lesson4 : MonoBehaviour
{private string inputStr="";private string inputPW="";private float nowValue = 0.5f;private void OnGUI(){#region 输入框#region 普通输入//输入框 重要参数 //参数二:内容 string//参数三:可输入长度inputStr = GUI.TextField(new Rect(0, 0, 100, 30), inputStr,5);#endregion#region 密码输入//参数二:密码//参数三:可输入长度inputPW = GUI.PasswordField(new Rect(0, 50, 100, 30), inputPW, '*', 5);#endregion#endregion#region 拖动条#region 水平拖动条//当前的值//参数三:最小值//参数四:最大值//可以加三个样式nowValue = GUI.HorizontalSlider(new Rect(0, 100, 100, 50), nowValue, 0, 1);Debug.Log(nowValue);#endregion#region 竖直拖动条nowValue = GUI.VerticalSlider(new Rect(0, 150, 50, 100), nowValue, 0, 1);#endregion#endregion}
}

5.图片绘制和框绘制

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class lesson5 : MonoBehaviour
{public Rect texPos;public Texture tex;public ScaleMode mode = ScaleMode.StretchToFill;public bool alpha = true;public float wh = 0;private void OnGUI(){#region 图片绘制// ScaleMode// ScaleAndCrop    会通过宽高比比来计算图片 但是 会进行裁剪// ScaleToFit      会自动根据宽高比进行计算 不会拉变形 会一直保持图片完全显示的状态// StretchToFiill  始终填充满你传入的 Rect范围// alpha 是用来 控制 图片是否开启透明通道的// imageAspect 自定义宽高比 如果不填 默认为0 就会使用 图片原始宽高//GUI.DrawTexture(texPos,tex,mode,alpha,wh);#endregion#region 框绘制GUI.Box(texPos, "123");#endregion}
}

6.工具栏和选择网格

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class lesson6 : MonoBehaviour
{private int toolbarIndex = 0;private string[] toolbarInfos = new string[] { "选项一", "选项二", "选项三" };private int selGridIndex = 0;private void OnGUI(){#region 工具栏toolbarIndex = GUI.Toolbar(new Rect(0, 0, 200, 30), toolbarIndex, toolbarInfos);//工具栏可以帮助我们根据不同的返回索引 来处理不同的逻辑switch (toolbarIndex){case 0:break;case 1:break;case 2:break;}#endregion#region 选择网格//相对 toolbar多了一个参数 xCount 代表 水平方向最多显示的按钮数量//一行显示不完就会在下一行显示GUI.SelectionGrid(new Rect(0, 50, 200, 30), selGridIndex, toolbarInfos, 2);#endregion}
}

7.滚动列表和分组

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class lesson7 : MonoBehaviour
{public Rect groupPos;public Rect scPos;public Rect showPos;private Vector2 nowPos;private string[] strs = new string[] { "按钮1", "按钮2", "按钮3", "按钮4" };private void OnGUI(){#region 分组//用于批量控制控件位置//可以理解为 包裹着的控件加了一个父对象//可以通过控制分组来控制包裹控件的位置GUI.BeginGroup(groupPos);GUI.Button(new Rect(0, 0, 100, 50), "测试按钮");GUI.Label(new Rect(0, 60, 100, 20), "Lable信息");GUI.EndGroup();#endregion#region 滚动列表nowPos = GUI.BeginScrollView(scPos, nowPos, showPos);GUI.Toolbar(new Rect(0, 0, 300, 50), 0, strs);GUI.Toolbar(new Rect(0, 60, 300, 50), 0, strs);GUI.Toolbar(new Rect(0, 120, 300, 50), 0, strs);GUI.Toolbar(new Rect(0, 180, 300, 50), 0, strs);GUI.EndScrollView();#endregion}
}

8.窗口

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class lesson8 : MonoBehaviour
{private Rect dragWinPos = new Rect(400, 400, 200, 150);private void OnGUI(){#region 窗口//参数一:第一个参数 id 是窗口的唯一ID 不要和别的窗口重复//参数二:显示区域//参数三:委托参数 是用于 绘制窗口用的函数 传入即可//参数四:窗口标题GUI.Window(1, new Rect(100, 100, 200, 150), DrawWindow, "测试窗口");//id对于我们来说 有一个重要作用 除了区分不同窗口 还可以在一个函数中去处理多个窗口的逻辑//通过id去区分他们GUI.Window(2, new Rect(100, 350, 200, 150), DrawWindow, "测试窗口2");#endregion#region 模态窗口//模态窗口 可以让其他控件不再有用//你可以理解该窗口在最上层 其他按钮都点击不到了//只能点击该窗口上的控件//GUI.ModalWindow(3, new Rect(300, 100, 200, 150), DrawWindow, "模态窗口");#endregion#region 拖动窗口//位置赋值只是前提dragWinPos = GUI.Window(4, dragWinPos, DrawWindow, "拖动窗口");#endregion}private void DrawWindow(int id){switch (id){case 1:GUI.Button(new Rect(0, 20, 30, 20), "按钮1");break;case 2:GUI.Button(new Rect(0, 20, 30, 20), "按钮2");break;case 3:GUI.Button(new Rect(0, 20, 30, 20), "按钮3");break;case 4://该API 写在窗口函数中调用 可以让窗口被拖动//传入Rect参数的重载 作用//是决定窗口中的哪一部分位置 可以被拖动//默认不填 就是无参重载 默认窗口的所有位置都能被拖动GUI.DragWindow(new Rect (0,0,1000,20));break;}}
}

9.自定义皮肤

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class lesson9 : MonoBehaviour
{public GUIStyle style;public GUISkin skin;private void OnGUI(){#region 全局颜色//全局的着色颜色 影响背景和文本颜色//GUI.color = Color.red;//文本着色颜色 会和 全局颜色相乘//GUI.contentColor = Color.yellow;//GUI.Button(new Rect(0, 0, 100, 30), "测试按钮");背景元素着色颜色 会和 全局颜色相乘//GUI.backgroundColor = Color.red;//GUI.Label(new Rect(0, 50, 100, 30), "测试按钮");//GUI.color = Color.white;//GUI.Button(new Rect(0, 100, 100, 30), "测试按钮",style);#endregion#region 整体皮肤样式//为空的话 会显示默认的皮肤样式GUI.skin = skin;//虽然设置了皮肤 但是绘制时 如果使用GUIStyle参数 皮肤就没有GUI.Button(new Rect(0, 0, 100, 30), "测试按钮");GUI.skin = null;GUI.Button(new Rect(0, 50, 100, 30), "测试按钮2");//它可以帮助我们整套的设置 自定义样式//相对单个控件设置style要方便一些#endregion}
}

10.自动布局

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class lesson10 : MonoBehaviour
{private void OnGUI(){#region GUILayout 自动布局//主要用于进行编辑器开发 如果用它来做游戏UI不太合适GUI.BeginGroup(new Rect(100, 100, 200, 300));GUILayout.BeginVertical();GUILayout.Button("123",GUILayout.Width(200));GUILayout.Button("1234");GUILayout.Button("12345",GUILayout.ExpandWidth(false));GUILayout.EndVertical();GUI.EndGroup();#endregion#region GUILayoutOption 布局选项//控件的固定宽高GUILayout.Width(300);GUILayout.Height(200);//运行控件的最小宽高GUILayout.MinWidth(50);GUILayout.MinHeight(50);//允许控件的最大宽高GUILayout.MaxWidth(100);GUILayout.MaxHeight(100);//允许或禁止水平拓展GUILayout.ExpandWidth(true);GUILayout.ExpandHeight(true);#endregion}
}

Unity中UI系统——IMGUI(GUI)相关推荐

  1. unity中ui界面介绍

    unity中ui界面的介绍 ui 又称gui,它比较适合做一些简单的界面. 可以在层级视图中右键单击就会出现很多选项卡,其中有一个就是ui单击就会出现如上图片中的内容 1.text: 这就是一个文本输 ...

  2. Unity中UI界面颤抖解决方法

    Unity中UI界面颤抖解决方法 参考文章: (1)Unity中UI界面颤抖解决方法 (2)https://www.cnblogs.com/Study088/p/7290909.html 备忘一下.

  3. Unity全新UI系统dear imgui

    前言 有没有人跟我有过同样的想法,觉得Unity的imgui相当繁琐,每次想写点编辑器扩展都得自己写一大堆的东西,本来就一直在网上找找有没有一些造好的轮子可以使用,可惜没有找到.后面在找到dear i ...

  4. unity中UI界面的一些动画实现总结

    在做unity的ui界面的时候,美术通常会实现一些动画效果.这里列举几个: 1.位置的变化 2.旋转的变化 3.缩放的变化 4.alpha的变化 5.颜色的变化 我们举一个例子: 位置的变化: (1) ...

  5. 关于Unity中UI中的Image节点以及它的Image组件

    一.图片的Inspector面板属性 Texture Type:一般是选择sprite(2D and UI) Sprite Mode:一般是选择Single Packing Tag:打包的标志值,最后 ...

  6. image加载图片 ui unity_关于Unity中UI中的Image节点以及它的Image组件

    一.图片的Inspector面板属性 Texture Type:一般是选择sprite(2D and UI) Sprite Mode:一般是选择Single Packing Tag:打包的标志值,最后 ...

  7. Unity | Unity中UI框架的实现与使用

    文章目录 0 前言 1 程序结构 2 工具类:UIPanelInfo.cs 3 PanelType枚举类以及BasePanel类 4 UIManager类 5 UIPanelJson文件 5 使用方法 ...

  8. Unity中UI的LookAt效果实现

    代码: //参数分别为:1.UI修改目标的Transform 2.朝向向量 3.起始向量public void UILookAt(Transform transform, Vector3 dir, V ...

  9. Unity中UI组件

    一.Canvers(画布组件),Canvers下面是添加Button和Image组件 Rect Transform 1.Position:坐标位置 2.Width/Height 高宽尺寸 3.Anch ...

最新文章

  1. 【软件工程】CMMI 能力成熟度模型集成 ( CMMI 过程管理过程域 | CMMI 项目管理过程域 ) ★
  2. iphone开发证书 纠结许久
  3. oracle的catalog,Oracle Rman Catalog的创建方法和备份原理
  4. python如何开启多进程_python如何写多进程
  5. 无限级分类及生成json数据
  6. Django admin美化插件suit
  7. 微软服务器安全补丁,Microsoft Windows SMB服务器安全更新(4013389)补丁 官方勒索病毒漏洞修复版(图文)...
  8. 基于java宿舍管理系统的开题报告_基于Java的学生宿舍管理系统开题报告
  9. 计算机网络中属于资源子网的是,属于计算机网络的资源子网
  10. ACM—数论—费马大定理 (数学史上著名的定理)
  11. win7旗舰版配置FTP- 添加用户
  12. dell inspiron 只有一个飞行模式 没有wifi_教你电脑连不上wifi的解决方法
  13. 【光学】--色度学与Lab模型
  14. border-radius理解-边框棱角变圆
  15. MAC下的Sublime Text关闭自动更新提示,关闭更新检查,适用于Sublime 3和Sublime 4
  16. python定义一个dog类 类属性有名字_python 基础 12 初识类,类方法,类属性
  17. 「DaoCloud 道客」荣升Istio指导委员会席位
  18. 议题征集令 | Apache DolphinScheduler Meetup 2021 来啦,议题征集正式开启!
  19. linux 不删除文件,清空文件内容命令
  20. Uniswap V1 合约源码之保姆级解析

热门文章

  1. 从新浪微博的改版谈网页重构
  2. 2021-07-17【普及组】模拟赛C组 总结
  3. win10系统设置虚拟化-Inter Virtualization Technology
  4. html垂直居中ver,CSS 垂直居中
  5. 09Java语法回顾map集合
  6. java relativelayout,Java RelativeLayout.removeView方法代码示例
  7. XML——XML介绍和基本语法
  8. 利用画线插件如何删除线
  9. STM32——看门狗
  10. ubuntu篇----完美解决ubuntu中qq图片无法加载的问题