Overview
The Event Scheduler automates temporal activities without requiring manual triggering. It supports three trigger types: interval-based, time-of-day, and conditional events. All are managed through a priority queue system with smart caching for optimal performance.
Performance: The scheduler uses intelligent caching for conditional events, achieving 80-95% cache hit rates. Monitor via Debug Window.
Automated Scheduling
Enable the scheduler on WorldActivityManager to automate event triggering:
Step 1: Enable Scheduler
Select WorldActivityManager → Inspector → EventScheduler section → ✓ Scheduler Enabled
Step 2: Configure Time Settings
Set time-of-day trigger hours (optional, defaults work for most games):
- Dawn Time:
6.0(6 AM) - Noon Time:
12.0(12 PM) - Dusk Time:
18.0(6 PM) - Midnight Time:
0.0(12 AM)
Step 3: Create Events
Create TemporalActivity assets with desired trigger types (see sections below).
// Scheduler automatically:
// 1. Evaluates prerequisites every frame/interval
// 2. Queues eligible events by priority
// 3. Triggers highest priority event
// 4. Manages event duration and cooldowns
// 5. Logs history (if enabled)Interval Events
Interval events trigger at fixed time intervals. Perfect for recurring events like merchant spawns, resource respawns, or periodic world changes.
Setup
Create TemporalActivity asset:
├── Trigger Type: Interval
├── Interval: 300 (seconds = 5 minutes)
├── Start Delay: 60 (optional, wait 1 minute before first)
├── Max Occurrences: 0 (unlimited) or 10 (stop after 10 times)
└── Event Duration: 180 (event lasts 3 minutes)Examples
Example 1: Merchant Spawn
Spawn a traveling merchant every 10 minutes, stays for 5 minutes.
Trigger Type: Interval
Interval: 600 (10 minutes)
Duration: 300 (5 minutes)
Priority: 0.5
On Activate:
└─ Spawn Prefab: [Merchant NPC]
└─ Play Audio: merchant_arrival.wav
└─ Show Message: "A traveling merchant has arrived!"
On Complete:
└─ Destroy GameObject: [Merchant NPC]
└─ Play Audio: merchant_departure.wavExample 2: Ore Respawn
Respawn mining nodes every 15 minutes.
Trigger Type: Interval
Interval: 900 (15 minutes)
Duration: 1 (instant)
Max Occurrences: 0 (unlimited)
On Activate:
└─ For Each: All GameObjects tagged "MiningNode"
└─ Set Active: True
└─ Reset Component: [MiningNode script]Time-of-Day Events
Time-of-Day events trigger at specific times: Dawn, Noon, Dusk, or Midnight. Perfect for daily quests, day/night transitions, and scheduled world events.
Setup
Create TemporalActivity asset:
├── Trigger Type: TimeOfDay
├── Time of Day: Dawn / Noon / Dusk / Midnight
├── Days Between: 1 (every day) or 7 (once per week)
├── Max Occurrences: 0 (unlimited) or specific number
└── Event Duration: varies by event typeExamples
Example 1: Daily Quest Reset
Reset all daily quests at midnight.
Trigger Type: TimeOfDay
Time of Day: Midnight
Days Between: 1 (every day)
Duration: 1 (instant)
On Activate:
└─ Reset Local Variable: [DailyQuestsCompleted]
└─ For Each Quest in [DailyQuests]:
└─ Reset Quest Progress
└─ Show Message: "Daily quests have been reset!"Example 2: Dawn Blessing
Give players a temporary buff every dawn.
Trigger Type: TimeOfDay
Time of Day: Dawn
Days Between: 1
Duration: 3600 (buff lasts 1 hour)
Priority: 0.7
On Activate:
└─ Add Status Effect: [Dawn's Blessing]
└─ Modify Stat: Health Regen +5
└─ Play VFX: dawn_blessing_particles
On Complete:
└─ Remove Status Effect: [Dawn's Blessing]Example 3: Weekly Boss
Spawn a world boss every Sunday at noon.
Trigger Type: TimeOfDay
Time of Day: Noon
Days Between: 7 (weekly)
Duration: 7200 (boss available for 2 hours)
Priority: 0.9
Prerequisites:
└─ Day of Week = Sunday
On Activate:
└─ Spawn Prefab: [World Boss]
└─ Broadcast Message: "The Ancient Dragon has awakened!"
└─ Set Quest Marker: [Boss Location]
On Complete:
└─ Destroy GameObject: [World Boss]
└─ Award Loot: [Boss Chest]Conditional Events
Conditional events trigger when custom Game Creator 2 conditions are met. Use for achievement unlocks, story progression, or gameplay milestones.
OneShot vs Temporal
Conditional events have two behavior modes:
OneShot
Triggers once when conditions are met, then automatically disables.
Use for: Achievements, story triggers, permanent unlocks
Temporal
Can trigger multiple times whenever conditions are met (respects cooldown).
Use for: Combat events, resource gathering, repeatable mechanics
Example: Achievement Unlock (OneShot)
Trigger Type: Conditional
Conditional Behavior: OneShot
Priority: 0.6
Prerequisites:
└─ Player Level >= 10
└─ Enemies Defeated >= 100
└─ Achievement "Warrior" NOT unlocked
On Activate:
└─ Unlock Achievement: "Warrior"
└─ Award Skill Points: 5
└─ Show Message: "Achievement Unlocked: Warrior!"
└─ Play Audio: achievement_unlock.wav
// Event automatically disables after first triggerExample: Low Health Alert (Temporal)
Trigger Type: Conditional
Conditional Behavior: Temporal
Cooldown: 30 (can trigger every 30 seconds)
Duration: 5 (alert lasts 5 seconds)
Prerequisites:
└─ Player Health <= 20%
└─ Player NOT in Safe Zone
On Activate:
└─ Play Audio: low_health_warning.wav
└─ Show UI: [Low Health Warning]
└─ Apply Screen Effect: [Red Vignette]
On Complete:
└─ Hide UI: [Low Health Warning]
└─ Remove Screen Effect
// Can re-trigger after 30 second cooldown if still low healthPerformance & Caching
The scheduler uses smart caching to optimize conditional event checking:
Cache System Benefits
- 80-95% Hit Rate: Most checks use cached results
- 10x Faster: Cached checks complete in microseconds
- Automatic Invalidation: Cache updates when game state changes
- Smart Batching: Multiple events share prerequisite checks
Monitor cache performance: Open Debug Window → Performance tab → Check cache hit rate. Target: >80% for optimal performance.
Priority System
When multiple events are ready to trigger, the scheduler uses priority (0.0-1.0) to determine execution order. Higher priority events trigger first.
| Priority | Level | Use Cases |
|---|---|---|
| 0.9 - 1.0 | Critical | Story events, boss fights, emergency situations |
| 0.7 - 0.8 | High | Important world events, daily resets, major spawns |
| 0.4 - 0.6 | Normal | Regular merchants, standard events, resource respawns |
| 0.1 - 0.3 | Low | Ambient events, minor spawns, background activities |
Conflict Resolution: Use Incompatible Events list to prevent conflicting events (e.g., "Peace Festival" and "Demon Invasion") from running simultaneously.
Best Practices
Use Appropriate Durations
Match event duration to content: merchants (5-10 min), daily quests (24h), ambient events (30-60s). Set Duration = 1 for instant effects.
Set Realistic Cooldowns
Prevent event spam with cooldowns. Minimum: 30s for frequent events, 5+ minutes for rare events.
Optimize Conditional Events
Keep prerequisites simple. Complex conditions reduce cache hit rate. Use built-in GC2 conditions over custom scripts when possible.
Use OneShot for Permanent Changes
Achievements, story progression, and permanent unlocks should use OneShot behavior to prevent redundant triggers.
Monitor Performance
Regularly check Debug Window → Performance tab. Aim for >80% cache hit rate and <1ms average check time.
Test Extensively
Use Debug Window → Tools tab to manually trigger events during development. Verify timing, duration, and prerequisites before release.