Files
AppleHillsProduction/docs/airplane_unity_setup_quickref.md
Michal Pikulski 421c4d5cbd Stash work
2025-12-05 16:24:44 +01:00

11 KiB

Airplane Minigame - Unity Setup Quick Reference

Scene Hierarchy Setup

1. Game Manager (Empty GameObject)

  • Name: AirplaneGameManager
  • Component: AirplaneGameManager script
  • Configure:
    • Person Queue: Assign PersonQueue GameObject
    • Camera Manager: Assign AirplaneCameraManager GameObject
    • Launch Controller: Assign AirplaneLaunchController GameObject
    • Target Validator: Assign AirplaneTargetValidator GameObject
    • Spawn Manager: Assign AirplaneSpawnManager GameObject
    • All Targets: Assign all AirplaneTarget components in scene

2. Person Queue (Empty GameObject)

  • Name: PersonQueue
  • Component: PersonQueue script
  • Configure:
    • People In Queue: Assign Person GameObjects in order (index 0 goes first)
    • Shuffle Duration: 0.5f (time for people to shuffle when someone succeeds)
    • Shuffle Distance: 2f (how far people move during shuffle)

3. People (Create one per participant)

  • Name: Person's name (e.g., "Alice", "Bob", "Charlie")
  • Component: Person script
  • Add Child: TextMeshPro - Text component for debug messages
  • Configure Person Component:
    • Person Name: Auto-fills from GameObject name
    • Target Name: The target this person needs to hit (e.g., "TargetA")
    • Debug Text: Assign the TextMeshPro child component
    • Show Debug Logs: Optional, for debugging
  • Position: Place in scene where you want people to stand

4. Camera Manager (Empty GameObject)

  • Name: AirplaneCameraManager
  • Component: AirplaneCameraManager script
  • Configure:
    • Intro Camera: Camera for game introduction
    • Next Person Camera: Camera for person transitions
    • Aiming Camera: Camera for aiming/launching
    • Follow Camera: Camera that follows airplane (should have FollowTarget component)
    • Blend Duration: 1.0f (camera transition time)

5. Launch Controller

  • Name: LaunchController
  • Component: AirplaneLaunchController script (inherits from DragLaunchController)
  • Configure:
    • Airplane Prefab: Assign airplane prefab with AirplaneController
    • Launch Point: Where airplane spawns
    • Max Drag Distance: Maximum slingshot pull distance
    • Launch Force Multiplier: Strength of launch
    • Trajectory Preview: Assign TrajectoryPreview component

6. Trajectory Preview (Attach to Launch Controller or separate)

  • Component: TrajectoryPreview script
  • Component: LineRenderer (auto-required)
  • Configure:
    • Trajectory Points: 50
    • Time Step: 0.1f
    • Ground Level: Y position where trajectory stops
    • Line Color: Yellow (or preferred color)
    • Line Width: 0.1f

7. Target Validator (Empty GameObject)

  • Name: TargetValidator
  • Component: AirplaneTargetValidator script
  • No configuration needed (targets are set at runtime)

8. Spawn Manager (Empty GameObject with child containers)

  • Name: SpawnManager
  • Component: AirplaneSpawnManager script
  • Create Children:
    • SpawnedObjects (empty, for organization)
    • GroundTiles (empty, for organization)
  • Configure:
    • Target Prefabs: Array of target key/prefab pairs
      • Key: Must match Person's Target Name (e.g., "TargetA")
      • Prefab: Target prefab with SpriteRenderer (for icon)
    • Positive Object Prefabs: Array of collectible/good prefabs
    • Negative Object Prefabs: Array of obstacle/bad prefabs
    • Ground Tile Prefabs: Array of ground/platform prefabs
    • Target Display UI: Assign TargetDisplayUI component
    • Spawned Objects Parent: Assign SpawnedObjects child
    • Ground Tiles Parent: Assign GroundTiles child

9. Target Display UI (Canvas child)

  • Name: TargetDisplayUI
  • Component: TargetDisplayUI script
  • Create Children:
    • TargetIcon (Image component) - Shows target sprite
    • DistanceText (TextMeshProUGUI) - Shows distance remaining
  • Configure:
    • Target Icon: Assign TargetIcon Image component
    • Distance Text: Assign DistanceText component
    • Distance Format: "{0:F1}m" (or preferred format)
    • Update Interval: 5 (frames between updates, 0=every frame)
  • Position: Top corner or preferred UI location

10. Targets (Create multiple)

  • Name: Target identifier (e.g., "TargetA", "TargetB")
  • Component: AirplaneTarget script
  • Component: Collider2D with "Is Trigger" enabled
  • Component: SpriteRenderer (required for icon extraction)
  • Configure AirplaneTarget:
    • Target Name: Unique identifier (e.g., "TargetA")
    • Show Debug Logs: Optional

11. Airplane Prefab (Create as prefab)

  • Component: AirplaneController script
  • Component: Rigidbody2D set to Kinematic mode (physics calculated manually)
  • Component: Collider2D with "Is Trigger" enabled
  • Configure AirplaneController:
    • Drag Coefficient: 0.01f
    • Timeout Duration: 10f (auto-stop after this time)
    • Show Debug Logs: Optional

Settings Configuration

