【unity之UI专题】GUI(IMGUI)详解

在这里插入图片描述


👨‍💻个人主页:@元宇宙-秩沅

👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅!

👨‍💻 本文由 秩沅 原创

👨‍💻 收录于专栏unity实战入门

在这里插入图片描述


IMGUI原理


文章目录

    • IMGUI原理
    • 🎶前言
    • 🎶(A)IMGUI工作原理
    • 🎶(B)IMGUI——基本控件
    • 🎶(C)IMGUI基本控件—文本控件
    • 🎶(D)IMGUI基本控件—按钮控件
      • 练习操作
    • 🎶(E)IMGUI基本控件—多选框和单选框
      • 练习操作
    • 🎶(G)IMGUI基本控件—拖动条
      • 练习操作
    • 🎶(F)IMGUI基本控件—输入框
      • 练习操作
    • 🎶(H)IMGUI基本控件—图片绘制
    • 🎶(III)IMGUI——复合控件
    • 🎶(J)IMGUI复合控件—工具栏(标签)
      • 练习操作
    • 🎶(K)IMGUI复合控件—分组和滚动视图
      • 实践练习
    • 🎶(L)IMGUI复合控件—窗口相关
      • 实践练习
    • 🎶(M)IMGUI综合—GuiSkin
    • 🎶(N)IMGUI综合—GUILayout
    • ⭐相关文章⭐


🎶前言

  • IMGUI不会用作游戏的UI开发
  • 会用到游戏的编辑器开发

🅰️ 题单来自:唐老狮


🎶(A)IMGUI工作原理


在这里插入图片描述

在这里插入图片描述


🎶(B)IMGUI——基本控件


在这里插入图片描述
在这里插入图片描述

  • GUIContent -----可以是以下三者的结合
    在这里插入图片描述
    tooltip–鼠标选中后课得到该信息(作为隐藏信息使用)
  • GUIStyle ———全部综合
    1.Nomal ——正常情况
    2.Hover——鼠标停留后
    3.Active——按下之后

🎶(C)IMGUI基本控件—文本控件


在这里插入图片描述


🎶(D)IMGUI基本控件—按钮控件


在这里插入图片描述

  • 点击的逻辑情况 ——> GUI.Button == true ;
    (在原地方点击后松开才算一次点击)

练习操作

  • 用GUI制作一个游戏开始界面,上面有开始游戏,退出游戏,设置等等按钮选项,点击开始游戏可以切换到游戏场景
    在这里插入图片描述
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
//-------------------------------------
//—————————————————————————————————————
//___________项目:  标签和按钮组件的应用     
//___________功能: 主面板界面 
//___________创建者:秩沅_______________
//_____________________________________
//-------------------------------------
public class GuiExsi : MonoBehaviour
{public Rect RectLabel;public Rect RectButton1;public Rect RectButton2;public Rect RectButton3;public GUIContent guiContent;public GUIStyle guistyle;public GUIStyle button1;public GUIStyle button2;public GUIStyle button3;private void OnGUI(){//------------开始游戏基本画面--------------GUI.Label(RectLabel , guiContent ,guistyle);if (GUI.Button(RectButton1, "开始游戏", button1)){SceneManager.LoadScene("simple1");}GUI.Button(RectButton2,"设置", button2);GUI.Button(RectButton3, "退出游戏",button3);//------------游戏设置面板--------------}
}

🎶(E)IMGUI基本控件—多选框和单选框


在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

练习操作

在上一题基础上,弄一个游戏设置面板
有背景音乐的开关和音效的开关
并且点击开始界面的设置可以打开设置面板

