For those of you who haven't been keeping up with current events in the indie game development space, there's something really important that's happened recently that you should probably know about.
Which leads me to another topic that we can spend some time discussing - Unity 2018!
Developing In Unity 3D
Before we talk about Unity 2018, let's discuss Unity itself. Unity is the game engine in which we've been developing Where Shadows Slumber for the past two and a half years, and even longer ago, when we were working on SkyRunner. Developing in a game engine makes things a lot easier for the little guys like us, because we don't have to worry (as much) about things like platform-specific dependencies, rendering pipelines, mipmap implementations, etc. Without having to worry about that nitty-gritty stuff, we can spend our time focusing on the more grandiose parts of the development of WSS.
So the question is - how has working with Unity been?
Overall, Unity is awesome. It has somehow managed to find the right balance between an engine that you could use to make a AAA game, and one that you can use in a small, bureaucratically-challenged team. This alone is a great reason to use Unity - compared to using more complex engines like Unreal, it's much easier to get up and running from scratch.
Of course, there are trade-offs, and this is a particularly big one. In order to avoid inundating newer users with game development intricacies and high-level concepts, Unity does a lot of that stuff for you, behind the scenes. While this is awesome in a lot of cases, there are some cases where it can be more of an issue. Imagine you're an experienced game developer, with a sizable team, who wants to do something very specific in the backend. There's a decent chance that Unity will have hidden that part of the engine from you, or at least made it difficult to interact with.
This tradeoff is, at its core, the reason that you would or wouldn't want to use Unity. The next most important feature is the ease with which Unity allows you to develop on multiple platforms. All of your development is platform-agnostic, and you only choose the platform as you're compiling. Is your Android game a success, and you want to build it for PC? Simply hit a different button, and Unity takes care of the rest. I don't have too much experience with other engines, but this seems to be a place where other developers give Unity a lot of credit, and I think it's deserved. I can't imagine having to go through all of the development we've done multiple times for different platforms.
Beyond these bigger points, there are a few other things that might sway you, though they're probably a little less important:
Unity is very UI-based, which means that it might be a little annoying for a hardcore programmer, like myself, whereas this probably makes it easier for someone with less coding experience, like Frank.
Unity is a sort of one-size-fits-all solution, whereas some other engines are ready-made to create certain types of games. For example, Unreal has good support for creating FPS games. If I were to make an FPS game, using Unreal would probably give me a bit of a head start on Unity.
The only language Unity supports is C#. C# is a pretty awesome language, but for those of you who hate C#, or strongly-typed languages in general, it may take some adjusting.
Again, I want to say that Unity has been great for us, and I would probably use it again if I were to start another game. Frank and I wouldn't have gotten to where we are with Where Shadows Slumber if it weren't for Unity.
I mentioned earlier that Unity does a lot of stuff for us, and I specifically brought up rendering pipelines. The danger of using a game engine (that you didn't make yourself) is that other people are making decisions for you, and those decisions are set in stone to a certain degree. On one hand, we didn't want to mess with the collision system, so we were glad to have it. On the other hand, we ended up in a position where we did want to mess around with the rendering pipeline, and we weren't able to.
Enter Unity 2018.
I normally don't pay too much attention to the ins and outs of the various updates that Unity makes. They've been marching out updates, both major and minor, for a while now, and we've just been going with the flow. Unity 2018, however, has managed to catch my eye. Unity recently released a blog post describing the updates they've been making to graphics and rendering in Unity 2018, and I have to admit that I'm pretty excited about it.
As I mentioned before, Unity does a good job of riding the line between too-complicated-for-new-users and not-powerful-enough-for-power-users, and the updates described for Unity 2018 somehow manage to play to both sides. If you've ever held a conversation with me about Unity and Where Shadows Slumber, then you know that I've been struggling with getting shadows to render the way I want, while also maximizing the efficiency of the rendering pipeline. Fortunately, Unity 2018's focus on graphics and rendering has provided two huge features in this area, one for each of the two camps.
Scriptable Render Pipelines is the feature that I'm excited about, as it's the feature aimed toward the entrenched coder. Rather than using the hard-coded rendering pipeline that we've been wrestling with for the past two years, we can create our own rendering pipeline that does exactly what we need it to.
"Programmers can now write custom renderers tailored specifically to their project."
This is a huge boon to us, and to game developers everywhere. Rather than hacking together a shader that uses Unity's shadow-mapping inefficiently, we can (hopefully) create a rendering pipeline that performs shadow-mapping exactly how and when we need it. This should result in more efficient rendering, along with less headache while writing shaders.
Shader Graph is the other great feature Unity 2018 will have, and is targeted toward less code-inclined users. Unity provides a standard shader with a bunch of options, so you can create the materials you want. However, if you need more customization than the standard shader provides (like we do), you're suddenly thrust into the depths of shader-writing. With a masters degree in computer science, I've been just barely keeping up with writing our shaders, and there's no way that Frank would have been able to do it. This is really a bummer, as the artist tends to know a bit more about the "look" they're trying to get.
"It’s simple enough that new users can become involved in shader creation."
Unity 2018's Shader Graph changes this - rather than writing complex shader code, Unity exposes a simple interface for creating shaders graphically. This would allow an artist with no coding experience whatsoever to build a custom shader to display things exactly as they want - giving the artist the control they need over the "look" of the game, and allowing the programmer to focus on the game itself.
I'm sure that Unity 2018 comes with quite a few quality-of-life updates, as well as some other new and interesting features. For me, however, it's all about those rendering updates!
Beyond Where Shadows Slumber
A friend of mine recently asked if I would use Unity for my theoretical next project, and if I would recommend it to someone just starting on a game. The answer I gave him is one that applies to every question - it depends. In fact, it mostly depends on the factors described in the first section.
Overall, I'm inclined to say that I would use Unity again. After over four years, I've come to know it pretty well. It's powerful, and allows you to create and iterate pretty quickly. That said, there are some exceptions; I would probably pass on Unity for my next project, or at least do some more research, if:
I had very specific backend/optimization requirements
I were working with people who had a lot of experience with a different engine
The scale of the game were much bigger
The game involved a lot of networking/server concerns
There are probably other factors that come into play - basically, it pays to do some research before you dive in. I would recommend Unity, but more than that, I would recommend knowing what you're getting yourself into. There's nothing worse for your game than getting halfway through it in an engine that won't work for you in the end.
If you're anything like me, at this point the word "Unity" no longer sounds like a word. I'm gonna take that as a sign and wrap this post up; I hope I was able to answer any questions you might have had about working with Unity, and that I got you pumped for Unity 2018!
If you have any questions about working with Unity, or if you have any other questions about Where Shadows Slumber, feel free to contact us! You can always find out more about our game at WhereShadowsSlumber.com, find us on Twitter (@GameRevenant), Facebook, join the Game Revenant Discord, and feel free to email us directly with any questions or feedback at contact@GameRevenant.com.
Jack Kelly is the head developer and designer for Where Shadows Slumber.