Я не знаю простого атрибута, который вы можете использовать, однако - я обычно использую что-то вроде этого -
public class HealthComponent : MonoBehaviour
{
[SerializeField]
private int _maxHealth;
[SerializeField]
private int _currentHealth;
public delegate void HealthChanged();
public event HealthChanged HealthChangedEvent;
public void ChangeHealth(int amountToChangeBy)
{
_currentHealth += amountToChangeBy;
if (_currentHealth > _maxHealth)
{
_currentHealth = _maxHealth;
}
if (_currentHealth < 0)
{
_currentHealth = 0;
}
if (HealthChangedEvent != null)
{
HealthChangedEvent();
}
}
}
Вам нужно подписаться на событие в другом классе, чтобы онобыть уведомленным, например,
public class HealthSliderComponent : MonoBehaviour
{
[SerializeField]
private Slider _healthSlider;
private HealthComponent _healthComponent;
private void Awake()
{
_healthComponent = GetComponent<HealthComponent>();
_healthComponent.HealthChangedEvent += HandleHealthChanged;
}
private void HandleHealthChanged()
{
_healthSlider.value = _healthComponent.CurrentHealth;
}
}