top of page
Logo.png
itch_32_white.png
logo_github white.png

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

Audio

Who did what

  • Sébastien (Ludwell)

    • UI

    • Object interaction

    • Scene load management

    • Audio

    • Entity hierarchy

    • misc

  • Marc-Antoine (Power Key)

    • Three Cs

    • Gameplay

    • misc

  • Steven

    • AI

bottom of page