hw9-UI系统

作业要求-血条的预制设计

本次作业是五选一,我选择了【血条(Health Bar)的预制设计】,要求如下:

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

实现过程

首先建立一个文件夹Prefab,用于存放预制体。

IMGUI实现

1. 新建一个Emtpy命名为HealthBarIMGUI
2. 实现血条的增减,用按钮来控制,代码如下:
在这里插入图片描述
其中血条用水平滚动条表示,函数原型如下:

public static float HorizontalScrollbar(Rect position, float value, float size, float leftValue, float rightValue);

函数的参数解释如下:
在这里插入图片描述
3. 把代码挂载到HealthBarIMGUI上,再拖入Prefab文件夹即可,效果如下:
在这里插入图片描述
在这里插入图片描述

UGUI实现
构建基本场景
  1. 菜单 Assets -> Import Package -> Characters,导入资源
  2. 在层次视图,Create -> 3D Object -> Plane,添加 Plane 对象
  3. 资源视图展开 Standard Assets :: Charactors :: ThirdPersonCharater :: Prefabs
  4. 将 ThirdPersonController 预制拖入场景,改名为 Ethan
  5. 设置以下属性
  • Plane 的 Transform 的 Position = (0,0,0)
  • Ethan 的 Transform 的 Position = (0,0,0),Rotation = (0,180,0),使人物正面面对Camera
  • Main Camera 的 Transform 的 Position = (0,1,-10)
  1. 运行检查效果
给人物加上血条
  • 选择 Ethan 用上下文菜单(鼠标右键) -> UI -> Canvas,添加画布子对象
  • 选择 Ethan 的 Canvas,用上下文菜单 -> UI -> Slider,添加滑条作为血条子对象
  • 选择 Ethan 的 Canvas,在 Inspector 视图
    • 设置 Canvas 组件 Render Mode 为 World Space
    • 设置 Rect Transform 组件的 (PosX, PosY, Width, Height) 为 (0,1.8,160,20)
    • 设置 Rect Transform 组件的 Scale(x, y)为 (0.01,0.01)
  • 展开 Slider
    • 选择 Handle Slider Area,禁灰(disable)该元素
    • 选择 Background,禁灰(disable)该元素
    • 选择 Fill Area 的 Fill,修改 Image 组件的 Color 为 红色
  • 选择Slider,在 Inspector 视图
    • 设置 Rect Transform 组件的Rotation = (0,180,0)
    • 设置Slider 组件的 MaxValue 为1,value为0
  • 运行检查结果,发现人物运动时(用方向键控制),血条会跟着人物旋转,没有面对主摄像机,故需要给 Canvas 添加以下脚本 LookAtCamera.cs,代码如下:
    在这里插入图片描述
  • 为了有增减血量动作,在healthbarIMGUI.cs上增加使用UnityEngine.UI
    添加变量:
    public Slider slider;
    在OnGUI函数中最后添加:
    slider.value = health;
    把Canvas的子对象Slider拖入对象HealthBarIMGUI的healthbarIMGUI.cs组件中的Slider属性,运行,点击按钮就能实现两条血条同时增减血量。
  • 把Canvas拖入Prefab文件夹即可,效果如下:
    在这里插入图片描述

两种方法的优缺点

IMUGUI
优点:
  • IMGUI 的存在符合游戏编程的传统
  • 在修改模型,渲染模型这样的经典游戏循环编程模式中,在渲染阶段之后,绘制 UI 界面无可挑剔
  • 这样的编程既避免了 UI 元素保持在屏幕最前端,又有最佳的执行效率,一切控制掌握在程序员手中
缺点:
  • 传统代码驱动的 UI 面临效率低下,难以调试等
  • 不利于布局,在协调对象之间的位置关系的时候会很麻烦
  • 调用OnGUI,每一帧都需要重算布局重新渲染,性能低下
UGUI
优点:
  • 所见即所得(WYSIWYG)设计工具,设计师也能参与程序开发
  • 支持多模式、多摄像机渲染
  • UI 元素与游戏场景融为一体的交互
  • 面向对象的编程
缺点:
  • 上手比较困难,学习成本比较高

预制的使用方法

  1. 直接将HeatlthBarIMGUI预制体拖入场景
  2. 按照前面提到的方法导入资源,用预制体生成游戏对象Ethan,构建基本场景
  3. 将Canvas预制体拖入到Ethan对象,成为其子对象
  4. 将Canvas的子对象Slider拖入HeatlthBarIMGUI对象的healthbarIMGUI.cs组件中的Slider属性
  5. 运行后点击增/减血按钮即可实现两种血条的同时增/减血
参考博客

https://blog.csdn.net/Runner1st/article/details/80582780

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CSDN IT狂飙上传的代码均可运行,功能ok的情况下才上传的,直接替换数据即可使用,小白也能轻松上手 【资源说明】 基于MATLAB实现的有限差分法实验报告用MATLAB中的有限差分法计算槽内电位;对比解析法和数值法的异同点;选取一点,绘制收敛曲线;总的三维电位图+使用说明文档 1、代码压缩包内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2020b;若运行有误,根据提示GPT修改;若不会,私信博主(问题描述要详细); 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可后台私信博主; 4.1 期刊或参考文献复现 4.2 Matlab程序定制 4.3 科研合作 功率谱估计: 故障诊断分析: 雷达通信:雷达LFM、MIMO、成像、定位、干扰、检测、信号分析、脉冲压缩 滤波估计:SOC估计 目标定位:WSN定位、滤波跟踪、目标定位 生物电信号:肌电信号EMG、脑电信号EEG、心电信号ECG 通信系统:DOA估计、编码译码、变分模态分解、管道泄漏、滤波器、数字信号处理+传输+分析+去噪、数字信号调制、误码率、信号估计、DTMF、信号检测识别融合、LEACH协议、信号检测、水声通信 5、欢迎下载,沟通交流,互相学习,共同进步!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值