Development Log #2 -

Click here if you want to jump straight to what's new.

This week I want to briefly go over some of the technology and assets used to create Factory Life as well as highlight a few new additions. I won't go into great detail on each since this is meant to be an overview, but I plan on writing more in depth about some of the systems in the future.





Unity; My Engine of Choice

First and foremost, the most important part of any project; the game engine. Chances are if you're reading this, you know what a game engine is. For anyone who doesn't, think of it as the architecture or framework that makes the game run. Game engines also usually contain tools packaged in an editor to make life easier for game developers. It comes as no surprise that Factory Life is using one of the most popular free game engines out there, Unity. Without getting into a debate about which engine is the best choice for your game, I want to stress that the choice I made was the best choice for my game. I have many years experience working in Unity and felt comfortable tackling a larger project in the engine. Your own project may have very specific needs and something such as Unreal may be the better choice for you. Or you may feel more comfortable in another engine such as Game Maker Studio 2 if you find 3d a bit daunting. The bottom line is there is no right answer as to which engine you use; the only right engine is the one you can finish your game in.

Why Unity?

Familiarity; I have many years of experience making prototypes in Unity, and already have one game published on Steam using the engine. I know the editor front and back, and feel comfortable making a project of a larger size using the software

Asset Integration; The Unity asset store is a valuable resource for finding both tools and ready made assets to develop and enhance your game. Many would argue against the use of assets; historically gamers have shown a dislike for so called "asset flips" (Games which use only assets, copy and pasted with little of their own code or gameplay. This leads to very low effort titles). However, the careful use of editor assets to speed up the development process is too big an advantage for a solo developer to ignore. Would you spend years designing a better tire when you're trying to make a race car? I suppose that depends on your goals, but for my own projects, I have no problem using already established and well supported tools.

Ease of rendering; This is a huge plus for Unity. It just works out of the box. What I mean by this is that many of the important things such as materials, lighting, and physics are handled for you and require minimal tweaking. Where things become a bit more difficult is getting the most out of engine. Unity will handle some of the performance part for you, but you do need to be aware of how to build an optimised scene when you start making a more complex game. I've learned many tricks over the years on how to improve performance, and I may go into further detail in future articles on how some of this is achieved.

Compatibility; One of the biggest advantages to Unity is it's near universal compatibility. It can deploy builds to all the major platforms including Mac, Linux, and consoles (and PC obviously). This reduces the amount of work down the road if you want to port your game to other platforms. Another huge plus for the engine is the scalability of the rendering. What this is means is that there is built in levels of graphical fidelity settings, and with minimal work by the developer you can allow your game to run on much older hardware. I'm able to take Factory Life to my 10+ year old PC and run it on a 5th generation Geforce card and still have decent FPS. This assures me that potential users will be able to run the game on even the most modest hardware available in the last decade.

The Case Against Unity

Lack of low level control; Most developers, myself included, don't need this much control over the engine. This does lead to issues however. That is to say, we are at the mercy of Unity itself. There are certain quirks or issues that need to be worked around. The engine is also better at certain things than others, and optimising can be very difficult.

Write your own engine! Nothing will ever beat writing your own engine from scratch in terms of control over speed and optimisation. Most game developers however are interested in making games, and not engines. One could spend years on this side of development. Unless you have a large team or dedicated programmers, this is a difficult route. It does however lead to full control over a project and is sometimes necessary to achieve the scale and speed necessary for certain types of games.

Nothing will ever beat writing your own engine from scratch in terms of control over speed and optimisation. Most game developers however are interested in making games, and not engines. One could spend years on this side of development. Unless you have a large team or dedicated programmers, this is a difficult route. It does however lead to full control over a project and is sometimes necessary to achieve the scale and speed necessary for certain types of games. All Unity games are trash/look the same; This is a silly argument that I won't waste too much time on. The bottom line is, every game is dependent on it's creators. A low effort results in a low effort looking game. Art and graphical style is entirely dependent on what you put in. The games that usually look the same are using either entirely premade assets or lack any kind of cohesive design. In addition, there is a ton of very successful commercial Unity games that you would never even suspect due to the high quality art and art direction that went into them. If Blizzard can make Hearthstone in Unity, anything is possible.

