Some uncollected thoughts:
Could rename WarriorFactory.CreateWarrior to just Create, because the type of the created object is already apparent from the name of the class (and more exact too from the name of the concrete class).
Could rename AbstractWarrior to just Warrior for simplicity and brevity.
Could wrap WarriorFactory members in a class like WarriorStats, and then remove _maxHealth, _maxStamina, _weight, _strength from AbstractWarrior, and instead just pass in a reference to WarriorStats in the constructor (flyweight pattern).
AbstractWarrior.TakedDamage could be renamed to Damaged to be more consistent with the naming of the other events (and fix a mispelling).
The abstractions IDamage, IAttack, IHealth feel off to me. You can now damage a warrior through any of these three interfaces - so which one should be used in which situation? Perhaps something more like this would be more intuitive:
public interface IAttackable
{
bool CanBeAttackedWith(Weapon weapon);
void Attack(Weapon weapon);
}
public interface IKillable
{
bool IsAlive { get; }
float CurrentHealth { get; set; }
float MaxHealth { get; }
void Kill();
}
There are quite a few abstract classes related to one warrior entity: AbstractWarrior, WarriorFactory, WarriorView, WarriorPresenter, WarriorMovement. It feels like adding additional warriors using this system could be quite arduous and lead to code duplication. Using composition more instead of inheritance could potentially help avoid this. In Unity functionality is most commonly composed out of multiple components (attach Attackable component to an entity to make it attackable, attach Killable component to make it killable, attach Rigidbody component to give it a mass etc.).
Consider making the Weapon class derive from ScriptableObject, to make it easier to create new weapons without any code modifications, and to tweak their stats on-the-fly during playtesting.
The WarriorPresenter abstraction also feels weird to me. It’s called a “presenter”, but then it handles functionality like stamina regeneration, movement, jumping and updating UI views. I would try to get rid of this abstraction completely, and make all those different unrelated functionalities be handled independently by individual components (e.g. StatRegenerator, MoveHandler, JumpHandler).
There’s a class called KnightMono that derives from WarriorPresenter, which feels inconsistent; I’d expect all the derived classes to have the same suffix as the base class.