Unity学习记录——UI设计

这篇具有很好参考价值的文章主要介绍了Unity学习记录——UI设计。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Unity学习记录——UI设计

前言

​ 本文是中山大学软件工程学院2020级3d游戏编程与设计的作业8

编程题:血条制作

1.相关资源

​ 本次项目之中的人物模型来自Starter Assets - Third Person Character Controller | 必备工具 | Unity Asset Store

​ 此处使用了以下路径的PlayerArmature预制,这个预制人物模型可以进行行走奔跑跳跃等动作,很适合血条的演示

unity设计ui界面,unity,学习,ui

​ 由于这个人物预制件之中挂载了一些实现动作的代码,其中实现了隐藏鼠标光标,会影响后续的演示,所以需要找到以下路径的代码,打开它

unity设计ui界面,unity,学习,ui

注释掉函数SetCursorState()中的代码,以方便后续血条UI之中点击按钮

private void SetCursorState(bool newState)
{
	// Cursor.lockState = newState ? CursorLockMode.Locked : CursorLockMode.None;
}

2.基本介绍

​ 以下介绍(中英双语)均来自unity官方手册,阐述了IMGUI与UGUI的大致内容。

​ 此处给出,目的是为了快速定位并了解本次课程以及作业的主要知识内容

(1)IMGUI

​ The “Immediate Mode” GUI system (also known as IMGUI) is an entirely separate feature to Unity’s main GameObject-based UI System. IMGUI is a code-driven GUI system, and is mainly intended as a tool for programmers. It is driven by calls to the OnGUI function on any script which implements it.

​ “即时模式”GUI 系统(也称为 IMGUI)是一个完全独立的功能系统,不同于 Unity 基于游戏对象的主 UI 系统。IMGUI 是一个代码驱动的 GUI 系统,主要用作程序员的工具。为了驱动该系统,需在实现脚本上调用 OnGUI 函数。

(2)UGUI

​ Unity UI is a set of tools for developing user interfaces for games and applications. It is a GameObject-based UI system that uses Components and the Game View to arrange, position, and style user interfaces.

​ Unity UI是一组用于开发游戏和应用程序用户界面的工具。它是一个基于GameObject的UI系统,可使用组件和 Game 视图来排列和定位用户界面并设置其样式

3.题目要求

血条 (Health Bar) 的预制设计。具体要求如下:

  • 分别使用 IMGUI 和 UGUI 实现
  • 使用 UGUI,血条是游戏对象的一个子元素,任何时候需要面对主摄像机
  • 分析两种实现的优缺点
  • 给出预制的使用方法

4.操作与代码详解

(1)IMGUI

​ 较为简单。血条为水平滚动条,通过按钮绑定加血扣血的函数,线性插值实现血条的平滑变化。

​ 部分API调用:

  • 水平滚动条:GUI-HorizontalScrollbar - Unity 脚本 API
  • 线性插值实:Mathf-Lerp - Unity 脚本 API

代码如下:

public class Blood_IMGUI : MonoBehaviour
{
    public float now = 10f;         //现在的血量
    private float target = 10f;     //将要达到的目标血量
    private Rect blood_area = new Rect(20, 20, 200, 50);        //血条所处位置
    private Rect up_area = new Rect(20, 50, 40, 20);            //加血按钮所处位置
    private Rect down_area = new Rect(180, 50, 40, 20);         //扣血按钮所处位置
    // 加血函数
    public void blood_up(float num)
    {
        target = target + num > 10f ? 10f : target + num;
    }
    //扣血函数
    public void blood_down(float num)
    {
        target = target - num < 0f ? 0f : target - num;
    }

    private void OnGUI()
    {
        if (GUI.Button(up_area, " + "))
            blood_up(1);
        if (GUI.Button(down_area, " - "))
            blood_down(1);
        // 线性插值
        now = Mathf.Lerp(now, target, 0.1f);
        // 创建水平滚动条,此处即血条
        GUI.HorizontalScrollbar(blood_area, 0f, now, 0f, 10f);
    }
}

​ 最终效果如下:

unity设计ui界面,unity,学习,ui

(2)UGUI
操作

在Scene之中右键新建一个Plane作为地面(这里我顺便做了平台的下四面围墙),再将之前所说的人物预制件PlayerArmature拖入其中

unity设计ui界面,unity,学习,ui

右键PlayerArmature,选择UI,Canvas,新建一个Canvas

unity设计ui界面,unity,学习,ui

​ 修改Canvas的部分属性

​ 重点:将Canvas的Render Mode改为World Space,其余属性即为调整Canvas的大小(Width,Height)以及缩放(Scale),旋转(Rotation)

unity设计ui界面,unity,学习,ui

