⚙️ Configurable UI & Data System
-
Modern UI Architecture: Leveraged Unity UI Toolkit to enforce a strict separation between the visual layer (UXML/USS) and application logic (SettingsView), mirroring modern MVC web development standards.
-
Robust Data Persistence: Engineered a centralised SettingsManager Singleton to wrap PlayerPrefs and AudioMixer logic, ensuring type safety and data integrity across game sessions.
-
Responsive Visual Design: Utilised Flexbox architecture and USS styling to create a resolution-independent, professional dark-themed interface with custom control overrides for a consistent user experience.
-
System Integration: Seamlessly bridged UI events with Unity's core systems, mapping slider values to exposed Audio Mixer parameters and dropdowns to global Quality Settings in real-time.
🎮 Modular Player Controller
-
Interface-Based Decoupling: Utilised the IInputReceiver interface to create a strict contract between input handling and movement logic, ensuring the controller is agnostic to the input source (e.g., AI vs. Player).
-
Reliable Physics Implementation: Engineered movement logic within the FixedUpdate lifecycle using Rigidbody forces and velocity (using Unity 6 linearVelocity), ensuring smooth, frame-rate independent gameplay physics.
-
Modern Input Integration: Implemented the Unity New Input System with event-driven callbacks (performed, cancelled), forwarding data purely through the interface to maintain modularity.
-
Separation of Concerns: Strictly divided responsibilities: PlayerInputHandler solely manages input events, while PlayerController exclusively handles physics and state, adhering to SOLID principles.
💻Modular Game Flow System
-
Decoupled Architecture: Built a scalable, professional core using the FSM (Finite State Machine) and Observer Pattern to eliminate direct class dependencies (i.e., no more FindObjectOfType<>()).
-
Singleton Management: Implemented the Singleton Pattern (GameStateManager) to ensure safe, persistent, and globally accessible control over the application state.
-
Decoupled Input: Integrated the Unity New Input System and C# Interfaces to separate input reading logic from the state transition logic, making input controls flexible and easy to modify.
-
FSM Lifecycle Control: Successfully implemented the core FSM logic, ensuring every state transition reliably calls the required ExitState() (cleanup) and EnterState() (initialization) methods.
-
Event Broadcasting: Used C# Events/Delegates to broadcast key changes (OnGameStart, OnGameOver), enabling UI and Audio systems to react without knowing which script triggered the change.