Airplane Settings Asset

  1. Open Settings Window: Tools > Settings > Airplane Settings

  2. If not visible: Add AirplaneSettings to SettingsEditorWindow.cs (see Settings README)

  3. Configure:

    Slingshot Settings:

    • Max Drag Distance: 5f
    • Launch Force Multiplier: 10f
    • Min Launch Force: 2f
    • Drag Speed: 5f
    • Mass: 1f (projectile mass for trajectory calculations)

    Flight Settings:

    • Airplane Mass: 1f
    • Max Flight Time: 10f

    Spawn System (NEW):

    • Dynamic Spawn Threshold: 10f (X position where spawning begins)
    • Target Min Distance: 30f
    • Target Max Distance: 50f
    • Object Spawn Min Interval: 1f (seconds between object spawns)
    • Object Spawn Max Interval: 3f
    • Positive Negative Ratio: 0.5f (0=all negative, 1=all positive)
    • Spawn Distance Ahead: 15f (how far ahead to spawn objects)
    • Ground Spawn Interval: 5f (distance between ground tiles)

    Timing:

    • Intro Duration: 1f
    • Person Intro Duration: 1f
    • Evaluation Duration: 1f

Testing Checklist

Pre-Flight Check

  • All Person components have Debug Text assigned
  • PersonQueue has all people assigned in correct order
  • Each Person has a unique Target Name assigned
  • Matching Targets exist in scene with same names
  • Camera Manager has all 4 cameras assigned
  • Launch Controller has Airplane Prefab assigned
  • AirplaneGameManager has all systems assigned
  • Spawn Manager has target prefabs with matching keys
  • Spawn Manager has positive/negative/ground prefabs assigned
  • Target Display UI is created and assigned in Spawn Manager
  • All target prefabs have SpriteRenderer components

Test Flow

  1. Start Game → Should blend to intro camera
  2. Introductions → Each person should display greeting message
  3. First Turn → Should blend to aiming camera
  4. Target Spawned → Target appears at configured distance
  5. UI Display → Target icon and distance shown
  6. Aiming → Drag to aim, trajectory preview should show
  7. Launch → Airplane should fly along predicted path
  8. Threshold Cross → Dynamic spawning begins
  9. Objects Spawn → Positive/negative objects appear ahead of plane
  10. Ground Spawns → Ground tiles appear at intervals
  11. Distance Updates → UI distance decreases as plane approaches
  12. Hit Target → Person celebrates, gets removed, queue shuffles
  13. Cleanup → All spawned objects destroyed
  14. Miss Target → Person shows disappointment, stays in queue
  15. Next Turn → New target spawned, repeat
  16. Game Over → When queue is empty

Common Issues

Trajectory doesn't match flight path

  • Ensure airplane prefab has Rigidbody2D with correct mass
  • Verify Slingshot Settings mass matches projectile
  • Check gravity scale in Rigidbody2D settings

People don't show messages

  • Assign TextMeshPro component to Debug Text field
  • Check that text GameObject is a child of Person

Camera doesn't follow airplane

  • Ensure Follow Camera has FollowTarget component
  • Verify AirplaneCameraManager has Follow Camera assigned

Targets not detected

  • Ensure both airplane and targets have Collider2D components
  • Set "Is Trigger" on both colliders
  • Check layer collision matrix in Project Settings

Launch doesn't work

  • Verify Input Manager is properly configured
  • Check Launch Controller is enabled
  • Ensure Airplane Prefab is assigned

Target doesn't spawn

  • Check Person's Target Name matches Spawn Manager key exactly
  • Verify target prefab is assigned in Target Prefabs array
  • Ensure target prefab has SpriteRenderer for icon

Wrong target icon displayed

  • Verify target prefab has SpriteRenderer component
  • Check SpriteRenderer has sprite assigned
  • Try adding SpriteRenderer as direct child of root

Objects spawn too early/late

  • Adjust Dynamic Spawn Threshold setting
  • Check plane transform is passed to StartTracking

Positive/negative ratio not maintained

  • Algorithm self-adjusts after first 5 spawns
  • Verify Positive Negative Ratio is 0-1
  • Spawn more objects to see ratio converge

Distance not updating

  • Check Target Display UI is assigned in Spawn Manager
  • Verify Update Interval is not too high
  • Ensure UI is shown when tracking starts

Script References

Core Scripts

  • AirplaneGameManager.cs - Main game orchestrator
  • PersonQueue.cs - Manages person queue and transitions
  • Person.cs - Individual person data and reactions
  • AirplaneSpawnManager.cs - Dynamic spawning system (NEW)

Gameplay Scripts

  • AirplaneLaunchController.cs - Handles aiming and launching
  • AirplaneController.cs - Airplane flight behavior
  • AirplaneTarget.cs - Target collision detection
  • AirplaneTargetValidator.cs - Validates hits vs expected targets

UI Scripts

  • TargetDisplayUI.cs - Target distance display (NEW)

Camera Scripts

  • AirplaneCameraManager.cs - Camera state management

Common/Shared Scripts

  • DragLaunchController.cs - Base slingshot mechanics
  • CameraManager<T>.cs - Generic camera state system
  • TrajectoryPreview.cs - Visual trajectory prediction

Settings

  • IAirplaneSettings - Settings interface
  • AirplaneSettings.cs - Settings implementation

Next Steps

  1. Visual Polish: Replace debug text with proper animations
  2. Audio: Add sound effects for launch, hit, miss, celebrations, spawns
  3. VFX: Add particle effects for launch, flight trail, hit impact, spawns
  4. UI: Add score display, turn counter, success rate, combo meter
  5. Targets: Add visual feedback when hit/missed
  6. People: Add character models and animations
  7. Airplane: Add proper airplane model with flight animations
  8. Spawned Objects: Add collision/scoring logic to positive/negative objects
  9. Ground Tiles: Add seamless scrolling ground system
  10. Power-ups: Add special spawned objects with unique effects

Additional Documentation

For detailed information about the spawn system:

  • See docs/airplane_spawn_system_guide.md for complete spawn system documentation
  • See docs/person_integration_summary.md for person queue system
  • See docs/airplane_implementation_summary.md for overall architecture