[!NOTE] The core mechanic of “picking a place to go, doing something, and leaving” was functional early on. However, stakeholders requested more immediate action and gameplay loops. This mandate caused engineering focus to pivot abruptly into building the Target Shooting and Time Trial systems below, which subsequently halted development on other core progression features (like the Shop System) to meet the new action-oriented milestones.
Dynamic Game Modes
Category: Activity Structures
Context: Beyond the core extraction loop of POV 3.0, the game features two distinct in-world activity types designed to test mechanical skill: Checkpoint Racing and Target Shooting. These are not menus — they are embedded activities managed by independent singleton systems that overlay objectives onto the existing world space without requiring hard scene loads.
Activity Type 1: Checkpoint Racing (Time Trials)
The TimeTrialManager handles checkpoint racing courses. Rather than hard-coding races into levels, it uses dynamic prefab instantiation.
- Initialization: On load, the manager iterates over a list of
TimeTrialDataobjects, instantiating the course prefabs (timeTrialPrefab) but keeping their physical checkpoints disabled to prevent clutter. - Activation: When a player enters a
TimeTrialActivityTrigger, the route is activated, the timer (currentTimeInTimeTrial) begins, and theCheckpointManagerwakes up. - Hierarchy Parsing: The
CheckpointManagerdoesn’t rely on strict manual arrays. Instead, it finds all objects taggedCheckpointParentand sorts them dynamically based on their sibling index in the Unity hierarchyGetSiblingIndex(). This allows level designers to quickly drag-and-drop checkpoints to build routes without breaking array links. - Resolution: If the clock exceeds
timeTrialLength, the trial fails. If the player hits all checkpoints sequentially, their completion time is recorded and translated into a Star Rating (1-3 stars) by theTimeTrialDataobject.
Activity Type 2: Target Shooting
The TargetChallengeManager orchestrates shooting gallery mechanics. This is a separate activity type from checkpoint racing — the player goes to a physical shooting range in the world.
It bifurcates into two variants based on the attached TargetConfig:
- Standard Practice: A set duration where the player shoots static or moving targets for score. This is the relaxed variant — the player can take their time within the allotted window.
- Quickshot Challenge: A high-pressure variant with a strict
quickshotChallengeDuration. The player must shoot as many targets as possible before time runs out. Speed and accuracy are both scored.
graph TD
A[Player Reaches Target Range] --> B{Challenge Type?}
B -- Normal --> C[Spawn Fixed Target Count]
B -- Quickshot --> D[Start Challenge Timer]
C --> E[Shoot Targets]
D --> F[Player Shoots as Many as Possible]
F --> G{Time Up?}
G -- No --> F
G -- Yes --> H[Calculate Star Rating]
H --> I[Reward: 1 to 3 Stars]
To prevent memory leaks and overhead during frantic shooting, the system uses object pooling concepts. When a target is destroyed, the manager listens via an OnTargetDestroyed action and immediately cycles the empty placement transform backward into a Queue<Transform>. This allows infinite target spawning within limited physical placements without overlapping.