Unity3D游戏编程-血条

文章目录

  • Unity3D游戏编程-血条
    • 一、作业要求
    • 二、项目配置
    • 三、项目演示
      • (1)视频演示
      • (2)项目下载
      • (3)文字说明
      • (4)项目截图
    • 四、前置内容
      • (1)IMGUI
      • (2)UGUI
    • 五、实现过程和方法(算法)
      • (1)IMGUI
      • (2)UGUI
    • 六、分析两种实现的优缺点
      • (1)IMGUI
      • (2)UGUI
    • 七、参考资料

一、作业要求

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

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

二、项目配置

Windows 10
Unity 2020.3.17f1c1

三、项目演示

(1)视频演示

点击此处可以前往
可开启字幕观看。

(2)项目下载

下载Assets文件夹
点击此处可以前往gitee

(3)文字说明

  1. 创建unity专案后,将保存的文件夹中的Assets替换成在上面项目下载的Assets文件夹
  2. 打开专案,然后点选Assets > Scenes的play加载场景
  3. 运行游戏
  4. 点击+/-按钮可以对IMGUI的血条血量进行增加或减少

(4)项目截图

四、前置内容

(1)IMGUI

代码驱动的 UI 系统,没有图形化设计界面,只能在 OnGUI 阶段用 GUI 系列的类绘制各种 UI 元素,因此 UI元素只能浮在游戏界面之上。

(2)UGUI

所有 UI 元素都是游戏对象,友好的图形化设计界面, 可在场景渲染阶段渲染这些 UI 元素。


五、实现过程和方法(算法)

(1)IMGUI

