
Production Date
Autumn 2022
Production Duration
05 weeks
Project genre
3D, FPS
Team size
03
Hitman Poly is a first-person shooter where the player must eliminate a target and then extract from a city.
My primary job on this project was the UI, but I also worked on the object interaction system, the scene management system, and the audio system as well as the entity hierarchy.
Project details
Programming
Towards a modular UI system
The UI system produced for this project uses a simple layered hierarchy where a singleton UIManager contains UIViews (any specific UI "screen"). The UIViews are game objects, and they can have as many UIElements (button, selectables, etc) as needed.
A system of show/hide exists on every UIView. The base implementation implies a fade-in and fade-out respectively, but a custom implementation can be extended easily on any UIView concretion.
UIElements can have their own concretion where needed for custom behaviours such as a filling bar, a number counter, a text printer, etc.
A system of Action (C#) is used as a callback system to chain up views behaviours and/or transitions as needed when a show or a hide is completed.
A pickable object for everyone
A system was implemented to allow any entity to pickup, drop or use an object.
A simple hierarchy is used where a base class "Pickable" has children such as "Throwable" and "Weapon". Behaviour such as OnPickup, OnDrop and OnAttack are used to dictate what happens based on the concretion at hand.
A throwable would fly away OnAttack whereas a ranged weapon would fire a bullet for example.
Asynchronous scene management
Scenes both load and unload in an asynchronous manner when required.
A multiple scene hierarchy is used in Unity to avoid reloading managers and other singleton objects that should always exists in the game environment.
A base scene contains every persistent manager and singleton.
The other scenes can be loaded when required.
This allows for decoupling every scene from any system it doesn't use or that it doesn't require.
Audio system
A simple double layer system was used for this project.
An AudioController concretion containing AudioElements is used to call either a random sound or a specific sound from any given AudioElement.
An audio source can be set for every AudioController to allow for a better 3D layering of the sound if need be.
Retrospective
This system still needs a lot of work to make it as modular as it should, but it does what it has to do.
Entity hierarchy

An inheritance-based hierarchy was implemented for the project's entities.
Entities can implement any non-abstract concretion of the hierarchy based on their specific needs: living, object, etc.
Although this kind of system doesn't suit well with Unity's component-based architecture, it did the job for every aspect of the game that required it.
Retrospective
A composition over inheritance approach would have provided a better modularity to the entities of the game, all the while avoiding the non-respect of the interface segregation principle in some concretion.


Design
Teaching the player with a text-based tutorial
A text-based tutorial was implemented to facilitate the learning of mechanics and goals of the game.
The player can skip the tutorial by pressing the key that would usually close the screen he or she is viewing at that time.
Although retention is far less prominent with such a boring teaching process, our lack of time to produce a good learning experience made this over nothing a viable solution.
Credits
Visuals
-
Licensed packs from Synty Store, https://syntystore.com/
-
Animations are from https://www.mixamo.com/
Audio
-
UI
-
UI Selection: broumbroum, sf3-sfx-menu-back.wav, https://freesound.org/people/broumbroum/sounds/50557/?fbclid=IwAR1ONbntrj8aGbL2ipBH8di0K6IPJ9zQW3ON6kyjxEMapsRJkzTW6HI-D90
-
UI Validation: broumbroum, sf3-sfx-menu-validate.wav, https://freesound.org/people/broumbroum/sounds/50565/?fbclid=IwAR1x1-Tc-LZjz-FNw6tZitrUqwaJHDqYiiU1dN9a5FvV925iMtP2uCqLlAQ
-
Every other UI sounds were made by Ludwell using the Chiptone app: https://sfbgames.itch.io/chiptone
-
-
Ambiance
-
Micha, Puka A., Andrew Dodds, Krotos Starter Library
-
-
Other
-
Krotos Starter Library sound pack
-
Who did what
-
Sébastien (Ludwell)
-
UI
-
Object interaction
-
Scene load management
-
Audio
-
Entity hierarchy
-
misc
-
-
-
Three Cs
-
Gameplay
-
misc
-
-
Steven
-
AI
-