  • 设置界面主代码

//-------------------------------------
//—————————————————————————————————————
//___________项目: GUI组件练习 
//___________功能: 设置面板    
//___________创建者:秩沅_______________
//_____________________________________
//-------------------------------------
public class GUISetPlane : MonoBehaviour
{static public  GUISetPlane instance;public Rect SetLable1, SetLable2;public Rect closeButPos;public GUIContent closeButton;private  bool swtich1 = true ;private  bool swtich2 = true ;private  bool swtich3 = true;public Rect SetLable3;//-----------------------------------public void Active()      //让自身激活{Debug.Log("设置面板已经激活");GUISetPlane a = instance.gameObject.GetComponent<GUISetPlane>() as GUISetPlane;a.enabled = true;}public void DisActive()   //让自身失活{Debug.Log("设置面板已经失活");GUISetPlane a = instance.gameObject.GetComponent<GUISetPlane>() as GUISetPlane;a.enabled = false ;}//-------------------------------------private void OnGUI(){swtich1 = GUI.Toggle(SetLable1, swtich1, "音效开关");swtich2 = GUI.Toggle(SetLable2, swtich2, "音乐开关");swtich3 = GUI.Toggle(SetLable3, swtich3, "音乐开关");if (GUI.Button(closeButPos, closeButton)){Debug.Log("已点击关闭窗口");DisActive();GuiExsi.instance.gameObject.GetComponent<GuiExsi>().enabled = true ;}}private void Awake(){instance = this;}
}
  • 开始界面主代码
//-------------------------------------
//—————————————————————————————————————
//___________项目:   GUI组件练习     
//___________功能:  开始界面    
//___________创建者:秩沅
//_____________________________________
//-------------------------------------public class GuiExsi : MonoBehaviour
{static public GuiExsi instance;//---------------------------public Rect RectLabel;public Rect RectButton1;public Rect RectButton2;public Rect RectButton3;public GUIContent guiContent;public GUIStyle guistyle;public GUIStyle button1;public GUIStyle button2;public GUIStyle button3;//---------------------------public void Active()      //让自身激活{Debug.Log("主面板已经激活");GuiExsi a =instance.gameObject.GetComponent<GuiExsi>() as GuiExsi;a.enabled = true ;}public void DisActive()   //让自身失活{Debug.Log("主面板已经失活");GuiExsi a = instance.gameObject.GetComponent<GuiExsi>() as GuiExsi;a.enabled = false;}private void OnGUI(){//------------开始游戏基本画面--------------GUI.Label(RectLabel , guiContent ,guistyle);if (GUI.Button(RectButton1, "开始游戏", button1)){SceneManager.LoadScene("simple1");               }GUI.Button(RectButton3, "退出游戏",button3);if(GUI.Button(RectButton2, "设置", button2)){Debug.Log("已点击设置");DisActive();GUISetPlane.instance.gameObject.GetComponent<GUISetPlane>().enabled = true ;}   }private void Awake(){instance = this;}
}

🎶(G)IMGUI基本控件—拖动条


在这里插入图片描述

练习操作

  • 在原有的基础上加入拖动条
    在这里插入图片描述
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//-------------------------------------
//—————————————————————————————————————
//___________项目: 单选框和拖动条的应用 
//___________功能: 音效设置面板    
//___________创建者:秩沅_______________
//_____________________________________
//-------------------------------------
public class GUISetPlane : MonoBehaviour
{//-----------------------------------static public  GUISetPlane instance;public Rect SetLable1, SetLable2;public Rect closeButPos;public GUIContent closeButton;private  bool swtich1 = true ;private  bool swtich2 = true ;//-----------------------------------float ling1 = 1f;float ling2 = 1f;public Rect roelPso1;public Rect roelPso2;public Rect texturePos;public Texture texture;//-----------------------------------public void Active()      //让自身激活{Debug.Log("设置面板已经激活");GUISetPlane a = instance.gameObject.GetComponent<GUISetPlane>() as GUISetPlane;a.enabled = true;}public void DisActive()   //让自身失活{Debug.Log("设置面板已经失活");GUISetPlane a = instance.gameObject.GetComponent<GUISetPlane>() as GUISetPlane;a.enabled = false ;}//-------------------------------------private void OnGUI(){GUI.DrawTexture(texturePos, texture);swtich1 = GUI.Toggle(SetLable1, swtich1, "音效开关");swtich2 = GUI.Toggle(SetLable2, swtich2, "音乐开关");ling1 = GUI.HorizontalSlider(roelPso1 , ling1, 1, 0);ling2 = GUI.HorizontalSlider(roelPso2 , ling2, 1, 0);if (GUI.Button(closeButPos, closeButton)){Debug.Log("已点击关闭窗口");DisActive();GuiExsi.instance.gameObject.GetComponent<GuiExsi>().enabled = true ;}}private void Awake(){instance = this;}
}

🎶(F)IMGUI基本控件—输入框


在这里插入图片描述

练习操作

