【Unity 3D】图形界面GUI的讲解及在C#中实现用户登录界面的实战(附源码)

简介: 【Unity 3D】图形界面GUI的讲解及在C#中实现用户登录界面的实战(附源码)

需要源码请点赞关注收藏后评论区留言并且私信~~~

在游戏开发过程中,游戏界面占据了非常重要的地位,玩家启动游戏的时候,首先看到的就是游戏的UI,其中包含图片、按钮和高级控件等等,UGUI和GUI是Unity 3D中最常用的两个UI系统。

一、GUI简介

GUI是Graphical User Interface的缩写,Unity的图形界面系统能容易的快速创建出各种交互界面。游戏界面是游戏作品中不可或缺的部分,它可以为游戏提供导航,也可以为游戏内容提供重要的信息,同时是美化游戏的一种重要手段,Unity 3D内置了一套完整的GUI系统,提供了从布局、空间到皮肤的一整套GUI解决方案,可以做出各种风格和样式的GUI界面,目前Unity 3D没有提供内置的GUI可视化编辑器,因此GUI界面的制作需要全部通过编写脚本代码实现

写GUI脚本,必须注意两个重要特性

1:GUI脚本控件必须定义在脚本文件的OnGUI事件函数中

2:GUI每一帧都会调用

二、常用基本控件使用

GUI基本控件及其含义如下

Label 绘制文本和图片

TextField 绘制一个单行文本输入框

TextArea 绘制一个多行文本输入框

PasswordField 绘制一个密码输入框

Button 绘制一个按钮

ToolBar 创建工具栏

ToolTip 用于显示提示信息

Toggle 绘制一个开关按钮

Box 绘制一个图形框

ScrollView 绘制一个滚动视图组件

Color 渲染GUI颜色

Slider 包含水平和垂直滚动条

DragWindow 用于实现屏幕内的可拖曳窗口

Window 窗口组件 在窗口中可以添加任意组件

下面使用GUI基本控件实现一个建议的用户登录界面

效果如下 点击上方按钮可以进行颜色的切换

部分代码如下

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Test_16_8 : MonoBehaviour
{
    private string userName = "";
    private string password = "";
    private string info = "";
    private bool manSex = false;
    private bool womanSex = false;
    Vector2 scrollPosition = Vector2.zero;
    int toolbarInt = 0;
    string[] toolbarStrings = { "红色", "绿色", "蓝色" };
    void OnGUI()
    {
        //Box组件 下面的内容放到Box组件里面
        GUI.Box(new Rect(290, 260, 300, 300), "");
        //Toolbar组件创建工具栏
        toolbarInt = GUI.Toolbar(new Rect(310, 270, 250, 30), toolbarInt, toolbarStrings);
        switch (toolbarInt)
        {
            case 0:
                GUI.color = Color.red;
                break;
            case 1:
                GUI.color = Color.green;
                break;
            case 2:
                GUI.color = Color.blue;
                break;
            default:
                break;
        }
        //Label组件绘制文本
        GUI.Label(new Rect(310, 310, 70, 20), new GUIContent("用户名:", "Label组件"));
        //TextArea组件绘制输入框
        userName = GUI.TextField(new Rect(380, 310, 200, 20), userName);
        GUI.Label(new Rect(310, 330, 70, 20), new GUIContent("密码:", "Label组件"));
        //PasswordField组件绘制密码输入框
        password = GUI.PasswordField(new Rect(380, 330, 200, 20), password, '*');
        //Toggle组件绘制开关按钮
        manSex = GUI.Toggle(new Rect(310, 370, 50, 20), manSex, "男");
        womanSex = GUI.Toggle(new Rect(350, 370, 50, 20), womanSex, "女");
        GUI.Label(new Rect(310, 420, 70, 20), new GUIContent("个人简介:", "Label组件"));
        //ScrollView组件
        scrollPosition = GUI.BeginScrollView(new Rect(380, 420, 200, 100), scrollPosition, new Rect(0, 0, 200, 300));
        info = GUI.TextArea(new Rect(0, 0, 200, 300), info);
        GUI.EndScrollView();
        //Button绘制按钮
        GUI.Button(new Rect(400, 530, 50, 20), new GUIContent("保存", "Button组件"));
        //ToolTip用户显示提示信息
        GUI.Label(new Rect(480, 530, 200, 40), GUI.tooltip);
        //Window组件和DragWindow组件
        Rect windowRect0 = new Rect(300, 600, 120, 50);
        Rect windowRectwRect1, DoMyWindow, "Green Window");
    }
    private void DoMyWindow(int id)
    {
        if (GUI.Button(new Rect(10, 20, 100, 20), "可拖动窗口"))
        {
            Debug.Log("color" + GUI.color);
        }
        GUI.DragWindow(new Rect(0, 0, 10000, 10000));
    }
}

