This project was a fun and challenging endeavor, where I had my first opportunity to work within a large team of differing disciplines to develop a vertical slice of a game. During this project I focused on the player and their interactions with both boxes and machines, alongside optimization and bug fixes.
This was also my second adventure within Unreal Engine, so I wanted to challenge my self to focus solely on the core aspects of the game that would be used the most and would require the most optimization.
Additionally, I spent a great amount of time bug fixing, both to get more experience with Unreal Engine and how different tasks are achieved within it, and to improve my understanding of various features i have less experience implementing.
To enable interaction with the world and the required mechanics, as specified by the design team, I primarily focused on:
Player Grabbing and Moving Objects
Rotation of Grabbed Objects - keeping objects locked to multiples of 90 on all axis
Automatic Object Positioning
For player interaction with boxes, the grabbing system involved casting a trace from the player on input, rounding the grabbed objects rotations on all axis to a multiple of 90, and setting its distance from the player at a fixed distance. Originally, the distance was the line trace distance + the radius of the grabbed object, ensuring that grabbing the box on any point would result in a consistent distance. This was done due to the ability to use the scroll wheel to move the box back and forth from the player. However, on testing, this was changed to a constant distance.
Rotation made use of the WASD keys and the forward object vector to ensure that pressing the A key always rotated the box left, irrespective of the boxes current orientation / rotation.
Object positioning simply set the box position to a defined space when looking at a machine while holding a box.
I also worked alongside the audio team, taking the audio files and ensuring they play and stop at the appropriate times.
Additionally, I worked on Player settings alongside the design team, including various options in the settings menus such as Graphical Quality, Resolution and Toggling Box Pickup on Clicking or Holding.
For any systems I worked on that required constant events, rather than using a Tick event, I opted to use Timers, set to either 60fps or 30fps depending on the task and its importance. This significantly improved performance on lower end systems and provided a smoother experience.
Following this project, I feel I prefer working with a team as it allows for a more dynamic and collaborative work environment, where I can run through ideas with others and learn from their perspectives and insight.
I learned a lot when it comes to teamwork and bug fixing. I also gained a deeper understanding of player world interaction and hope to expand upon this in various ways in other projects. Another valuable lesson I learned was the importance of breaking down complex problems into smaller, manageable tasks. This helped to make my code more general, flexible and allowed for the easy addition of new features as needed.
I used to take a fully practical approach, only coding what was necessary at the time and/or only storing general code within the classes it originated in. However, I have since decided to take a more mixed-method approach, coding what is needed to get the task working, then refactoring some of the more general code, making feature extension easier.
I have equally, learned a lot about working in a multi discipline team. Working in such a way has improved my workflow around meeting goals and reporting progress both to lead programmers and in mixed programming and design meetings, enhancing my ability to work within an iterative process with changing objectives.