Matteo Graizzaro

Game Programmer


In the first UE4 project I got involved in, I was tasked to help the author by implementing supportive systems to polish the user experience. I got the chance to step outside my comfort zone and try the famous blueprints of Unreal. The result has been satisfactory and it is possible that I will explore this engine more in the future.

Specifications

  • Helped from time to time
  • Developed in Unreal Engine 2.26
  • 3D Environment
  • More about the people who helped the development in the project downloadable build.

Project goals

  • Gain experience in working with the Unreal Engine

First system the player interacts with. Implemented by the artist alone at the beginning of the project, I rearranged its code once I took over him, by introducing functions and other small changes, to make it easier to read.
During the development more was added to the blueprint, but just before the release, in order to simplify the project use, it was decided to reduce the amount of inputs to just the ones to open the menu and to switch from and to the flying mode, and control it.

Movement

Basically, it is an interface between the various inputs and the already built-in system of movement.
To avoid an endless fall I implemented a system that detects when the player will reach a z coordinate under a specified threshold, and it will move it to the origin position.

Flying

I was able to simulate flying by changing the camera distance from a 3rd person distance to a first, hiding the player model and removing constraints such as gravity.
It is an instrument intended to be used to explore the environment more freely and rapidly and was also employed during the development.

Menu

A piece of code that only arrived towards the end of the project. It manages the interaction between the player and the UI. Such as positioning the player after the initial intro ending or its visibility when the menu is open, to prevent an intrusion into the camera frame.

During the project development, I had to program various complementary systems to further polish the environment.
Here are some of them:

Group generator

In the original concept, you can notice groups of flying books moving around the buildings.
To recreate the effect I developed a blueprint to randomly generate a group of Static Meshes, which are then moved following a Spline.
The code is based on the vertex animation tutorial by Ghislain Giradot.

Generate

Starting from the centre, and proceeding in a circle, transforms, materials and meshes for the books are randomly generated, which were subsequently made visible in the editor to allow the artist greater freedom to edit the finished product. This generation is triggered using a boolean.

Instantiate

Once the generation is complete or the game is started, the randomly generated transform, material and mesh arrays are read and used to create static meshes.

Spline

Any object (in our case the flying books) can be moved in the environment through this blueprint. The artist can freely customize their path through a Spline, and their speed and direction of travel in the editor.

Spawn actors in radius

To speed up development in a couple of cases, I developed this blueprint that deals with instantiating an actor a number of times at regular spacing in a circle of radius of choice. Customization that I could add in the future could be the possibility to select only a portion of the circle.

Orrery

One of the first blueprints made. It merely controls the movement of an orrery positioned at the highest point of the environment.
The initial idea was to activate a particle effect to coincide with the alignment of the planets, but there has never been time to accomplish it.

One of the last systems to be introduced in the project, and also one of the most complex. It is composed of multiple blueprints and parts of blueprints, which communicate with each other through events.

Master

Head of all the User Interface, it handles the startup intro and the toggle of the Menu.

Intro

The intro is composed in the Sequencer and is then executed at the start of the game. A custom event called OnEndedIntro is called once it is finished. To make sure the player doesn't mess it up, his inputs (outside the key to show the menu and therefore interrupt the intro) are disabled during the execution.

Menu

Shown using the M key, the menu allows the player to explore the credits and exit the game. Several controls have been put in place to block and hide the player while it is shown.

Credits

Necessary to give due credit to those who developed, collaborated and inspired the project, this blueprint contains a list of UIWidgets that are shown in sequence at set points in the intro. A fade effect was introduced by programming to make their appearance and disappearance more elegant.
Some limitations of this system are the obligatory sequentiality of the UIWidgets (there cannot be two at the same time), and the same speed for the fade animation for all.

First attempt to use Unreal Engine 4, this project taught me a lot about the software and its systems. A lack of strict control helped me develop the systems freely, and constant feedback and requests made me develop flexible systems that could be easily expanded in the future. Unfortunately, the absence of an online repository made it impossible to work on the project without disrupting the artist.
If I could go back in time I would:

  • Establishing an online repository for the project. It would allow more than one person to work on the project at the same time, while also keeping a history of the changes.
  • Use C++ to speed up the development of simple systems.
  • Rely more on the use of functions and macros to organize the blueprints.