Thursday, May 30, 2019

Why I Don't Teach Unity

I teach college level video game design.  Every semester some student asks about Unity.  Unity is a game development platform.  Essentially, it is a program that does a lot of the game development work for you.  Unity can do things like handling lighting and shadows in 3D graphics.  It can deal with animation for you.  It provides access to a decent collection of art assets.  In all, it can make video game development significantly easier.  In software development though, tools that make things easier always come with a price, and complex general purpose tools can come with a high price.

The first reason I don't teach Unity is that it would defeat the point of the class.  There are two parts to the course.  One is knowledge.  This focuses on design.  It covers things like how to design a game that keeps players engaged, and how to design games with specific goals in mind.  The other part is application.  This is about programming.  Students could learn the design knowledge and apply it to games in Unity, but the course would be more of an art course, not a computer science course if I did that.

The second reason I don't teach Unity is that big game companies (that might be interested in hiring my students) don't use it.  Yes, there are a few large game companies that have used Unity for maybe one fairly small game.  This is not typical though.  Large game companies write their games in languages like C++, mostly from scratch.  If a student applied for a job at a company like Blizzard and cited my game course as a qualification, if I taught Unity, that student would be treated like a second class applicant.  Blizzard is not looking for Unity developers.  Blizzard is looking for developers who can write games without the need for a crutch.  If I want my course to be a good selling point for getting a job in the game industry, I cannot take the lazy approach and teach students to use a game development platform that does all the heavy lifting for them.  They need real experience with real tools.

The third reason is teaching problem solving skills and providing practical experience.  While many of my students do have an interest in becoming game developers, most of them won't end up in that industry.  Learning to write games using Unity will be worthless to these students.  It does not carry over to other applications.  It also solves the hardest problems for them, denying them experience that will help build their problem solving skills.  Writing games from scratch does provide significant experience that will carry over to other applications, and it provides an excellent opportunity to build problem solving skills.

The fourth reason is that relying heavily on 3rd party tools carries a lot of risk and difficulty.  The main problem is that tools designed to be general purpose are rarely ideal for any given specific purpose.  Unity is designed to be suitable for a wide variety of games.  This means that it is tracking data and doing processing that is probably not necessary for any given game.  A game of one genre or style might require something that other games don't really need, but Unity has to provide it to accommodate any game someone might want to make.  If there are things Unity does not provide, that will make it harder or even impossible to make games that need to rely on those things.  This cuts into efficiency, which means that a game written in Unity will almost certainly perform worse than a game written in C++.  For small games, this may make no difference, but for big ones it can limit the market to only users with very high end computers.  This is one element of risk.  The other element of risk is failure.  If Unity has a bug that makes your game not work, you can't just fix it.  Even if you had access to Unity's code, it could take months to learn the code, find the bug, and then fix it.  This is rare, but it is worth considering, and big game companies do consider it, and they don't use 3rd party game development platforms for these reasons.


These are the top four reasons I don't teach Unity.  They do not cover everything though.  Unity is mostly used by small indie developers who are either not interested in hiring or who cannot afford to pay even the low wages of a CS graduate.  It is certainly a useful platform for hobby game makers who like to tinker.  It can even be a good gateway into game development for people without much programming experience.  It is not appropriate for a course in a college Computer Science department that wants to produce high quality graduates who have good programming skills, and it is certainly not appropriate for giving students knowledge and experience that might help them get a job in the video game industry.  This is an industry that gets a ton of applicants, and even a small edge is worth quite a lot.

Unity is not terribly hard to learn.  Like I said, it does all of the heavy lifting for you.  Real game programming requires decent math skills.  Unity does most of the hard math for you.  This makes it trivial to learn compared to real game development.  There are plenty of online tutorials and courses for learning to make games in Unity, which is why indie developers with little or no education in computer science can do it.  People that want to learn Unity have plenty of resources available to them.

I want to provide the best education I can to my students.  Teaching them something that is probably not going to be useful to them does not do that.  Teaching them something they can easily learn on their own with a little bit of study online does not do that.  Teaching them skills that are useful in a variety of places and knowledge that is difficult to find will provide them with the value they deserve.

No comments:

Post a Comment