After watching 10+ various videos, I believe I finally understand how our events being used here, following is my summary for your reference and for mine as well:
" When Enemy died then invoking Health.AwardExperience() in which we call GainExperience() from Experience Componet;
GainExperience() then calls onExperienceGained() event which has already subscribed another event called UpdateLevel() when loading BaseStats sciprt as their signatures are the same;
Importantly, UpdateLevel() can check newLevel vs currentLevel by invoking CalculateLevel(); In doing above: we basically get rid of the idea of using Update() to check level and logging “you levelled up” for each frame, instead the UpdateLevel() is invoked only when GainExperience() was executed once any enemy is killed.
I kind of understand why we need event/delegate here as onExperienceGained() event must subscribe the UpdateLevel() in advance then we are able to invoke UpdateLevel() when GainExperience() is executed.
In short, when player killed an enemy GainExperience() would execute and invoke our event onExperienceGained() which in turn inovke the already subscribed function UpdateLevel() to compare level. "
I think this should be it, welcome any corrections if I’m mistaken any part. Thank you.