​ 右键Canvas,选择UI,Slide,新建一个Slide

unity设计ui界面,unity,学习,ui

​ 此时可以看到血条的雏形,如下:

unity设计ui界面,unity,学习,ui

unity设计ui界面,unity,学习,ui

​ 为了进一步让血条成型,需要进行进一步的操作,如下:

  1. 禁用Handle Slide Area

unity设计ui界面,unity,学习,ui

​ 此时可以发现:血条上的圆球消失

unity设计ui界面,unity,学习,ui

  1. 修改其他部件(包括BackGround,Fill Area,Fill)的Rect Transform属性,同时将Fill中img控件的color修改为血条的颜色,此处我选择了红色

unity设计ui界面,unity,学习,ui

unity设计ui界面,unity,学习,ui

unity设计ui界面,unity,学习,ui

​ 此时拖动Slide的Value属性,就可以看到血条的平滑变化

unity设计ui界面,unity,学习,ui

​ 至此血条的制作基本完成,为了演示血条的变化,我再在CanVas上添加了两个button子类,来控制血条的增加减少

​ 添加button之后仍旧需要修改Rect Transform中对应的属性,如下

unity设计ui界面,unity,学习,ui

​ button中的文本可以通过button中的子对象text修改,此处改为 ‘+’ ‘-’ 号就可以

​ 最终效果如下图所示:

unity设计ui界面,unity,学习,ui

代码

​ 编写加血扣血的按钮事件代码,如下:

public class Blood_UGUI : MonoBehaviour
{
    private float now = 10f;        //现在的血量
    private float target = 10f;     //将要达到的目标血量
    public Slider blood;            //Slider,即血条
    GameObject up_button, down_button;  //控制加血扣血的两个按钮
    private void Start()
    {
        // 绑定按钮
        up_button = GameObject.Find("Button_up");
        Button a = up_button.GetComponent<Button>();
        down_button = GameObject.Find("Button_down");
        Button b = down_button.GetComponent<Button>();
        a.onClick.AddListener(delegate ()
        {
            this.OnClick(up_button);
        });
        b.onClick.AddListener(delegate ()
        {
            this.OnClick(down_button);
        });
    }
    // 按钮点击事件
    private void OnClick(GameObject sender)
    {
        if (sender.name == "Button_up")
            blood_up();
        if (sender.name == "Button_down")
            blood_down();
    }
    // 加血函数
    public void blood_up()
    {
        target = target - 1f < 0f ? 0f : target - 1f;
    }
    // 扣血函数
    public void blood_down()
    {
        target = target + 1f > 10f ? 10f : target + 1f;
    }

    void Update()
    {
        // 线性插值
        now = Mathf.Lerp(now, target, 0.1f);
        // 更新血量,此处为sliper的value
        blood.value = now;
        // 设置血条一直朝向摄像机
        transform.rotation = Quaternion.LookRotation(Vector3.forward);
    }
}

​ 最终得到的效果如下:

unity设计ui界面,unity,学习,ui

5.分析

​ 两种UI的优缺点分析:

IMGUI

​ IMGUI是一个基于事件的,代码驱动GUI系统。

​ 可知,IMGUI显然更加符合程序员的逻辑。即可以通过代码在页面上创建各种功能GUI,通过IMGUI,无需创建游戏对象,手动定位这些对象并编写一个处理对象功能的脚本,只需几行代码即可立即执行所有操作。对于程序员来说,这显然是非常灵活,易于使用的。

​ 同时在IMGUI之中,每一帧的UI都会被重新绘制。由此,当页面上的UI组件过多时,IMGUI的性能效率将会大打折扣,同时,IMGUI的调试工作也会更加困难。这也是unity官方不推荐将 IMGUI 用于游戏内运行时UI的原因。

​ 通过此特性,unity官方给出了IMGUI的用途如下:

即时模式 GUI 系统常用于:

  • 创建游戏内调试显示和工具。

  • 为脚本组件创建自定义检视面板。

  • 创建新的编辑器窗口和工具以扩展 Unity 本身。

from 即时模式 GUI (IMGUI) - Unity 手册

UGUI

​ UGUI是一个基于GameObject的UI系统。

​ 可知,UGUI通过使用Canvas来组织和渲染UI元素。由此,UGUI不仅仅可以使用层级结构来组织 UI 元素,并且可以使用多种布局方式来自动调整 UI 元素的位置和大小。所以,简单的开发方式和所见即所得的性质,使得UGUI成为更加易于没有编程的设计师入手的开发模式。

​ 同时,在面对创建复杂的UI时,UGUI的层级结构可能会变得过于复杂,难以维护。

演示

​ 演示视频已经上传至B站UI系统——血条_哔哩哔哩_bilibili

