这是第一个 Unity 开放项目的repo,是 Unity 和社区合作创建的一个小型开源游戏演示,第一款游戏是一款名为 Chop Chop 的动作冒险游戏。
您最多选择25个主题 主题必须以中文或者字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
 
 
 

56 行
1.5 KiB

using UnityEngine;
public class UIHealthBarManager : MonoBehaviour
{
[SerializeField] private HealthSO _protagonistHealth = default; //the HealthBar is watching this object, which is the health of the player
[SerializeField] private HealthConfigSO _healthConfig = default;
[SerializeField] private UIHeartDisplay[] _heartImages = default;
[Header("Listening to")]
[SerializeField] private VoidEventChannelSO _UIUpdateNeeded = default; //The player's Damageable issues this
private void OnEnable()
{
_UIUpdateNeeded.OnEventRaised += UpdateHeartImages;
InitializeHealthBar();
}
private void OnDestroy()
{
_UIUpdateNeeded.OnEventRaised -= UpdateHeartImages;
}
private void InitializeHealthBar()
{
_protagonistHealth.SetMaxHealth(_healthConfig.InitialHealth);
_protagonistHealth.SetCurrentHealth(_healthConfig.InitialHealth);
UpdateHeartImages();
}
private void UpdateHeartImages()
{
int heartValue = _protagonistHealth.MaxHealth / _heartImages.Length;
int filledHeartCount = Mathf.FloorToInt((float)_protagonistHealth.CurrentHealth / heartValue);
for (int i = 0; i < _heartImages.Length; i++)
{
float heartPercent = 0;
if (i < filledHeartCount)
{
heartPercent = 1;
}
else if (i == filledHeartCount)
{
heartPercent = ((float)_protagonistHealth.CurrentHealth - (float)filledHeartCount * (float)heartValue) / (float)heartValue;
}
else
{
heartPercent = 0;
}
_heartImages[i].SetImage(heartPercent);
}
}
}