【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();
    }
}

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

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

相关文章
|
18天前
|
数据采集 存储 C#
C# 爬虫技术:京东视频内容抓取的实战案例分析
C# 爬虫技术:京东视频内容抓取的实战案例分析
|
9天前
|
设计模式 C# 开发者
C#设计模式入门实战教程
C#设计模式入门实战教程
|
16天前
|
开发者 图形学 开发工具
Unity编辑器神级扩展攻略:从批量操作到定制Inspector界面,手把手教你编写高效开发工具,解锁编辑器隐藏潜能
【8月更文挑战第31天】Unity是一款强大的游戏开发引擎,支持多平台发布与高度可定制的编辑器环境。通过自定义编辑器工具,开发者能显著提升工作效率。本文介绍如何使用C#脚本扩展Unity编辑器功能,包括批量调整游戏对象位置、创建自定义Inspector界面及项目统计窗口等实用工具,并提供具体示例代码。理解并应用这些技巧,可大幅优化开发流程,提高生产力。
49 1
|
16天前
|
开发者 图形学 Java
揭秘Unity物理引擎核心技术:从刚体动力学到关节连接,全方位教你如何在虚拟世界中重现真实物理现象——含实战代码示例与详细解析
【8月更文挑战第31天】Unity物理引擎对于游戏开发至关重要,它能够模拟真实的物理效果,如刚体运动、碰撞检测及关节连接等。通过Rigidbody和Collider组件,开发者可以轻松实现物体间的互动与碰撞。本文通过具体代码示例介绍了如何使用Unity物理引擎实现物体运动、施加力、使用关节连接以及模拟弹簧效果等功能,帮助开发者提升游戏的真实感与沉浸感。
31 1
|
2月前
|
存储 Oracle 关系型数据库
PACS源码,C#语言数字医学影像系统成品源码
**数字医学影像系统(RIS/PACS)**采用C#开发,基于C/S架构,配Oracle数据库,具备自主版权,适用于项目实施。系统包含分诊、超声、放射、内镜、病理等工作站,支持基本信息维护、报表查询和系统维护。功能亮点有:WorkList管理、影像采集传输、存储检索、图像处理、多序列浏览、流程控制、报告录入与审核、支持多种影像设备及高级影像处理。RIS与PACS数据库同步,并集成HIS、电子病历等系统接口。全面遵循DICOM3.0标准。
PACS源码,C#语言数字医学影像系统成品源码
|
16天前
|
图形学 C++ C#
Unity插件开发全攻略:从零起步教你用C++扩展游戏功能,解锁Unity新玩法的详细步骤与实战技巧大公开
【8月更文挑战第31天】Unity 是一款功能强大的游戏开发引擎,支持多平台发布并拥有丰富的插件生态系统。本文介绍 Unity 插件开发基础,帮助读者从零开始编写自定义插件以扩展其功能。插件通常用 C++ 编写,通过 Mono C# 运行时调用,需在不同平台上编译。文中详细讲解了开发环境搭建、简单插件编写及在 Unity 中调用的方法,包括创建 C# 封装脚本和处理跨平台问题,助力开发者提升游戏开发效率。
28 0
|
16天前
|
开发者 图形学 API
从零起步,深度揭秘:运用Unity引擎及网络编程技术,一步步搭建属于你的实时多人在线对战游戏平台——详尽指南与实战代码解析,带你轻松掌握网络化游戏开发的核心要领与最佳实践路径
【8月更文挑战第31天】构建实时多人对战平台是技术与创意的结合。本文使用成熟的Unity游戏开发引擎,从零开始指导读者搭建简单的实时对战平台。内容涵盖网络架构设计、Unity网络API应用及客户端与服务器通信。首先,创建新项目并选择适合多人游戏的模板,使用推荐的网络传输层。接着,定义基本玩法,如2D多人射击游戏,创建角色预制件并添加Rigidbody2D组件。然后,引入网络身份组件以同步对象状态。通过示例代码展示玩家控制逻辑,包括移动和发射子弹功能。最后,设置服务器端逻辑,处理客户端连接和断开。本文帮助读者掌握构建Unity多人对战平台的核心知识,为进一步开发打下基础。
36 0
|
16天前
|
开发者 图形学 C#
揭秘游戏沉浸感的秘密武器:深度解析Unity中的音频设计技巧,从背景音乐到动态音效,全面提升你的游戏氛围艺术——附实战代码示例与应用场景指导
【8月更文挑战第31天】音频设计在游戏开发中至关重要,不仅能增强沉浸感,还能传递信息,构建氛围。Unity作为跨平台游戏引擎,提供了丰富的音频处理功能,助力开发者轻松实现复杂音效。本文将探讨如何利用Unity的音频设计提升游戏氛围,并通过具体示例代码展示实现过程。例如,在恐怖游戏中,阴森的背景音乐和突然的脚步声能增加紧张感;在休闲游戏中,轻快的旋律则让玩家感到愉悦。
30 0
|
16天前
|
Android开发 iOS开发 C#
Xamarin.Forms:从零开始的快速入门指南——打造你的首个跨平台移动应用,轻松学会用C#和XAML构建iOS与Android通用界面的每一个步骤
【8月更文挑战第31天】Xamarin.Forms 是一个强大的框架,让开发者通过单一共享代码库构建跨平台移动应用,支持 iOS、Android 和 Windows。使用 C# 和 XAML,它简化了多平台开发流程并保持一致的用户体验。本指南通过创建一个简单的 “HelloXamarin” 应用演示了 Xamarin.Forms 的基本功能和工作原理。
26 0
|
16天前
|
数据安全/隐私保护 C# UED
利用 Xamarin 开展企业级移动应用开发:从用户登录到客户管理,全面演示C#与Xamarin.Forms构建跨平台CRM应用的实战技巧与代码示例
【8月更文挑战第31天】利用 Xamarin 进行企业级移动应用开发能显著提升效率并确保高质量和高性能。Xamarin 的跨平台特性使得开发者可以通过单一的 C# 代码库构建 iOS、Android 和 Windows 应用,帮助企业快速推出产品并保持一致的用户体验。本文通过一个简单的 CRM 示例应用演示 Xamarin 的使用方法,并提供了具体的代码示例。该应用包括用户登录、客户列表显示和添加新客户等功能。此外,还介绍了如何增强应用的安全性、数据持久化、性能优化及可扩展性,从而构建出功能全面且体验良好的移动应用。
24 0