三、GUILayout自动布局

使用GUILayout自动布局,让每个组件的宽度和高度按照一些字体的大小进行统一计算,采取靠左对齐或者靠右对齐,一个空间占据一行的原则进行布局

下面使用默认Rect定位方式排列Label

代码如下

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Test_16_9 : MonoBehaviour
{
    void OnGUI()
    {
        GUI.Label(new Rect(0, 0, 70, 20), "你好");
        GUI.Label(new Rect(0, 20, 70, 20), "世界");
        GUI.Label(new Rect(0, 40, 70, 20), "Hello");
        GUI.Label(new Rect(0, 60, 70, 20), "World");
    }
}

这时输出文字都是靠左对齐 不够美观

下面使用GUILayout进行自动布局

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Test_16_10 : MonoBehaviour
{
    void OnGUI()
    {
        GUILayout.BeginArea(new Rect(400, 200, 300, 400));
        GUILayout.Label("你好");
        GUILayout.Label("世界");
        GUILayout.Label("Hello");
        GUILayout.Label("World");
        GUILayout.EndArea();
    }
}

这时输出文字会居中对齐 更加美观

创作不易 觉得有帮助请点赞关注收藏~~~

相关文章
|
4月前
|
存储 SQL 开发框架
c# erp源码(简单进销存)
c# erp源码(简单进销存)
160 1
|
10月前
|
数据采集 JavaScript C#
C#图像爬虫实战:从Walmart网站下载图片
C#图像爬虫实战:从Walmart网站下载图片
|
5月前
|
图形学
Unity 获取鼠标位置下的UGUI或3D物体
本文总结了两种检测方法,分别用于UGUI和3D物体的检测。第一种方法`GetOverUIobj`专门用于检测鼠标悬停的UGUI元素,通过`GraphicRaycaster`实现。第二种方法`GetOverWordGameObject`则同时适用于UI和3D物体检测,利用`PhysicsRaycaster`进行射线检测。两者均返回悬停对象或null。
|
5月前
|
前端开发 图形学
unity UGUI跟随3D物体的坐标转换
在 Unity 中实现 UGUI 元素跟随 3D 物体,关键是将 3D 物体的世界坐标转换为屏幕或画布坐标。通过 Camera.WorldToScreenPoint 方法,可将 3D 物体位置映射到屏幕上,再更新 UGUI 元素的位置。代码示例展示了如何使用该方法,使 UGUI 图像跟随 3D 模型,并提供文字显示、图像和线条的显示/隐藏功能。
|
11月前
|
数据采集 存储 C#
C# 爬虫技术:京东视频内容抓取的实战案例分析
C# 爬虫技术:京东视频内容抓取的实战案例分析
|
7月前
|
开发框架 搜索推荐 算法
一个包含了 50+ C#/.NET编程技巧实战练习教程
一个包含了 50+ C#/.NET编程技巧实战练习教程
221 18
|
9月前
|
开发框架 NoSQL MongoDB
C#/.NET/.NET Core开发实战教程集合
C#/.NET/.NET Core开发实战教程集合
177 1
|
10月前
|
设计模式 C# 开发者
C#设计模式入门实战教程
C#设计模式入门实战教程
102 3
|
11月前
|
开发者 图形学 开发工具
Unity编辑器神级扩展攻略:从批量操作到定制Inspector界面,手把手教你编写高效开发工具,解锁编辑器隐藏潜能
【8月更文挑战第31天】Unity是一款强大的游戏开发引擎,支持多平台发布与高度可定制的编辑器环境。通过自定义编辑器工具,开发者能显著提升工作效率。本文介绍如何使用C#脚本扩展Unity编辑器功能,包括批量调整游戏对象位置、创建自定义Inspector界面及项目统计窗口等实用工具,并提供具体示例代码。理解并应用这些技巧,可大幅优化开发流程,提高生产力。
867 1
|
11月前
|
开发者 图形学 Java
揭秘Unity物理引擎核心技术:从刚体动力学到关节连接,全方位教你如何在虚拟世界中重现真实物理现象——含实战代码示例与详细解析
【8月更文挑战第31天】Unity物理引擎对于游戏开发至关重要,它能够模拟真实的物理效果,如刚体运动、碰撞检测及关节连接等。通过Rigidbody和Collider组件,开发者可以轻松实现物体间的互动与碰撞。本文通过具体代码示例介绍了如何使用Unity物理引擎实现物体运动、施加力、使用关节连接以及模拟弹簧效果等功能,帮助开发者提升游戏的真实感与沉浸感。
517 1

热门文章

最新文章