Over the course of the past week I decided to take on the challenge of porting my current game prototype from the Godot engine into Unreal Engine.
Source code examples for the project are available here.
I started working on the Godot prototype around 3 weeks ago. I find small amounts of time to work on my project in the morning before work as well as an evening or two during the week. Since I have a full time job as a professional software developer it can be difficult to find the time to work on personal projects. Game development has always been a passion of mine so I find a way to work it into my schedule.
My focus while porting to Unreal was to refresh my knowledge of as many engine features as possible. It has been around a year since the last time I worked in Unreal and I wanted a crash course on the latest capabilities. What better way to jog my memory then to re-implement features from my Godot project.
Godot is an open-source game engine which runs natively on linux. Those are the two biggest reasons I started using Godot. Godot uses a node based system where everything is a node and collections of nodes form scenes. You can split off branches of nodes at any time to create a new scene. Then the scenes are pieced together inside of a level node to create a game. Any node can have a script attach to it which it will run during gameplay. The scripting language used is GDScript which is very similar to Python. The node and script based system of Godot makes it very fast to prototype new things.
For the port to Unreal I chose to do as many things in C++ as possible. I used the Unreal graph functionality mainly just to work in the Behavior Tree system and assign a few configurable gameplay parameters in blueprints. I think the best way to learn how to work with an API is to try using it. Then when you run into issues, follow the code path and see what the engine is trying to do. If you can understand how the engine is working underneath your code you’ll be better informed the next time you go to implement some new functionality.
I have always been interested in understanding exactly what my code is doing. That’s a big part of why I got a degree in Electrical Engineering with a focus on embedded systems. If you can understand what is happening all the way down at the microprocessor level then everything above that becomes exponentially more clear. The more knowledge I can gather from all layers of software, the better decisions I can make on how to structure my code.
This post is a high level overview of the conversion process from Godot to Unreal. The following sections will provide a brief outline of a few development areas. If you’re interested in more detail, check out the related pages to find expanded coverage on each topic.
The goal of this project was to prototype some stealth mechanics and use a 2D popup book aesthetic similar to the one used in Octopath Traveler. The player movement includes basic motion in a 3D environment as well as some custom physics manipulation to allow the player to climb ladders.
Basic Guard AI
Since it is a stealth game prototype, you are going to need something to hide from. For this I implemented a basic guard actor with a little AI logic to help him out. The guards respond to noises that the player currently creates on a fixed timer. Whenever the guard hears or sees the player, he is off to the races and will follow the player until the player can lose him.
When the guards aren’t busy running after the player, they can be found strolling around between a few target points on the map.
Sprite Outline Material
Games that don’t clearly communicate to the player can be very frustrating. To help with communication I created an outline material that is used to leave behind the player’s outline whenever they make a sound. In the future I would like to expand this so other types of objects can creates similar visual sound effects and experiment with prototyping different mechanics that emerge from this system.
Overall I’m pretty happy with the state of the Unreal conversion after only one week of working on it in my spare time. Now that I’m back up to speed on using Unreal, I’m excited to get back to experimenting with new gameplay features!