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

这篇具有很好参考价值的文章主要介绍了【unity之UI专题】GUI(IMGUI)详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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


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

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

👨‍💻 本文由 秩沅 原创

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

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


⭐IMGUI原理⭐



🎶前言

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

🅰️ 题单来自:唐老狮


🎶(A)IMGUI工作原理


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

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


🎶(B)IMGUI——基本控件


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

  • GUIContent -----可以是以下三者的结合
    【unity之UI专题】GUI(IMGUI)详解
    tooltip–鼠标选中后课得到该信息(作为隐藏信息使用)
  • GUIStyle ———全部综合
    1.Nomal ——正常情况
    2.Hover——鼠标停留后
    3.Active——按下之后

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


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


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


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

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

练习操作

  • 用GUI制作一个游戏开始界面,上面有开始游戏,退出游戏,设置等等按钮选项,点击开始游戏可以切换到游戏场景
    【unity之UI专题】GUI(IMGUI)详解
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基本控件—多选框和单选框


【unity之UI专题】GUI(IMGUI)详解
【unity之UI专题】GUI(IMGUI)详解
【unity之UI专题】GUI(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基本控件—拖动条


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

练习操作

  • 在原有的基础上加入拖动条
    【unity之UI专题】GUI(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基本控件—输入框


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

练习操作

  • 在之前的基础上
    弄一个登陆面板
    有用户名输入和密码输入
    有进入游戏和返回上一级按钮
    点击开始界面中的开始游戏后 进入登陆面板
    输入的 用户名为 admin 密码为8888才能切换场景
    【unity之UI专题】GUI(IMGUI)详解
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基本控件—图片绘制


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


🎶(III)IMGUI——复合控件


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


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


【unity之UI专题】GUI(IMGUI)详解
【unity之UI专题】GUI(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复合控件—分组和滚动视图


【unity之UI专题】GUI(IMGUI)详解
【unity之UI专题】GUI(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相当于窗口唯一识别码
    【unity之UI专题】GUI(IMGUI)详解

实践练习

  • 将游戏退出

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


//-------------------------------------
//—————————————————————————————————————
//___________项目:       ______________
//___________功能: 退出确定窗口
//___________创建者:秩沅_______________
//_____________________________________
//-------------------------------------
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


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

  • 图片中备注来自唐老狮
    【unity之UI专题】GUI(IMGUI)详解

🎶(N)IMGUI综合—GUILayout


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


⭐相关文章⭐

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

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

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

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

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

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

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

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



你们的点赞👍 收藏⭐ 留言📝 关注✅是我持续创作,输出优质内容的最大动力!文章来源地址https://www.toymoban.com/news/detail-498338.html

到了这里,关于【unity之UI专题】GUI(IMGUI)详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Unity使用GUI封装一个UI系统

    Untiy中设计UI不会使用GUI,因为它必须要运行代码才可以看出UI的布局结果,而且GUI不支持屏幕分辨率自适应,所以一般会使用UGUI等设计,但是为了搞清楚高级UI的原理,通过GUI去设计一个类似于UGUI的工具是个很好的学习方法。所以本文属于是脱裤子放屁,但是只有脱下裤子把

    2024年02月04日
    浏览(45)
  • Unity3D学习之UI系统——GUI

    设置Screen Type和Center Type 最终实现效果: 3.1.1 GUI 共同点 3.1.2 文本控件 可以传图片 在unity中拖入图片 可以把Rect 设置成public 的变量,在控件中设置 文字和图片均显示 toolTip 获取当前选中的空间的附带信息 GUI Style 控制样式 3.1.3 按钮控件 必须要按下并抬起才算被点击 长按按钮

    2024年01月22日
    浏览(71)
  • 【unity之IMGUI】所以你还想在百度上搜IMGUI的底层原理是什么吗?

    👨‍💻个人主页 :@元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏 : unity实战入门 IMGUI不会用作游戏的UI开发 会用到游戏的编辑器开发 🅰️ 题单来自:唐老狮 GUIContent -----可以是以下三者的结合 tooltip–鼠

    2024年02月08日
    浏览(51)
  • Unity插件开发笔记IMGUI-持续记录中

    插件特点,无需运行可进行编译。 1.MenuItem菜单项插件 (0)选项出现位置:编辑器上方菜单栏 。 (1)脚本放置的目录:Assets/Editor(该目录不会被打到包里)。 (2)创建如下方代码:需要命名空间UnityEditor;可自定义入口路径和自定义快捷键;MenuItem对应的自定义方法必须

    2024年01月16日
    浏览(46)
  • 【unity之IMGUI实践】游戏玩法逻辑实现【四】

    👨‍💻个人主页 :@元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏 : unityUI专题篇 🅰️ Target Texture 行为渲染 —————————————— ___________________________ 😶‍🌫️ 步骤 : 1.靠近武器,碰撞检测

    2024年02月16日
    浏览(57)
  • 【unity之IMGUI实践】敌方逻辑封装实现【六】

    👨‍💻个人主页 :@元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏 : unityUI专题篇 🅰️ 😶‍🌫️:步骤实现 1.炮台的行为逻辑封装:旋转,触发检测,发射炮弹及特效 2.检测玩家后自动瞄准攻击 3.玩家扣

    2024年02月15日
    浏览(54)
  • 【unity之IMGUI实践】游戏结束流程封装实现【七】

    👨‍💻个人主页 :@元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏 : unityUI专题篇 🅰️ 😶‍🌫️:步骤实现 1.坐标三个转化 2.GUI的原点和屏幕的原点 3.结构体的特点回顾——涉及Rect_结构体类型 4.血条的

    2024年02月14日
    浏览(46)
  • 【unity之IMGUI实践】单例模式管理面板对象【一】

    👨‍💻个人主页 :@元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏 : unityUI专题篇 🅰️ API:简单的旋转 解析: 1.采用单例模式,原因: 单例模式无法被纂改基类,适合当管理者 2.基类提取了子类所有的共

    2024年02月15日
    浏览(45)
  • 【unity之IMGUI实践】单例模式管理数据存储【二】

    👨‍💻个人主页 :@元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏 : unityUI专题篇 🅰️ 😶‍🌫️:步骤实现 1.首先将音乐数据封装在类中,不采用单例模式 2. 而后封装一个游戏数据类为单例模式:功能

    2024年02月16日
    浏览(47)
  • 【unity之IMGUI实践】抽象父类继承实现【三】

    👨‍💻个人主页 :@元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏 : unityUI专题篇 🅰️ 总效果图 😶‍🌫️:步骤 1.创建游戏面板,进行组件管控 2.创建提示面板进行退出确定 3.同步面板直接的显隐和复

    2024年02月16日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包