代码位置

​ 代码以及文档均已经上传至hw8· XiaoChen04_3/3D_Computer_Game_Programming - gitee文章来源地址https://www.toymoban.com/news/detail-759788.html

经上传至B站UI系统——血条_哔哩哔哩_bilibili

代码位置

​ 代码以及文档均已经上传至hw8· XiaoChen04_3/3D_Computer_Game_Programming - gitee

到了这里,关于Unity学习记录——UI设计的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 基于unity+c#的随机点名系统(简单UI界面+列表+数组)

    目录 一、功能界面显示 二、UI 1、视频的使用 (1)渲染纹理 (2) 视频铺全屏 (3)视频的调用 2、 下拉文本框的使用(旧版) 3、输入文本框的使用(旧版) 4、更新Test文本和下拉文本框的内容 三、保存之前的记录 1、PlayerPrefs (1)保存数据: (2)读取数据: (3)删除

    2024年04月27日
    浏览(42)
  • 【Unity之UI编程】编写一个面板交互界面需要注意的细节

    👨‍💻个人主页 :@元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏 :Unity基础实战 当登录成功后,将玩家信息类通过,UI管理器中的显示加载方法中的委托函数,进行,加载面板后的逻辑处理(在里面执行

    2024年02月05日
    浏览(47)
  • Unity3D学习之UI系统——用NGUI制作游戏登陆界面

    会省略一些东西,可以看我的NGUI的博客 设置UI分辨率自适应 设置Root 的层级 和摄像机渲染的层级为UI 主摄像机不渲染UI 一般都是美术给一个示意图,然后按示意图上拼面板 3.1.1 制作图集 制作两个新图集 3.1.2 拖面板 检查DrawCall 3.1.3 面板基类 创建面板基类, 首先设置成单例

    2024年02月19日
    浏览(75)
  • Unity UI交互设计方法

    Unity开发工具并选择用UGUI来设计和制作界面。Unity是个很强大工具,能把项目导出发布到众多平台上运行,无论你是做游戏还是做手机应用APP,它都可以很好的满足你的要求。手机APP的应用中更多的是界面的交互和操作,那么做好UI界面的设计和实现良好的界面操作尤为重要。

    2024年02月06日
    浏览(45)
  • Unity UI设计 软件构造实验报告

    实验 1: 仿真系统的 UI 主界面设计 (1)熟悉Unity中UI界面的设计与编写; (2)熟悉UI界面中场景转换,UI与场景内容相互关联的方式。 (3)熟悉Unity中MySQL数据库的操作 新建一个Unity场景,在此场景中实现如下功能: (1)自行设计一个登录、注册UI界面; (2)添加数据库的动

    2024年02月05日
    浏览(35)
  • Unity学习笔记之UI

    三种UI系统:                    OnGUI:最早的UI系统,纯代码实现,写法类似Update                             优点:出现很早,纯代码可控制                             缺点:只能程序开发                    NGUI:Unity著名插件

    2024年02月05日
    浏览(41)
  • unity 前端场景搭建UI框架的设计

    基础组件库:设计一套基础组件库,包括常用的 UI 控件,如文本、按钮、图像等,组件库的设计应该尽量简单易用,方便开发者快速搭建 UI 界面。 布局管理器:为了方便 UI 界面的排版,需要设计一套布局管理器,如水平布局、垂直布局、网格布局等,布局管理器应该支持自

    2024年02月16日
    浏览(45)
  • Unity进阶-ui框架学习笔记

    笔记来源课程:https://study.163.com/course/courseMain.htm?courseId=1212756805_trace_c_p_k2_=8c8d7393c43b400d89ae94ab037586fc 最上面的管理层(canvas) 调整下运行顺序,让他快于controller panel的控制层 panel下面的组件层 使用

    2024年02月16日
    浏览(49)
  • Unity UI设计 Text文本无法正常显示

    Unity UI设计 Text文本无法正常显示 如下图, 笔者已在Text文本框中设置文本为10, 但是Text文本框并没有显示 适当拉大Text文本框或缩小Text文本字体大小 对于笔者而言, 由于Text文本框较小, Text文本字体较大,导致Text文本字体无法正常显示。 当然,读者所遇到的情况可能与笔

    2024年02月16日
    浏览(48)
  • Unity数字孪生UI设计——Text字体模糊处理

    问题描述: 使用Text控件之后,看上去感觉没啥问题,但是一旦运行项目就变得非常模糊,想截个高清的场景图都不行 解决方法: 1、修改text对应的width和Height,使得他变成原来的2倍 2、修改scale,改成原来的0.5倍,这样一来一去就使得原来的大小起始并没有改变 3、修改字体

    2024年02月12日
    浏览(48)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包