The Main Tools





Playmaker

Playmaker is a visual scripting asset for Unity. Essentially it allows you to put together actions quickly in a branching, visual structure. It's very handy for fast prototyping and iteration and most importantly, it greatly aids someone like myself in being able to put together an entire video game without any prior industry experience or education. It can do most simple things out of the box and with some knowledge of what you want to accomplish, can do astonishingly complex tasks as well. Make no mistake that this asset will not code a game for you, it just takes out a lot of the low level programming syntax and allows you to tell your game what to do very clearly through a great and ever expandable library of actions. If the power of Playmaker wasn't clear enough, I once again refer to Hearthstone by Blizzard which supposedly relied heavily on the use of Playmaker.





Probuilder

Probuilder is worth mentioning even though it's now actually included as part of Unity itself. Essentially it allows you to build 3d models inside of Unity itself, with both a decent amount of geometry and UV control. It's a fantastic tool for quick prototyping, level architecture, and in my case, even a few of the basic models in the game are made using it.





Rewired

Rewired is an asset that simplifies and unifies the input system of Unity. What this means is it becomes very easy to make inputs that can be easily rebound to other keys or translated to other inputs such as joysticks. I can't say how awesome this tool is especially when wanting to make a modern PC title with custom keyboard binds. It's also useful for those wanting to make multiplayer titles with multiple player inputs such as gamepads.





I2 Localization

I2 Localization is an asset that lets me build Factory Life in many languages at once. Right now the game currently supports English, French, Spanish, Russian, German, Portuguese, Polish, Chinese, Japanese, and Korean. I do plan to eventually add more languages but I figured 10 was a good number to start with and I chose the most popular languages on Steam. Essentially, you to store each block of text you create with an assigned key, and in your UI you refer to that assigned key rather than hard coded text. What this means is you can then switch the language on the fly and every piece of text in the game will change automatically. In addition, the data is stored in a spreadsheet on Google Drive, allowing for quick access for editing and collaboration. The built in auto translate tool works at a basic level but I plan to eventually either hire a service or see if any fans want to assist me in translation.





Enviro

Enviro is a dynamic sky and time of day manager, basically handling all the hard work of making a simulated day and night cycle. Although there are many such assets available on the store, this is the one I happen to be using. It allows you to tweak every little detail about your scene's lighting without having to reinvent the wheel, and also includes weather effects such as rain and snow. A real time saver in achieving the game environment I wanted to portray in Factory Life.





Grid Framework

Grid Framework is another important asset that I use. It handles all the behind the scenes math involved with lining up all of the object and foundation building on a grid. It works closely with Playmaker to ensure that objects and building pieces are built in the proper place.





Highlighting System

Highlighting System is an asset I use to help quickly render highlights when the mouse hovers over an intractable object or when selecting an object. Not a lot to say about it other than it's very quick and easy to use.

These assets represent the most important tools I use in creating Factory Life. In future updates I plan to talk a bit more about how they are used.





Environment Update

I worked quite a bit on improving the look of the city environment. This includes updated models and night lighting. This is still a work in progress and I'm unsure if I plan to have different environments at a later time.

Light Rays

This addition to the game's environmental lighting looks great in conjunction with the new buildings. As seen in the clip above, the sun and moon now cast some juicy looking rays that cascade through the background objects.

Wobbly Object Grabber Physics

I'm not really sure how to describe this but it's basically what you see in the clip when hiring new employees. The model reacts in a realistic fashion when being moved due to being held on a hinge joint.

Object Highlighting

This feature was briefly mentioned in the above section on assets, but I only got around to implementing it this week. It's very straightforward; objects emit a small highlight when hovered over, and then a larger highlight when clicked on.

That's all for this week! Thanks for reading and check back again soon for more updates. Don't forget to join the Discord to get the most up to date info and chat with me about the game.



