C# Programming for Unity Game Development Specialization (4 Course Review)

Learning C# with Unity in the most academic of ways

So, it’s been a while since my last review. I’m alive, I swear! Busy busy. I’m sure you’re here for the review and not my life story so let’s jump into it! While I’ve been self-educating on and off with many different courses/books I didn’t find many worth talking about since my last review. That was, until I took this specialization through the online University course hub, Coursera. The courses range from introducing the basics of C# programming language and go all the way to teaching design patterns. Now that I’ve completed the C# Programming for Unity Game Development Specialization, here are my thoughts.

(since I’m reviewing >4X the content of a typical review, each review will be less extensive)

 

Summary

  • 4 course specialization + capstone (make your own game – optional)
  • Estimated course duration: 5 months @ 6 hours/week
  • Skill level: beginner (but moves quickly to advanced)
  • build an extensive C# foundation
  • learn Unity UI
  • learn design patterns for Unity
  • make several small games
  • peer-reviewed assignments (my favorite part about Coursera)

About the Author

Dr. Tim “Dr. T” Chamillard is an associate professor in Computer Science from The University of Colorado. Where some courses on the Coursera platform tend to go round-robin between a handful of lecturers (each professor teaches a module they specialize in), Dr. Chamillard champions the full four-course specialization by himself.