IMGUI主要利用按钮,来对血条进行血量的加和减。
并且利用HorizontalScrollbar来显示滑条。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class IMGUI : MonoBehaviour
{public float value;public float pos;private float tmp;int middle = Screen.width / 2;private void OnGUI(){if (GUI.Button(new Rect(middle - 160, 50, 40, 40), "+")){//当按下+时,血量增加tmp += 5;if (tmp > 100)tmp = 100;}if (GUI.Button(new Rect(middle + 120, 50, 40, 40), "-")){//当按下-时,血量减少tmp -= 5;if (tmp < 0)tmp = 0;}value = Mathf.Lerp(value, tmp, 0.05f);//更新血条的长度数值//Mathf.Lerp是用来取value和tamp的中值,第三个参数是倾向GUI.color = Color.red;//设置颜色//设置滑条参数分别是//(位置,滑条左边的初始位置,滑条的长度,整个滑条的初始值,整个滑条的最大值)GUI.HorizontalScrollbar(new Rect(middle - 100, 60, 200, 20), pos, value, 0, 100);}
}


(2)UGUI

  1. 创建GameObject > UI > Slider
  2. 打开Slide的子组件,点击Handle Slide Area,把可视化去掉
  3. 点击Fill Area,调整以下参数:

锚点位置是middle center
pos X = pos Y = pos Z = 0;
width = 160 ; height = 10

  1. 点击Fill,修改color颜色

  2. 点击slider,右侧Inspector下滑,修改以下参数:

Max value = 100
value = 10

这样就可以看到血条变化了:

  1. 创建给血条添加自动变化的脚本(血条自动减少增大,并且随血量变换颜色):
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;public class UGUI : MonoBehaviour
{public Slider slider;float factor = 0.1f;public bool active = true;private int turn = 1;private void Start(){ }void change() {if (turn == 1)slider.value -= 0.3f;//血量减少else slider.value += 0.3f;//血量增加if (slider.value <= 0) {slider.value = 0;turn = 2;}if (slider.value >= 100) {slider.value = 100;turn = 1;}}void Update () {//看向镜头位置this.transform.LookAt (Camera.main.transform.position);if (active)change();Color current = slider.fillRect.transform.GetComponent<Image>().color;if (slider.value <= 60) {//根据血量转换颜色slider.fillRect.transform.GetComponent<Image>().color = Color.Lerp(current, Color.red, factor);}else {slider.fillRect.transform.GetComponent<Image>().color = Color.Lerp(current, Color.green, factor);}}}
  1. 把脚本拖给Canvans,再把Slider拖给脚本内的slider参数

点击运行就可以看到效果。
8. 修改Canvans的名字为HealthBarUGUI,并且拖入Asset,成为预设。


六、分析两种实现的优缺点

(1)IMGUI

优点:

  1. UI元素只能浮在游戏界面之上,因此IMGUI系统通常不打算用于玩家可能使用并与之交互的普通游戏内用户界面。
  2. 符合游戏编程的传统,可以仅靠编程实现。
  3. 对新手友好,入门容易,同时帮助理解游戏引擎渲染的调用函数。

缺点:

  1. 难以调试,无法直观看到UI布局情况,需要使用代码一点一点更改位置。

(2)UGUI

优点:

  1. 所见即所得设计工具。
  2. 支持多模式、多摄像机渲染。
  3. 面向对象,每个控件都是一个对象,通过对其加减Component或者改变属性可以实现不同的效果。

缺点:

  1. 使用困难,许多设计技巧和方法都需要查阅大量资料去学习。

七、参考资料

  1. 【Unity3D】血条(Health Bar)
  2. Unity控件HorizontalSlider与HorizontalScrollbar的一些区别

Unity3D游戏编程-血条相关推荐

  1. Unity3D游戏编程-牧师与恶魔

    Unity3D游戏编程-牧师与恶魔 文章目录 Unity3D游戏编程-牧师与恶魔 前置说明 牧师与恶魔 MVC架构 作业要求 项目配置 Object 玩家动作(规则表) 项目演示 视频演示 项目下载 ...

  2. Unity3D游戏编程-牧师与恶魔 动作分离版

    Unity3D游戏编程-牧师与恶魔 动作分离版 文章目录 Unity3D游戏编程-牧师与恶魔 动作分离版 作业要求 项目配置 项目演示 视频演示 项目下载 文字说明 项目截图 实现过程和方法(算法) ...

  3. Unity3D游戏编程-鼠标打飞碟

    Unity3D游戏编程-鼠标打飞碟 文章目录 Unity3D游戏编程-鼠标打飞碟 一.作业要求 二.项目配置 三.项目演示 视频演示 项目下载 文字说明 项目截图 四.前置内容 MVC模式 动作管理器 ...

  4. U3D游戏角色血条制作并显示血量变化

    U3D游戏角色血条制作并显示血量变化 关键:利用Slider来制作血条 大概效果: 数字会随着血量变化而变化. 步骤 1.在层级面板中右击,选择UI中的Slider. 2.创建好后,将Slider命名 ...

  5. Ue4C++编程------血条与c++(一)

    前面的篇章中,我们介绍了AI,在该文中,我们将介绍血条.相信大家也玩过不少游戏,我本人还是很喜欢玩lol的,那么在一般的游戏中,敌人的头上,或者小兵的头顶上都会有一个血条,用来实时的显示小兵的目前血量 ...

  6. 游戏里血条的跟随和,扣血

    首先我们需要在unity的ui中新建一张图像,将血条图片贴在上面,将图片类型更改成已填充,填充方法更改成水平,填充原点根据个人爱好,向左或者向右都可以如下图就ok了: 如此的话第一步血条的设置就完成了 ...

  7. Unity 3D游戏十:血条制作

    前言 中山大学数据科学与计算机学院3D游戏课程学习记录博客. 游戏代码: gitee 参考师兄的博客: 师兄博客 游戏视频:bilibili 游戏要求 血条(Health Bar)的预制设计. 具体要 ...

  8. DirectX游戏编程入门——前言

    本系列文章由 net_assassin 编写,转载请注明出处. http://blog.csdn.net/net_assassin/article/category/1100363 作者:net_as ...

  9. Unity3D NGUI学习(一)血条

    这次来讲讲Unity3D NGUI这个插件的学习,这个插件是收费的,不过去网上可以下载得很多可用版本.用来做用户的交互UI,学习起来比较简单 第一步,导入NGUI包 http://pan.baidu. ...

最新文章

  1. 简单又实用的pandas技巧:如何将内存占用降低90%
  2. linux各目录的文件大小,Linux下查看文件大小和目录大小以及目录下文件的大小...
  3. avcodec_encode_video2 AVERROR(EAGAIN)
  4. TaskExecutor设计与实现
  5. java异步调用数据库存储过程详解,java中如何调用存储过程
  6. android TextView EditTextView一些技巧使用 (视图代码布局)
  7. 牛客网专题 概率dp
  8. Windows 通过 SecureCRT 8.x 上传文件到Linux服务器
  9. xbox one s驱动_续航800公里 体验6座SUV理想ONE
  10. vnc报错 font catalog is not properly configured
  11. 解决:jsp 页面不全,response 内容不完整
  12. c#中using 和new
  13. pycharm 如何设置方法调用字体颜色
  14. jQuery实现页面元素置顶时悬浮
  15. PACPerformance
  16. C#开发WPF/Silverlight动画及游戏系列教程(Game Tutorial):(十七) 完美精灵之八面玲珑(WPF Only)①...
  17. Msm8960(APQ8064)平台的MSM-AOSP-kitkat编译适配(6):音频
  18. CardView的基本使用、DrawerLayout 滑动菜单、Fragment
  19. 陆金所杨晓军:金融与区块链结合将…
  20. 统计量 估计量 概念

热门文章

  1. 如何在nginx下配置网关,实现跨域请求
  2. ajax请求是什么?完整的Ajax请求步骤及get与post请求的区别
  3. steam搬砖,长期稳定副业,附防坑指南助你不掉坑
  4. 【Vue教程】Vue.js推文
  5. Typora+PicGo(app)+gitee 图片插入自动上传使用失败与Typora+PicGo-Core+gitee的选择
  6. labview和c语言,到底哪个更好:LabVIEW还是C语言?
  7. Chrome、safi、IE浏览器通用上一步、下一步代码
  8. 学计算机英语要去拼六级吗,拼搏两个月 大学英语六级终于考到580分
  9. Scikit-Learn库
  10. OpenCV系列之轮廓:更多属性 | 二十四