  • 在之前的基础上
    弄一个登陆面板
    有用户名输入和密码输入
    有进入游戏和返回上一级按钮
    点击开始界面中的开始游戏后 进入登陆面板
    输入的 用户名为 admin 密码为8888才能切换场景
    在这里插入图片描述
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
//-------------------------------------
//—————————————————————————————————————
//___________项目:   输入框的和图片绘制组件的应用
//___________功能:  登录界面面板
//___________创建者:秩沅_______________
//_____________________________________
//-------------------------------------
public class RegisterIn : MonoBehaviour
{public   Rect fieldPos1;public   Rect fieldPos2;public   Rect texturePos;public   Rect buttonPos,buttonPos2;public   Rect lable1, lable2;public   Texture backGrounp;public   GUIContent content,content2;public   GUIStyle buttonStyle, buttonStyle2;string acount = "";string secret = "";static public RegisterIn instance;//-------------------------------------public void Active()      //让自身激活{ RegisterIn a = instance.gameObject.GetComponent<RegisterIn>() as RegisterIn;a.enabled = true;}public void DisActive()   //让自身失活{      RegisterIn a = instance.gameObject.GetComponent<RegisterIn>() as RegisterIn;a.enabled = false;}//-------------------------------------private void OnGUI(){GUI.DrawTexture(texturePos, backGrounp);acount = GUI.TextField(fieldPos1 , acount);secret = GUI.PasswordField(fieldPos2, secret, '*');GUI.Label (lable1  ,"用户名");GUI.Label (lable2  , "密码");//信息正确载入场景if ( GUI.Button(buttonPos, content, buttonStyle)){if( acount == "admin" && secret == "88888"){SceneManager.LoadScene("simple1");Debug.Log("登录成功");}          }//返回到主界面if (GUI.Button(buttonPos2, content2, buttonStyle2)){DisActive();GuiExsi.instance.gameObject.GetComponent<GuiExsi>().enabled = true;}}private void Awake(){instance = this;}
}

🎶(H)IMGUI基本控件—图片绘制


在这里插入图片描述
在这里插入图片描述


🎶(III)IMGUI——复合控件


在这里插入图片描述


🎶(J)IMGUI复合控件—工具栏(标签)


在这里插入图片描述
在这里插入图片描述

练习操作

  • 在登录进去的界面后,创建三个信息标签
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//-------------------------------------
//—————————————————————————————————————
//___________项目:  复合控件工具栏的应用    
//___________功能: 信息显示面板
//___________创建者:秩沅_______________
//_____________________________________
//-------------------------------------
public class Maincontent : MonoBehaviour
{//默认选择第一个表格int num = 0;    public Rect toolPos2 ;public GUIStyle messStyle;string[] mess = { "人物信息","装备信息","宠物信息"};private void OnGUI(){      //num =  GUI.Toolbar(toolPos1,num,mess);num = GUI.SelectionGrid(toolPos2, num, mess,1, messStyle);}}

🎶(K)IMGUI复合控件—分组和滚动视图


在这里插入图片描述
在这里插入图片描述

实践练习

