GameCast Director
The plugin was built to support multiple camera behaviors which are player perspective, third-person, spectator and free-roam. It will act as a director, providing the ability for the users switch between different players and regions effortlessly. The ability to move around freely in space will be useful to provide cinematic shots as well as capture action moments.
Key Features
- Implemented runtime camera mode switching using the State Pattern (first-person, third-person, spectator, free-roam) which provides the ease of extensibility of the camera modes and is easily testable for multiple camera modes.
- Created a bookmark system to record the camera location and ability to cycle between the camera positions to provide designers to provide custom spots in the spectator mode.
- Implemented camera profile to store the intrinsic data required for a camera mode with the Flyweight pattern to ensure ease of access to edit the variables at a singular point.
- Profiling-driven development: custom stats and Unreal profiling to validate stability and transition costs.
- Created and maintained the Design Architecture Review(DAR) document.
System Architecture
The plugin sits between the game session and a director interface, orchestrating camera managers and camera controllers for broadcast/cinematic output.
Camera Mode Switching (State Pattern)
Instead of using conditional logic to swap behaviors, each camera mode is represented as its own state class with a shared base. Switching modes swaps the active state object at runtime with the additional use of Factory pattern to ensure the right subclass methods are called automatically with minimal code instead of individually calling the specific class methods.
Camera Lifecycle (Template Method)
A shared base defines the camera lifecycle steps, while subclasses override the mode specific behavior. The use of Template pattern and Liskov Substitution Principal which keeps camera setup consistent and makes new modes safer to add.
Profiling & Performance Validation
Performance was validated with Unreal profiling and custom stats. Mode switching and the ApplyCameraMode path were measured to avoid runtime spikes during transitions.
Challenges & Engineering Decisions
-
Intuitive
- The target audience of the plugin would be ESports organizers, and we would have to ensure that the options provided in the user interface are easily understandable and provide the end user with the easiest way to navigate and to switch between modes.
- To ensure that we don’t stray away too much from the norm, we plan on discussing with our Universities ESports manager and getting their opinions on what they would like to control and capture during a match.
-
Performance
- The use of a User Interface will add a performance overhead on the GPU if we use Unreal Motion Graphics as we plan on providing view for multiple modes on the UI.
- The solution we are looking to implement in the future is the use of Windows Forms so that we can get more flexibility and better performance as it won’t have the overhead of Unreal Motion Graphics.
-
Recording Action Moments
- The design of recording an action moment and storing it would cause a significant performance hit on the system on which it would be running.
- We plan to have profiling and set a benchmark from the get-go to ensure there are no spikes in performance and try to find the optimal data structure to store the recording and clean the unused.
Video Demo
Demonstration of the GameCast Director plugin showing runtime camera mode switching, bookmark capture, and smooth transitions during live gameplay.
What I Learned
The process of designing and documenting the plugin from the ideation to implementation phase was challenging and knowledgeable about the importance of needing to decide on the programming patterns that suited our plugin and where those could be implemented. The approch to development we had in mind was to have an extensible codebase to provide future enhancements was something that I think would have been diffucult to impart midway throught development and proved how important the ideation and documnetation is. The plugin implementation provided me with more hands on expereience with Unreal C++ to solve a problem that hadn't been tackled yet by other developers.