What else can I say about Chamillard? I took his MonoGame course (which also uses C#) quite some time ago and that is what helped me smoothly transition from GameMaker 1.4 to Unity. Chamillard, like all professors, uses an academic approach to his material. If you’re familiar with Udemy then you’ll know how some of their courses do a great job of keeping you stimulated and thus motivated to power through, but in terms of teaching proper coding etiquette they tend to be severely lacking. Chamillard’s material is the exact opposite of this: extremely informal and aids in building a concrete programming foundation, but rather lacking in stimulation. This means that if you’re not already at least somewhat familiar with Unity then you might not be able to keep up. I’d definitely recommend taking at least one short tutorial series to help you get familiar with the engine’s interface and API. Unity has FREE official tutorials on YouTube that I find myself using often. Honestly, maybe that’s all you need to make games, but for people who find themselves not confident in their coding this course has the good stuff.


Course 1 – Introduction to C# Programming and Unity

Module 1: Write your first C# console application and Unity script and learn how we store data in our programs

Module 2: Learn how we use classes and objects to implement our code

Module 3: Learn the basics of Unity 2D games and discover how we make decisions in our code

Module 4: Get and use player input in your Unity games

Module 5: Complete final peer review and take “Final Exam”

There isn’t too much I can add to what the website lists above. You’re going to start by getting your feet wet with just C# and not actually jump into Unity. What does this mean in practice? You’re making small console applications. This is pretty typical in a lot of courses as opening up Unity for the first time can be intimidating. Going in a little more prepared (knowing C# basics) will make you a little more confident and less likely to get overwhelmed. Once you do open up Unity, this introductory course does an OK job at getting you familiar with the interface. Once again, academic environment, not hand-holding. To be more informative, I’ve said this in the past “oh this course doesn’t hold your hand!”. That isn’t what I mean here. Imagine if there was a superhero called Hand-Holder, this specialization would be his arch-nemesis, The Challenger. A lot of the responsibility to read between the lines is on the student and whether you can keep up will depend on your learning style preference and your experience level. If you’ve spent more than a month in Unity you might consider skipping this course or another. I advise against this. If anything about this specialization interests you, start at the beginning. For reference, I have years of Unity experience now and I could finish course 1 in under a week. At the very least, consider it review. You never know what you might have forgotten! And remember: just because this course targets beginners does not mean it’s easy. Copying someones code? Easy. Learning to program properly so you can think for yourself? Not so easy.

coursera1

Some projects are purely academic. Here we see a button “Destroy Enemy”, which sends a message to the enemies (red circles) to destroy themselves. This project introduces students to the Unity Event System. Despite teaching valuable concepts, these types of projects lack stimulation.


Course 2 – More C# Programming and Unity

Module 1: Learn how we can store lots of data in arrays and lists and use iteration (looping) to repeat actions in your code

Module 2: Learn about abstraction and how we can use it to design and implement console application classes

Module 3: Learn how we can use abstraction to design and implement Unity classes

Module 4: Add text output (like score!) and sound effects to your Unity games

Module 5: Complete final peer review

The second course is similar in pace and difficulty to the first and so you may find yourself wondering if it’s worth it to go all the way. It is indeed worth it and things really pick up with each course after this one. In fact, even if you blaze through the first two courses I estimate there will be times where you have trouble keeping up or get stuck on a difficult concept.

coursera2

This project was simply learning how to work with object pools (reusing objects instead of instantiation/destruction to improve performance). This is a super useful skill that I’ve used in my own games since. The goal was to create a player controller and enemy ships that both can fire missiles. Unfortunately, once again the project is a little boring; however, I took the liberty to put in some extra effort to make the game look more interesting and thus motivate myself.


Course 3 – Intermediate Object-Oriented Programming for Unity Games

Module 1: Start using files to implement your Unity games

Module 2: Learn how inheritance and polymorphism help us write less code for our games

Module 3: Implement event handling to make better object-oriented designs and add menus to your Unity games

Module 4: Explore the complete implementation of a small Unity game

Module 5: Complete final peer review

This is where the beginners will start to sweat and the more experienced individuals will start to have fun (especially the files module, everyone loves working with files right?). You’re going to really put in some strong effort now and each time you do and you make it through a difficult concept you’re going to look back and realize just how much stronger your programming repertoire is getting. Inheritance, polymorphism, events… these are big concepts for first-time learners that will have you writing far less code that is more efficient and logical. Should a player class have knowledge (a reference) of a score HUD class? No, it doesn’t make sense and that is where events come in to play. Not only are you learning about events, but you’re actually learning several design patterns that are explained in the next course. The idea that you can learn one thing and then realize that you just learned much more without getting overwhelmed is simply smart in my opinion and one of the reasons I look back at this specialization with a great appreciation for the curriculum’s flow. Ultimately, this was a deliberate choice to value preventing beginners from getting overwhelmed instead of challenging the very experienced. If you meet the description of the latter and you can find the patience to finish the specialization I assure you that you will at least get something out of it all.

Wacky Breakout is a project that spans over many assignments. Each time I learned something new, I added to the game by applying new concepts learned during that week. For fun, I added Vector Grid from the Unity Asset Store, which I think gives the game some personality (I’d definitely spend a lot more time fine tuning if I were to publish it).


Course 4 – Data Structures and Design Patterns for Game Developers

Module 1: Explore a Dynamic Array data structure and learn the basics of algorithm analysis

Module 2: Learn about and use the common Linked List and Graph data structures

Module 3: Learn about and use several additional data structures: Stacks, Queues, and Trees

Module 4: Learn why design patterns are so useful and discover a number of design patterns useful in game development

Module 5: Complete final peer review

The final course! Things actually drop off in difficulty in some modules here as the course mostly just helps you realize how certain concepts apply to what you’ve already learned in previous courses. For instance, when learning the event system, you actually also learned the observer and mediator design patterns. I found this method of teaching an advanced concept and then expanding on it once it was in my short term memory really gave me a deeper understanding of why I was doing a lot of the things I simply accepted as correct. There is a definite snag at this point in the specialization here, where even if you’ve not struggled at all I have strong doubts you won’t be struggling here. Concepts like graphs and linked list require a ton of effort to master and I found myself frequently writing things out on paper or my white board and iterating until I had that “aha” moment. I found the Python design pattern courses from Rice University were far, far better at creating assignments that really make you apply yourself; however, this course at least is possible to finish without pulling out your hair!

There’s just so much content between the four courses that I couldn’t possibly cover it all here. A few last things I wanted to mention: learning about streaming assets was cool and definitely something I’ll be using in the future. One big reason for using this is if you’re working with someone like say an artist they will be able to change values without actually going into Unity. You can send them a neatly formatted text file with game values listed and have it sync with Unity. That is valuable to say the least. Chamillard tells you to use Resources.Load() frequently, but from what I understand Unity officially advises against that. I would sum this up to a professor who learned Unity and is applying his knowledge of C# as best he can. Obviously he isn’t a Unity programmer by day and little mistakes like this are inevitable. In any case, as Unity says:

2.1. Best Practices for the Resources System

Don’t use it.


Capstone Project

At this point, if you’ve finished the fourth course you have to decide between calling it a day or jumping into the capstone project. The project will have you design your own game and make it from scratch. This is an opportunity to really solidify all the new information you’ve learned and work on applying it all. I personally decided against it.


On a final note, this specialization has peer review! This means your assignments will be graded by a real person (another student) and you get to review other student’s and see what they did differently. This is my favorite part about Coursera. Unfortunately, when Coursera stopped being free by default (those were the days) the number of students enrolling dropped dramatically. This means getting help on the forums or getting enough students to review/be reviewed by has been greatly reduced and you may find yourself having to wait some days (hopefully not weeks) until you can move on. It does seem like if I couldn’t get enough reviews the site just accepted half the normal requirement and I could move on.


Summary

This specialization isn’t going to make you a pro at making games with Unity. You won’t be fully prepared to make an RPG or even a little pinball game that is complete and ready for publishing, but that’s not what the specialization is for. What you’re really here for is to build a strong foundation of C# theory and how to apply big concepts to a Unity game. While this is what almost everyone promises in their course, I found C# Programming for Unity Game Development Specialization to be the best example of this promise that all other courses seem to lack in one way or another. With that said, if you don’t have a super-hero work ethic you likely will find the challenging nature to be beyond reasonable. Also, I should say that if you’re used to the stimulating environment of those “go gettem, you’re doing great!” type courses then you will doubly struggle to find the courage to finish this challenging C# Unity specialization.

Note – I really learned way more during this course than with anything else I’ve taken. This is because it kind of forces you to do a lot of research to fill in the blanks. While that is great and all, I can’t in all fairness, attribute my own research to the specializations review and so will not consider that as part of it.


Pros

  • superb C# coverage – from beginner to advanced
  • make a lot of games
  • beginner-friendly (no prerequisite knowledge, but a ton of effort is required)
  • academic environment
  • no hand-holding (to the extreme!)
  • peer-reviewed assignments (also a chance to learn from reviewing others!)

Cons

  • lacking in engagement
  • some assignments lack a challenge
  • could have done a better job at explaining the Unity interface at times

RatingCircle8.5


Links

Full Specialization

Intro to C# Programming and Unity

More C# Programming and Unity

Intermediate Object-Oriented Programming for Unity Games

Data Structures and Design Patterns for Game Developers

*If you can’t afford the course be sure to apply for financial aid (small font near the enroll button)

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s