【Unity2D 2022:UI】制作角色血条

news2024/10/6 10:35:46

一、创建血底UI

1. 创建画布(Canvas)

        

2.  在画布上添加血底图像(Image)子物体

二、编辑血底UI

1. 将血底图片拖入源图像(Source Image)中

2.  点击设置为图片的原大小(Set Native Size)

 3. 调整血底的缩放比例和位置,使其位于画布的左上角

4. 将血底UI的锚点设置到左上角

 

三、创建角色头像UI

1.  在血底上添加角色头像子物体

四、编辑角色头像UI

1. 将角色头像图片拖入源图像(Source Image)中

2.  点击设置为图片的原大小(Set Native Size)

 3. 调整角色头像的缩放比例和位置,使其位于血底的圆圈中心

4. 将角色头像UI的锚点设置在头像的四个角(适应父对象的拉伸缩放)

五、创建血条UI

1. 在血底上添加血条子物体

六、编辑血条UI 

 1. 将血条图片拖入源图像(Source Image)中

2.  点击设置为图片的原大小(Set Native Size)

 3. 调整血条的缩放比例和位置,使其覆盖血底

4. 将血条UI的锚点设置在血条的四个角(适应父对象的拉伸缩放)

5. 在血底上添加遮罩图像(Image)子物体

        遮罩原理:与遮罩重叠的部分显示,不重叠的部分隐藏

6. 调整遮罩的缩放比例和位置,使其覆盖血底

7. 将遮罩的锚点设置在遮罩的四个角(适应父对象的拉伸缩放) 

8. 为遮罩添加Mask组件

9. 可以取消勾选显示遮罩图形(Show Mask Graphic)

10. 将血条拖拽到遮罩上,作为遮罩的子物体;将遮罩移动到角色头像上方,先渲染血条,再渲染角色头像

11. 再次将血条的锚点设置为遮罩左侧

12. 将遮罩设置为轴心模式

13. 将遮罩的轴心点设置为左侧

七、在角色生命值改变时缩放血条

1. 新建血条脚本

2. 编辑血条脚本

         (1)使用UnityEngine的UI命名空间

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
// 使用Unity的UI库
using UnityEngine.UI;

        (2)创建遮罩对象,获取遮罩的初始长度

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
// 调用Unity的UI库
using UnityEngine.UI;

public class HealthBar : MonoBehaviour
{
    // 创建遮罩对象
    public Image mask;
    // 获取遮罩的初始长度
    private float originalSize;

    void Start()
    {
        // 遮罩初始长度为初始时遮罩当前长度
        originalSize = mask.rectTransform.rect.width;
    }
}

        (3)使用单例模式,初始化instance为当前血底游戏对象

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
// 调用Unity的UI库
using UnityEngine.UI;

public class HealthBar : MonoBehaviour
{
    // 创建遮罩对象
    public Image mask;
    // 获取遮罩的初始长度
    private float originalSize;

    // 使用单例模式,创建血条对象
    public static HealthBar instance {
        get; private set; }

    // Awake()方法优先于Start()方法执行
    private void Awake()
    {
        // 将instance实例化为当前的血底游戏对象
        instance = this;
    }

    void Start()
    {
        // 遮罩初始长度为初始时遮罩当前长度
        originalSize = mask.rectTransform.rect.width;
    }
}

4. 编写changeLength()方法,用来改变血条长度

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
// 调用Unity的UI库
using UnityEngine.UI;

public class HealthBar : MonoBehaviour
{
    // 创建遮罩对象
    public Image mask;
    // 获取遮罩的初始长度
    private float originalSize;

    // 使用单例模式,创建血条对象
    public static HealthBar instance {
        get; private set; }

    // Awake()方法优先于Start()方法执行
    private void Awake()
    {
        // 将instance实例化为当前的血底游戏对象
        instance = this;
    }

    void Start()
    {
        // 遮罩初始长度为初始时遮罩当前长度
        originalSize = mask.rectTransform.rect.width;
    }

    // 改变遮罩长度
    public void changeLength(float value)
    {
        // 将遮罩长度设置为水平方向的初始长度*百分比
        mask.rectTransform.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, originalSize*value);
    }
}

3. 编辑角色脚本

        (1)删除控制台的Debug语句,调用changeLength()方法,改变血条长度

using Cinemachine.Utility;
using System.Collections;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using Unity.Mathematics;
using UnityEditor.Rendering;
using UnityEngine;

