一、创建血底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. 最终效果如下图所示:
本章完。感谢阅读!