Good advanced Unity C# programming tutorials?

I’ve watched this series of videos and I was really happy about it!
(in specific the Coroutine manager, the object recycler, extensions, actions, LINQ, etc)

Not sure if there is any, but what I’m looking for in specific:

  1. I want some tutorials on applying
    programming patterns (Mediator,
    observer, singleton, etc) on game
    programming situations/examples.
  2. More real-life/in-game examples of
    events/delegates and sending/receiving
    messages to/from objects.
  3. A tut that teaches some good
    programming habits to have. I’ve
    read NGUI’s code and I’m quite
    impressed by how high the quality of
    the code is, I want to improve
    myself to be able to reach that
    level. For example, most the times
    when setting something, he checks if
    the variable he’s setting value !=
    new value. This is just a trivial
    example but you could learn a lot
    just by reading NGUI’s code.
  4. More stuff like the ones in the
    video series in the above link.
  5. Code management! yes this is a big
    one. How to organize your code and
    scripts and tie them up together in the best way.

I’m asking because most the times when I read and try to learn about a pattern for example, or any other topic in code project for example or dot net pearls or any other place, they give examples about stuff like accounting, stocks, news feeds and all that, I’m not really interested in that, I wanna be able to easily map between a pattern and its usage in game programming. That’s why I asked about ‘in-game examples’, or ‘situations in gaming’ where I might need a specific programming idea.

Again, I’m looking to improve my programming skills by learning good habits, advanced stuff and useful tools, so if you know of anything that might help me reaching my goal, pass 'em over :slight_smile: (VIDEO/TEXT tut)

Thanks a lot in advance!

EDIT: I HAVE FOUND MY ANSWER HERE! I DON’T KNOW HOW PEOPLE DON’T KNOW ABOUT THIS GUY!

First some thoughts on programming as a skill, then giving a not-really-an-answer to your question…

The thing with programming is that it can’t really be taught, only learned. It’s a hands-on skill, like carpentry or metalworks or pottery.

People do (probably) take carpentry lessons if they want to become carpenters, but I can’t imagine the teacher there telling the students: “The chisel is used to chip wood in small chunks.” etc. and the students just listening. No, he shows what the chisel is and how it can be operated on a block of wood and what the outcome is. Then he sends the students to do their own thing with it.

The big difference with tools in carpentry and programming are that you don’t need to remember (though you probably do) all of the carpentry tools you know how to use by heart. You can just hang all your tools on a wall and choose the correct one for the job. Programming tools are not physical objects, so your tool-collection is only inside your head.

My non-answer to you is: A good way to broaden your horizons and learn new ways of thinking is to restrict your tool-collection. Have you ever tried to make a game without using if-clauses (except maybe checking for raycasts, input etc. in code you can’t control) or for loops in your game logic? How about not using the Update function (except, for input checking)? How about trying to keep your functions short, so that no function will ever have more than, say, 6 lines of code? Try one of these (or something similar), and if you get stuck, ask here or other programming forums.