public class Ruby : MonoBehaviour 
{
    // Ruby改变生命值
    public void changeHealthPoint(int value) 
    {
        healthPoint = Mathf.Clamp(healthPoint+value, 0, maxHealthPoint);
        // 调用changeLength()方法,改变血条长度
        HealthBar.instance.changeLength((float)healthPoint/maxHealthPoint);
        if(healthPoint <= 0) {
            Destroy(gameObject);
        }
    }
}

4. 最终效果如下图所示:

        本章完。感谢阅读! 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1904913.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AIGC时代,“人”的核心价值在何处?

随着科技的浪潮汹涌向前&#xff0c;人工智能生成内容&#xff08;AIGC&#xff09;已悄然渗透至我们生活的每一个角落&#xff0c;从创意设计到信息传播&#xff0c;其影响力与变革力愈发显著。在这一由算法驱动的新纪元里&#xff0c;人类社会运作模式、学习途径及职业形态均…

【操作系统】进程管理——调度算法(个人笔记)

学习日期&#xff1a;2024.7.4 内容摘要&#xff1a;各种调度算法的思想、规则、优缺点介绍 为什么要有调度算法&#xff1f; 调度算法就好比一群人在银行办理业务&#xff0c;准备办理业务的人就是进程/作业&#xff0c;银行窗口的工作人员就是CPU&#xff0c;进程往往是比C…

【论文解读】可灵(快手)|LivePortrait:具有拼接和重定向控制的高效肖像动画

&#x1f4dc; 文献卡 英文题目: LivePortrait: Efficient Portrait Animation with Stitching and Retargeting Control;作者: Jianzhu Guo; Dingyun Zhang; Xiaoqiang Liu; Zhizhou Zhong; Yuan Zhang; Pengfei Wan; Di ZhangDOI: 10.48550/arXiv.2407.03168摘要翻译: *旨在…

为什么固定尺寸 AdSense 广告依旧会出现并非指定的尺寸广告?

经常在网站上投放谷歌 AdSense广告的站长应该都碰到过&#xff0c;明明投放的是固定尺寸的广告位里旧会出现并非指定尺寸的AdSense 广告&#xff0c;很诡异的感觉。其实这都是因为你的 AdSense 账号广告优化造成的&#xff0c;其中里面就包含了广告尺寸优化&#xff0c;只需要在…

嵌入式鸿蒙系统openharmony编译方法详解

大家好,时光如梭,今天主要给大家分享一下,鸿蒙系统的使用方法,以及源码该如何编译,其中要注意的细节有哪些? 第一:OpenHarmony系统简介 OpenHarmony 是由开放原子开源基金会(OpenAtom Foundation)孵化及运营的开源项目, 目标是面向全场景、全连接、全智能时代,基于…

浏览器插件利器-allWebPluginV2.0.0.14-stable版发布

allWebPlugin简介 allWebPlugin中间件是一款为用户提供安全、可靠、便捷的浏览器插件服务的中间件产品&#xff0c;致力于将浏览器插件重新应用到所有浏览器。它将现有ActiveX插件直接嵌入浏览器&#xff0c;实现插件加载、界面显示、接口调用、事件回调等。支持谷歌、火狐等浏…

puppeteer 爬虫初探

1. puppeteer 和 puppeteer-core 安装 puppeteer 会默认下载一个最新版本的 chrome 浏览器&#xff1b; 安装 puppeteer-core &#xff0c;不会安装 chrome, 若要程序打开浏览器运行时&#xff0c;需手动指定电脑系统安装的 chrome 浏览器路径&#xff1b; 2. puppeteer-core …

【TB作品】51单片机 Proteus仿真 超声波读取+LCD1602显示仿真12MHZ

实验报告&#xff1a;51单片机 Proteus仿真 超声波读取LCD1602显示仿真 一、实验背景 本实验旨在使用51单片机&#xff08;AT89C51&#xff09;结合超声波传感器HC-SR04和LCD1602液晶显示屏&#xff0c;通过Proteus仿真平台实现超声波测距功能&#xff0c;并将测得的距离显示…

# [0705] Task06 DDPG 算法、PPO 算法、SAC 算法【理论 only】