  • 动态变化滚动视图的内容框长度
using System.Collections;
using System.Collections.Generic;
using System.Text;
using UnityEngine;
//-------------------------------------
//—————————————————————————————————————
//___________项目:  复合控件工具栏的应用    
//___________功能: 信息显示面板
//___________创建者:秩沅_______________
//_____________________________________
//-------------------------------------
public class Maincontent : MonoBehaviour
{int num = 0; //默认选择第一个表格public int viewNumber;public Rect toolPos2 ,showPos,contenPos ;public Vector2 scorllPos;public GUIStyle messStyle;string[] mess = { "人物信息","装备信息","宠物信息"};string[] messView = {"装备1", "装备2", "装备3", "装备4", "装备5" };private void OnGUI(){      //num =  GUI.Toolbar(toolPos1,num,mess);num = GUI.SelectionGrid(toolPos2, num, mess,1, messStyle);//动态变化内容框的长度——随着内容的数量而改变contenPos.height = viewNumber * 30;scorllPos = GUI.BeginScrollView(showPos, scorllPos, contenPos);for (int i = 0; i < viewNumber ; i++){GUI.Button(new Rect(0,i * 30, 50, 30),messView[i]);}GUI.EndScrollView();}}

🎶(L)IMGUI复合控件—窗口相关


  • ID相当于窗口唯一识别码
    在这里插入图片描述

实践练习

  • 将游戏退出

在这里插入图片描述


//-------------------------------------
//—————————————————————————————————————
//___________项目:       ______________
//___________功能: 退出确定窗口
//___________创建者:秩沅_______________
//_____________________________________
//-------------------------------------
public class ExitWindows : MonoBehaviour
{static public ExitWindows instance;public Rect windowPos;//---------------------------public void Active()      //让自身激活{Debug.Log("主面板已经激活");ExitWindows a = instance.gameObject.GetComponent<ExitWindows>() as ExitWindows;a.enabled = true;}public void DisActive()   //让自身失活{Debug.Log("主面板已经失活");ExitWindows a = instance.gameObject.GetComponent<ExitWindows>() as ExitWindows;a.enabled = false;}private void OnGUI(){GUI.ModalWindow(1, windowPos, (int id)=> WinFuction(1) , "提示");}public Rect pos1, pos2, pos3;public void WinFuction( int id){GUI.Label(pos1, "请再次确认");if(GUI.Button(pos2, "退出")){Application.Quit();}else if (GUI.Button(pos3, "取消")){DisActive();}}private void Awake(){instance = this;}
}

🎶(M)IMGUI综合—GuiSkin


在这里插入图片描述

