Unity: Game Development for Everyone

When I imagined game development, I imagined an expert programmer typing thousands of strings to create a game. I often wondered how much time it would take a group of coders to create a game. Would it take a year? 5 years? I thought to myself, how can they memorize all these formulas from scratch every time they make a new game? Little did I know that game engines are a way to streamline and simplify the game development process and avoid all those things I made up in my mind. When I first opened up Unity, I kept trying to decide which changes I needed to make in the code to affect the game, little did I know that Unity was developed with the thought that there should be an interface that should prevent the need to write new code for every simple change. Through the interface, a whole game can be created without ever needing to write any code. It seems to me that Unity has allowed for people who are not programmers and coding wizards to be able to create their own works and share their ideas.

This has also paved the way for the localization and internationalization to enter game development from the beginning rather than being an afterthought. Through a project some colleagues and I recently completed, we discovered that localization has been built into the Unity interface streamlining the process for games to be localized. I would like to share some examples of things we learned through or localization of one of the demo Unity games.

FPS Microgame

figure a

We decided that for our pilot project we would take one of the demo Unity games that you can install upon downloading the Unity software. One of the reasons we chose this game was because it was developed by Unity. Knowing that Unity supports localization directly, we hoped that they would keep localization in mind. Also, there were static images with text and in-game menus that seemed easy to work with. The images with text could be localized through DTP (figure b) and the text on the buttons could be changed through the dashboard.

figure b

As you can see in figure a, once we were able to implement the I2Localization into Unity, the start menu was simple. We changed the text on the buttons and we even added a language picker, a function that is built into the interface with I2Localization enabled. In the pop-out menu, you can see how we added the text for the various languages according to “key terms” that we determined in a separate menu.

Localization Issue #1: Font

We had some challenges that we were not able to overcome in our limited time on this demo project. Our first major issue was with displaying Japanese text. According to the most updated Unity Manual, “Unicode text allows you to display German, French, Danish or Japanese characters that are usually not supported in an ASCII character set”. While our German text had no issues, the Japanese would not show. We downloaded and imported several different Japanese fonts with no success. As you can see above, Main shows the actual text that should display, while secondary should replace the font. After various attempts, we concluded that there could be an encoding issue with the entire game that is causing a font issue for CJK languages.

Issue #2: Lack of Internationalization

The objective scripts were our biggest challenge of this project. As displayed in the screenshot above, we were only able to successfully localize one of the three scripts related to the objectives. The reason why they presented such a challenge was because of the way they were written in the code. Rather than being strings that were hard written into the code, the game would conjure the text up depending on the parameters of the level and how far the player had progressed. From a programmer’s perspective, this might make things more streamlined, but for us localizers who did not understand C#, we did not understand how to internationalize the code.

In this screenshot, it shows us the why behind the code. The text displayed is being called into the code a variable. We were not able to make them strings in order to rewrite the text. The variables, as they are written, seem to be incompatible with the I2Localization add-on of Unity. If we understood C# better, we might have been able to recode the text in a way that was still conditional but allowed for better internationalization. We did find one solution in simply replacing the message notification with an I2 localized string as seen here:

The issue with this fix is that when we replaced “message” with a localized string, it replaced both the beginning objective and the winning message as they are both called by the same variable.

Final Thoughts

Unity’s interface is great for game developers but presents some challenges for localization. This is mainly due to the fact that developers do not create a game with internationalization and localization in mind. These are usually an afterthought. If these two steps are integrated into the development process from the beginning, that can be avoided, and Unity has made that easier than ever. There are many localization professionals that I know who are avid game enthusiasts, so I predict that in a not-too-distant future, internationalization will be fully incorporated into the game development process.