easy-rl PDF版本 笔记整理 P5、P10 - P12 joyrl 比对 补充 P11 - P13 OpenAI 文档整理 ⭐ https://spinningup.openai.com/en/latest/index.html 最新版PDF下载 地址&#xff1a;https://github.com/datawhalechina/easy-rl/releases 国内地址(推荐国内读者使用)&#xff1a; 链…

SAP已下发EWM的交货单修改下发状态

此种情况针对EWM未接收到ERP交货单时&#xff0c;可以使用此程序将ERP交货单调整为未分配状态&#xff0c;在进行调整数据后&#xff0c;然后使用VL06I&#xff08;启用自动下发EWM配置&#xff0c;则在交货单修改保存后会立即下发EWM&#xff09;重新下发EWM系统。 操作步骤如…

去O化神器 Exbase

随着去O化进程推动&#xff0c;很多旧业务依赖的oracle数据库&#xff0c;都需要实现做数据库的替换&#xff0c;当下能很好兼容Oracle&#xff0c;并实现异构数据库之间转换的工具并不多。这里给大家推荐一个商业工具数据库迁移工具exbase&#xff08;北京海量&#xff09;&am…

超高精电容传感器PCAP01调试+LABVIEW数据可视化调试手记

PCAP01超高精电容传感芯片STM32LabView可视化 文章目录 PCAP01超高精电容传感芯片STM32LabView可视化一、PCAP01介绍1.1、PCAP01引脚定义1.2、电容测量1.3、温度测量1.4、PCAP典型测试电路 二、PCAP01的STM32驱动2.1、SPI协议配置2.2、PCAP01浮空电容测量内部温度测量操作流程 …

秋招提前批面试经验分享(上)

⭐️感谢点开文章&#x1f44b;&#xff0c;欢迎来到我的微信公众号&#xff01;我是恒心&#x1f60a; 一位热爱技术分享的博主。如果觉得本文能帮到您&#xff0c;劳烦点个赞、在看支持一下哈&#x1f44d;&#xff01; ⭐️我叫恒心&#xff0c;一名喜欢书写博客的研究生在读…

【LVGL-SquareLine Studio】

LVGL-SquareLine Studio ■ SquareLine Studio-官网下载地址■ SquareLine Studio-参考博客■ SquareLine Studio-安装■ SquareLine Studio-汉化■ SquareLine Studio-■ SquareLine Studio-■ SquareLine Studio-■ SquareLine Studio-■ SquareLine Studio- ■ SquareLine S…

云动态摘要 2024-07-07

给您带来云厂商的最新动态,最新产品资讯和最新优惠更新。 最新优惠与活动 数据库上云优选 阿里云 2024-07-04 RDS、PolarDB、Redis、MongoDB 全系产品新用户低至首年6折起! [免费体验]智能助手ChatBI上线 腾讯云 2024-07-02 基于混元大模型打造,可通过对话方式生成可视化…

【vue组件库搭建06】组件库构建及npm发包

一、格式化目录结构 根据以下图片搭建组件库目录 index.js作为入口文件&#xff0c;将所有组件引入&#xff0c;并注册组件名称 import { EButton } from "./Button"; export * from "./Button"; import { ECard } from "./Card"; export * fr…

并查集(还有反集也在)

一.定义 定义&#xff1a; 并查集是一种树型的数据结构&#xff0c;用于处理一些不相交集合的合并及查询问题&#xff08;即所谓的并、查&#xff09;。比如说&#xff0c;我们可以用并查集来判断一个森林中有几棵树、某个节点是否属于某棵树等。 主要构成&#xff1a; 并查集…

如何将Grammarly内嵌到word中(超简单!)

1、下载 安装包下载链接见文章结尾 官网的grammarly好像只能作为单独软件使用&#xff0c;无法内嵌到word中&#x1f9d0;&#x1f9d0;&#x1f9d0; 2、双击安装包&#xff08;安装之前把Office文件都关掉&#xff09; 3、安装完成&#xff0c;在桌面新建个word文件并打开 注…

【Spring AOP 源码解析前篇】什么是 AOP | 通知类型 | 切点表达式| AOP 如何使用

前言&#xff08;关于源码航行&#xff09; 在准备面试和学习的过程中&#xff0c;我阅读了还算多的源码&#xff0c;比如 JUC、Spring、MyBatis&#xff0c;收获了很多代码的设计思想&#xff0c;也对平时调用的 API 有了更深入的理解&#xff1b;但过多散乱的笔记给我的整理…