Есть класс CharacterStats со статистикой Персонажа:
[System.Serializable]
public class CharacterStats
{
public float MaxHealth;
public float Health;
public int Coins;
}
Есть класс CharacterStatsInteractor, который обрабатывает действия с репозиторием:
public class CharacterStatsInteractor
{
private CharacterStats _characterStats;
public int Coins => _characterStats.Coins;
public delegate void OnCoinsValue();
public event OnCoinsValue OnCoinsValueChanged;
public CharacterStatsInteractor(CharacterStats repository)
{
_characterStats = repository;
OnCoinsValueChanged?.Invoke();
}
public void AddCoins(int value)
{
_characterStats.Coins += value;
OnCoinsValueChanged?.Invoke();
}
public void SpentCoins(int value)
{
_characterStats.Coins -= value;
OnCoinsValueChanged?.Invoke();
}
public void TakeDamage(int value)
{
_characterStats.Health -= 0;
}
}
Потом подписался на ивент:
private void OnEnable()
{
_player.StatsInteractor.OnCoinsValueChanged += RenderText;
}
private void OnDisable()
{
_player.StatsInteractor.OnCoinsValueChanged -= RenderText;
}
Потом создал персонажа и написал это:
public CharacterStats CharacterStats;
public CharacterStatsInteractor StatsInteractor;
private void Awake()
{
StatsInteractor = new CharacterStatsInteractor(CharacterStats);
}
Вроде все нормально, но ивент не срабатывает.
Я понимаю, что он не срабатывает из-за того, что вызывается ивент раньше, чем подписывается.
Надеюсь никто не напишет, что нужно просто изменить Awake на Start, так как с самого начала скрипт персонажа отключен.