  • 图片中备注来自唐老狮
    在这里插入图片描述

🎶(N)IMGUI综合—GUILayout


在这里插入图片描述


⭐相关文章⭐

⭐【2023unity游戏制作-mango的冒险】-6.关卡设计

⭐【2023unity游戏制作-mango的冒险】-5.攻击系统的简单实现

⭐【2023unity游戏制作-mango的冒险】-4.场景二的镜头和法球特效跟随

⭐【2023unity游戏制作-mango的冒险】-3.基础动作和动画API实现

⭐【2023unity游戏制作-mango的冒险】-2.始画面API制作

⭐【2023unity游戏制作-mango的冒险】-1.场景搭建

⭐“狂飙”游戏制作—游戏分类图鉴(网易游学)

⭐本站最全-unity常用API大全(万字详解),不信你不收藏



你们的点赞👍 收藏⭐ 留言📝 关注✅是我持续创作,输出优质内容的最大动力!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/557221.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

这个简单的生活方式,为你带来满满的幸福感

在今天文章的开头&#xff0c;我想请你思考一个问题&#xff1a;影响幸福感的最大因素是什么&#xff1f; 不妨先想一想&#xff0c;再往下拉&#xff0c;继续阅读。 可能不少朋友的回答&#xff0c;会是财富、事业、理想、生活环境、社会地位…… 这些因素当然对幸福感都非常重…

【OpenGL手册19】几何着色器

目录 一、说明 二、渲染管线的逻辑 三、几何着色器 四、使用几何着色器 五、造几个房子 六、几何着色器渲染爆破物体 一、说明 如果说用顶点和片段着色器干了什么&#xff0c;其实不多。加入几何着色器&#xff0c;能够加大渲染能力&#xff0c;简化数据结构&#xff0c;…

解读“CFMS中国闪存市场峰会”存储技术看点-1

昨天CFMS中国闪存市场峰会在深圳举行&#xff0c;小编本来计划前往现场参加&#xff0c;但由于有事冲突未能如期前往&#xff0c;非常遗憾&#xff01; 本次峰会的主题是“存储周期激发潜能”。在闪存市场的供需关系逐渐恢复正常的阶段&#xff0c;闪存市场如何发展变化&#x…

【leetcode】67.二进制求和

前言&#xff1a;剑指offer刷题系列 问题&#xff1a; 给你两个二进制字符串 a 和 b &#xff0c;以二进制字符串的形式返回它们的和。 示例&#xff1a; 输入&#xff1a;a "1010", b "1011" 输出&#xff1a;"10101"思路1&#xff1a; …

【五 (3)统计学知识-概型与概率分布python代码实现】

目录 文章导航一、概率基础与性质二、概型模型1、古典概型2、几何概型3、伯努利试验概型 三、组合和排序1、组合2、排序 四、概率分布1、离散型分布①伯努利分布②二项分布③泊松分布 2、连续型分布①均匀分布②指数分布③正态分布/高斯分布④对数正态分布⑥幂律分布⑦帕累托分…

ECharts5 概念篇2

数据转换 数据转换基础使用 在 echarts 中&#xff0c;数据转换是依托于数据集&#xff08;dataset&#xff09;来实现的. 我们可以设置 dataset.transform 来表示&#xff0c;此 dataset 的数据&#xff0c;来自于此 transform 的结果。下面是上述例子的效果&#xff0c;三个饼…

C语言例:设 int a,b; 则表达式(a=2,b=5,a++,b++,a+b) 的值

代码如下&#xff1a; #include<stdio.h> int main(void) {int a,b,m; m(a2,b5,a,b,ab);printf("(a2,b5,a,b,ab) %d\n",m);//a2,b5,a3,b6,ab9return 0; } 结果如下&#xff1a;

【Linux进程的状态】

目录 看Linux源码中的说法 如何查看进程状态&#xff1f; 各个状态的关系 僵尸进程 举个栗子 现象 僵尸进程的危害 孤儿进程 举个栗子 现象 进程的优先级 基本概念 为什么要有进程优先级&#xff1f; 查看系统进程 进程的大致属性 进程优先级vs进程的权限 Linu…

odoo扩展导出pdf功能

1. 说明: odoo原生导出功能扩展导出pdf文件功能, 如有额外需求请联系博主 2. 版本说明: odoo版本: odoo15 其他odoo版本未进行测试,如有需要自行测试 3. 地址: 该补丁代码放在github仓库, 地址: https://github.com/YSL-Alpaca/odoo_export_pdf 4. 改补丁依赖于第三方软件wkh…

阿里云优惠券、代金券、折扣券领取方法及使用教程

随着云计算技术的普及和发展&#xff0c;越来越多的企业和个人开始选择使用云服务。阿里云作为国内领先的云计算服务提供商&#xff0c;为广大用户提供了丰富多样的云产品和服务。为了吸引用户上云&#xff0c;阿里云经常推出各种优惠活动&#xff0c;其中就包括阿里云优惠券。…

进程创建,程序加载运行,以及进程终止,什么是僵尸进程,什么是孤儿进程

进程控制 创建进程&#xff0c;撤销进程&#xff0c;实现进程转换&#xff08;必须一气呵成&#xff0c;使用原语&#xff09; 原语不被中断是因为有关中断指令 创建进程 撤销进程 进程创建fork fork&#xff08;&#xff09;函数会创建一个子进程&#xff0c;子进程会返…

Redis中的过期键删除策略

过期键删除策略 概述 数据库键的过期时间都保存在过期字典中&#xff0c;并且知道根据过期时间去判断一个键是否过期,剩下的问题是&#xff1a;如果一个键过期了&#xff0c;那么它什么时候会被删除呢? 这个问题有三种可能的答案&#xff0c;它们分别代表了三种不同的删除策…