Recent posts

  • Asynchronous programming in Unity: Coroutines vs. async/await

    This article aims to contrast two different strategies for writing asynchronous C# code in Unity projects: Unity’s Coroutines and C#’s asynchronous programming model via async/await/Task. We start by quickly introducing both concepts. Following, we discuss how game developers have a...
  • Terraced Terrain Generator performance improvements

    This post details the process of improving the performance of Terraced Terrain Generator (TTG), a tool developed to procedurally generate terraced terrains in Unity. For more info about TTG, check its website, repository and a detailed explanation on its development...
  • Developing a Terraced Terrain Generator

    In this blog post I will discuss some technical details and give a glimpse of Terraced Terrain Generator’s (TTG) development process. TTG is a free Unity tool for procedural generation of terraced terrain meshes. It’s open source and it’s on...
  • [Postmortem] Parker - the game

    In this article, I discuss and analyze the development of my last project as a Game Developer at Fantazm: Parker - the Game, an online multiplayer turn-based team strategy game. After a quick introduction of the project, its biggest challenges...
  • Game testing made easier: decoupling code

    Most (or close to none) of the game projects I’ve worked in the past implemented automated tests. I was aware of the benefits this type of testing could bring, but I was also knew that implementing them could be quite...
  • Finally, a proper Game Design Document (whatever that means)

    A Game Design Document (GDD) is a famous and popular tool used by game developers to… well, to document the design of a game. Even though some say it’s an essential part of the development process, most of the projects...
  • How Windows Mixed Reality’s poor reliability forced a kiosk game switch to HTC VIVE

    In a previous article, I described the development of VoedingscentrumVR, an educational, kiosk, VR game for Windows Mixed Reality. Although at the time of writing it seemed like it was the end of that game’s development, some surprises crossed our...
  • When software internationalization isn’t just about UI: a tale of how a parsing error crashed our game

    Whenever we talk about adapting a game to different countries, the first thing we often think of is localization, but we sometimes neglect its sibling: internationalization. Wait, what’s the difference again? Internationalization is the process of designing and developing your...
  • Null check and equality in Unity

    In some programming languages – like C# – it is a common practice to use comparison operators and functions to check for null references. However, when programming in Unity, there are some particularities to keep in mind that the usual...
  • Unity’s scripting duality and object destruction

    The Unity engine provides users with tools and abstractions that ease its usage and hide its complexity. Although we often take these commodities for granted and completely forget they exist, we often face a situation in which they become apparent,...
  • C#’s finalizer/destructor trap

    Let’s talk about C#’s finalizers (also called destructors in C#) and how a common mistake when using them might lead to unwanted behavior, especially in applications made with the Unity engine. Finalizers A finalizer is a method that is called...
  • [Postmortem] Developing an educational, kiosk, VR game for Windows Mixed Reality

    In this article I analyze the development Voedingscentrum VR, an educational, kiosk-style and Virtual Reality game I helped to develop at Fantazm from October 2018 until April 2019. After a quick introduction about the project, the biggest problems that surfaced...
  • FP: Currying vs. partial application

    While learning Functional Programming, there were two concepts that for me, were really hard set apart: currying and partial application. One day, I finally decided I would dig deeper and learn what each one represents and more importantly, why I...
  • Android 6 (Marshmallow) permissions and Unity

    While working on Overclock, our team faced a new problem with Android 6 (Marshmallow): all permissions were requested when the app launches the first time instead of when the user downloads the app. Not only that, but the permissions are...
  • Unity serialization part 3: Scriptable Objects

    This post is part of a series about Unity serialization. Click here for part 1: how it works and examples or click here for part 2: defining a serializable type. On the last article, we learnt how we can define...
  • Unity serialization part 2: Defining a Serializable type

    This post is part of a series about Unity serialization. Click here for part 1: how it works and examples. On the last article, we discussed about serialization concepts and how Unity implements it, learning which types can be serialized...
  • Unity serialization part 1: How it works and examples

    This post is part of a series about Unity serialization. On this series of articles we will discuss a topic that is extremely important to Unity development: serialization. This subject may be a bit cloudy for beginners, but understanding it...
  • How does Unity scripting work under the hood?

    On the previous post we learnt how Unity exports to so many platforms. Now let’s talk about a subject that can sound unnecessary at first, but helped (at least me) a lot on the process of understanding how Unity works....
  • How does Unity export to so many platforms?

    So for my first article I picked a not so simple theme, but one that has been extremely intriguing to me lately. This week a friend, during a talk about game development and Unity, asked me: “How does Unity export...