1. Help us improve the editor usability and artist workflows. Join our discussion to provide your feedback.
    Dismiss Notice
  2. We're looking for feedback on Unity Starter Kits! Let us know what you’d like.
    Dismiss Notice
  3. We’re giving 2017.1 beta testers a chance to win t-shirts and a Nintendo Switch. Read more on the blog.
    Dismiss Notice
  4. We want to know how you learned Unity! Help us by taking this quick survey and have a chance at a $25 gift card
    Dismiss Notice
  5. Are you an artist or level designer going to Unite Europe? Join our roundtables there to discuss artist features.
    Dismiss Notice
  6. Unity 5.6 is now released.
    Dismiss Notice
  7. Check out all the fixes for 5.6 on the patch releases page.
    Dismiss Notice

[3USD] Key Value Observing - lightweight implementation of KVO for C#

Discussion in 'Assets and Asset Store' started by arklay_corp, Jun 2, 2015.

  1. arklay_corp

    arklay_corp

    Joined:
    Apr 23, 2014
    Posts:
    167
    [​IMG]
    Key Value Observing v.1.0

    Link to the Asset Store: [HERE]

    This asset provides a lightweight approach to the Key Value Observing pattern in C#.

    Le’s start with the basic: what does Key Value Observing means?

    Key Value Observing (or KVO) is a design pattern, Objective-C implements it at language level, you can read an “official” explanation in apple’s website

    But let me try to give a more practical approach:

    In object oriented development one of the most used pattern (even used without recognizing is a as pattern, most of the time is just the natural approach) is the Model-View-Controller (or MVC):
    [​IMG]

    It means that what the user (or player) actually sees (the View) is not the actual game model (the mathematical Model being executed), to lower design coupling and improve cohesion both are separated, the model fills the values on the View while the View communicates with the model through a Controller.

    Yeah, I know I said I was gonna be practical: let’s say we have a 2D platform game, our hero has a number of lives that will change over time, he will lose and earn lives:
    [​IMG]
    In C# the MVC would be implemented in this case like this:

    [​IMG]
    Meaning that the model will provide the number of lives and the controller will notify the view when it changes.

    Now, what KVO proposes is, instead accessing directly to the model, the view will subscribe as an observer to a controller that will send updates when value for the given key changes:
    [​IMG]
    The main advantage will be that we are decoupling completely the model and the view.


    The asset includes 3 examples with different levels of complexity:

    · [LOW] A model of a lives container and a health bar (very similar to the one proposed here)

    · [MED] A model for a leader board, where the key observed is a list of values

    · [HIGH] A model for a lobby of a multiplayer game, where the model observes a list, and the items of that list


    The asset includes source code. I will try to help here whoever needs help with it and/or the KVO pattern.


    I use this asset myself and I plan to keep it update as I keep encountering different challenges in real life implementation
     
    Last edited: Dec 3, 2015
    unicoea and boysenberry like this.