您当前的位置: 首页 >  dangoxiba unity

【Unity2D】实现有个性的复杂的血条UI(以空洞骑士的为例)

dangoxiba 发布时间:2022-02-14 02:02:01 ,浏览量:1

学习目标: 特别感谢b站两位up主的技术指导:改个名字好贵l哦的个人空间_哔哩哔哩_Bilibili改个名字好贵l哦,以后准备游戏开发的蒟蒻大学生;改个名字好贵l哦的主页、动态、视频、专栏、频道、收藏、订阅等。哔哩哔哩Bilibili,你感兴趣的视频都在B站。https://space.bilibili.com/66901277 dreamCirno的个人空间_哔哩哔哩_BilibilidreamCirno,I am a gameplayer more than a programmer.;dreamCirno的主页、动态、视频、专栏、频道、收藏、订阅等。哔哩哔哩Bilibili,你感兴趣的视频都在B站。https://space.bilibili.com/8530273【Unity的UI小功能】实现血条蓝条的手动加减_dangoxiba的博客-CSDN博客https://blog.csdn.net/dangoxiba/article/details/121675050?spm=1001.2014.3001.5501

这种就是简单易实现的,非常没有个性。

因此我们不妨设计一个富有个性的每个血条单独出现的血条

由于我很久没有更新了,而且在这一段时间我换了一个游戏素材,不再是自己画的空洞骑士了,而是可以在Uniy官网Asset Store上免费下载的SunnyLand

地址是:

OK我们把资源导入到Unity以后。然后先把人物的动画制作完成,不会的话建议看看我之前做的关于人物Animation的。然后我以空洞骑士为例就用空洞骑士的素材,先找到UI中的Health

这四种随便选择,然后我们就裁剪好拖到创建的Canvas的左上角,将锚点设置在左上角以后改尺寸都能固定住,然后自己调整好大小。

接下来将  创建一个空对象叫HpManagement我们把上面的第二张图作为空血条,第一张图为满的血条 先创建五个HpBackGround作为空血条,并在空血条上制作它的子对象满血条。并将它们都设置为预设体Prefab。

接着我们在空对象HpManagement上创建脚本就叫HpManagement

以下便是脚本内容

using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class HpManagement : MonoBehaviour {     public int health;     public int numsOfHeart;     public Sprite emptyHeart;     public Sprite fullHeart;

    public Image[] hearts;     //满血条的图像     public Image[] heartImages;     //空血条的图像     public Image[] hpImages;     void Start()     {         //通过标签获取PlayerHealth脚本         GameController.playerHealth = GameObject.FindGameObjectWithTag("Player").GetComponent();     }

    // Update is called once per frame     void Update()     {         //通过PlayerHealth获取当前血量         health = GameController.playerHealth.GetHealth();         //检查血量是否有异常         CheckHp();     }     public void CheckHp()     {         for (int i = 0; i < hpImages.Length; i++)         {             //检查血量是否大于最大血条             if (health > numsOfHeart)             {                 health = numsOfHeart;             }             //判断是满的还是空的             if (i < health)             {                 hearts[i].sprite = fullHeart;             }             else             {                 hearts[i].sprite = emptyHeart;             }             //用于判断多余血条             if (i < numsOfHeart)             {                 hpImages[i].enabled = true;             }             else             {                 hpImages[i].enabled = false;

            }         }     }     public void GetHealth(int health)     {         this.health = health;     } }  

这段代码需要解释一下,GameController脚本是用来存储各个脚本的静态变量,方便直接拿来调用,GameController如下

using System.Collections; using System.Collections.Generic; using UnityEngine;

public class GameController : MonoBehaviour {     public static PlayerHealth playerHealth;     public static bool isGameAlive = true;     public static PlayerController playerController; } PlayerHealth也是拿来判断血量的以及受伤时的效果,如下

using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI;

public class PlayerHealth : MonoBehaviour {     public int startingHealth;     public int currentHealth;     public float hurtSpeed;     public float killTime;     public float hitboxCD;

    private Animator myAnim;     private CapsuleCollider2D capColl2D;     public Collider2D circoll2D;     private Rigidbody2D rigi2D;     private void Awake()     {         currentHealth = startingHealth;     }     void Start()     {         rigi2D = GetComponent();         capColl2D = GetComponent();         myAnim = GetComponent();     }

    void Update()     {              }     public void DamagePlayer(int damage)     {         //限制当前血量大于0小于最大血量         currentHealth = Mathf.Clamp(currentHealth - damage, 0, startingHealth);         if(currentHealth 0 && !GameController.playerController.CheckFall())                 {                                        playerHealth.DamagePlayer(damage);                 }             }         }     }

学习产出:

可见掉血成功 

​​​​​​​

关注
打赏
1688896170
查看更多评论

dangoxiba

暂无认证

  • 1浏览

    0关注

    55博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文
立即登录/注册

微信扫码登录

0.3965s