123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- using System;
- using UnityEngine;
- using UnityEngine.UI;
- namespace Comp
- {
- public class CockHpComp : MonoBehaviour
- {
- // 血量条组件
- private Image _backgroundImage, _foregroundImage;
- private int _maxHp, _curHp;
- public int reduceHp; // 需要扣除的Hp
-
- private ParticleSystem _particleSystem;
- public int MaxHp
- {
- set
- {
- _maxHp = value;
- _curHp = _maxHp;
- }
- }
- private void ReduceCurHp(int hp)
- {
- _curHp -= hp;
- var hpPercent = (float)_curHp / _maxHp;
- if (hpPercent > 0.5f)
- {
- _foregroundImage.color = Color.green;
- }
- else if (hpPercent is >= 0.25f and <= 0.5f)
- {
- _foregroundImage.color = Color.yellow;
- }
- else
- {
- _foregroundImage.color = Color.red;
- }
-
- var backgroundSize = _backgroundImage.rectTransform.sizeDelta;
- var foregroundSize = _foregroundImage.rectTransform.sizeDelta;
- var newForegroundWidth = backgroundSize.x * hpPercent;
- _foregroundImage.rectTransform.sizeDelta = new Vector2(newForegroundWidth, foregroundSize.y);
-
- _particleSystem.Play(); // 播放粒子特效
- }
-
- private void Awake()
- {
- _particleSystem = GetComponentInChildren<ParticleSystem>();
- }
- private void Start()
- {
- // 获取血条的填充图片
- var images = GetComponentsInChildren<Image>();
- foreach (var image in images)
- {
- if (image.name == "Background")
- {
- _backgroundImage = image;
- }
- if (image.name == "Foreground")
- {
- _foregroundImage = image;
- }
- }
- }
- private void Update()
- {
- if (reduceHp != 0)
- {
- ReduceCurHp(reduceHp);
- reduceHp = 0;
- }
- }
- }
- }
|