Обновить
Комментарии 14
Почему в PlayerController
private void ChangeHealth(float health){
_playerView.Changehealth(health);
}

не вызывается _model SetNewHealth()?
Имхо конечно, но view лишь обновляет Health, логично что происходит Change, а не Set. за установку параметров отвечает лишь Model.
Тогда, на мой взгляд, здесь что-то лишнее. Либо Controller либо Model. Думаю, их можно объединить в один класс.
Тогда потеряется смысл вообще разделять классы. И мы получим спагети код
Не вижу никакой полезной нагрузки в данной реализации controller. Он служит всего-лишь тонкой прослойкой между Model и View, ну еще пару обработчиков ивентов сопрягает.
Вот кусок вашего кода

_playerModel.ChangedHealth += ChangeHealth;

private void ChangeHealth(float health){
_playerView.Changehealth(health);
}

На мой взгляд, здесь лишнее звено.
Должно быть сразу
_playerModel.ChangedHealth += _playerView.Changehealth


Зачем создавать лишнюю сущность в виде Controller.ChangeHealth?
По идеи model должен только хранить, максимум валидировать данные, а основная логика работы должна быть в controller. Однако пример в данной статье сильно упрощён, и в конкретно данном примере в controller весь смысл только в демонстрации mvc.
Делал что-то схожее, только все три сущности наследовал от MonoBehaviour. В вашем примере модель не редактируется через Inspector, а это самая частая сущность для редактирования, что явно минус. В итоге я отказался от такого подхода, потому что уходило много времени на создание и поддержку классов, и ради элемента с одним параметром приходилось городить три класса. Я сделал вывод, что для домашних проектов это слишком избыточно, а для больших — вполне себе вариант.
Доброго времени суток. Я прошу заметить, что в данной реализации все данные, что нужны Model — например возьмем машину. Много разных видов (например разные скорости). Простая реализация создаем CarModel и CarDiscription, который в свою очередь является [Serialize]. Тогда мы можем создать Scriptable object, в котором создадим List и уже в Inspector будем настраивать каждый дискрипшн, а Model будет хранить лишь нужный нам дескрипшн.
Я бы не согласился. В данном Controller можно реализовать методы Enable и Disable, в которых можно привязывать и отвязывать события. Тем самым мы можем не уничтожать объект, а контролировать его. Нужен он нам сейчас или нет. Например реализовав pull manager для таких объектов, и отключаться в Disable у view Active тем самым скрывая, но не уничтожая

Я ничего не понял из того что вы сейчас сказали, но просто сравните с каноническими диаграммами:
MVP
и
MVC


У вас не три равноправных компонента как в MVC, у вас два компонента + тонкая прослойка между ними, то есть MVP.

Ничего не имею против MVC, однако, на мой взгляд, намного проще выносить отдельные способности (здоровье, прыжки, ношение оружия и пр.) в отдельные скрипты, что-то вроде миксинов. И из таких компонентов собирать разных юнитов.
Пример компонента здоровья
[RequireComponent(typeof(Unit))]
public class Health : MonoBehaviour
{
  public float max;
  float current;

  public float regenerationDuration;
  public float regenerationDelay;
  float timeToRegenerate;

  Armor armor;

  void Start() {
    armor = GetComponent<Armor>();
    current = max;
  }

  void FixedUpdate() {
    timeToRegenerate = Mathf.Max(0f, timeToRegenerate - Time.fixedDeltaTime);
    if (timeToRegenerate == 0f) Regenerate(Time.fixedDeltaTime);
  }

  void Update() {
    if (current <= 0) GetComponent<Unit>().Die();
  }

  public void GetDamage(Damage damage) {
    float armorResistanceFactor = 0f;
    if (armor != null) {
      armorResistanceFactor = armor.GetResistanceFactor(damage.type);
    }
    current -= damage * (1 - armorResistanceFactor);
    timeToRegenerate = regenerationDelay;
  }

  void Regenerate(float deltaTime) {
    health += max * (ms / regenerationDuration)
  }
}

Намного проще — да. Но если тебе надо сохранять данные условно? Придется лезть в каждую View такую и сохранять параметры. Происходит перемешивание обязанностей + нельзя контролировать. Что если я хочу ее отключить? Кто будет управлять этим
сохранять данные условно

Что вы имеете ввиду под «условно»? Можете привести пример для ясности?

Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.