- Use a trigger collider and an On Component Begin Overlap event to detect contact between the player and an object.
- Broadcast and bind an Event Dispatcher, or call through a Blueprint Interface, so pickup logic is decoupled from what reacts to it.
- Show live state — a score — in a UMG widget and update it from gameplay.
- Wire a minimal game loop: a goal, feedback, and a win state that triggers when the goal is met.
- Add game feel — a pop scale, a particle burst, a sound — and explain why each one matters.
Mon 2:00 · Brief Feedback is the game
Players don't feel your graph; they feel your feedback. The gap between a functional pickup and a great one is almost entirely presentation — and presentation is a skill you can learn deliberately.
Events and messaging: who talks to whom
Last week you used Event Tick for continuous movement. Pickups are discrete — they happen at one instant — so they're an event problem. When the player's capsule overlaps a coin whose collider has Generate Overlap Events on, Unreal fires On Component Begin Overlap on both. Inside it, the coin doesn't reach across the project and edit the score directly; instead it announces that it was collected. Something else — a score manager — is listening and reacts. That decoupling is the whole point: the coin knows nothing about the UI, and the UI knows nothing about coins.
You have two idiomatic tools. An Event Dispatcher is a broadcast the coin fires ("On Collected"); anything can Bind Event to it and react — one-to-many, great for "when this happens, everyone who cares responds." A Blueprint Interface is a shared vocabulary of functions any Actor can implement, so the player can call Collect on whatever it touches without knowing its class — great for systems talking to systems. Today you'll touch both and feel the trade-off: broadcast versus a typed contract.
The smallest complete loop
A game loop needs three things: a goal (collect all the coins), feedback (the score ticks up, the coin pops), and a state that resolves (you win when the count hits zero remaining). That's it — that is a game. Everything else is elaboration. Building this tiny loop end to end teaches the shape you'll scale up for Project 3: something to do, a signal that you did it, and a condition that ends it.
Game feel, a.k.a. juice
Juice is the layer of non-essential feedback that makes an interaction feel physical: a quick squash-and-scale pop on the coin as it dies, a particle burst where it was, a crisp sound, maybe a tiny screen or UI number bump. None of it changes what the game does. All of it changes how the game feels. The craft is timing and restraint — feedback should be fast (100–200 ms), tied to the moment of contact, and stacked so multiple senses confirm the same event. Over-juice and it's noise; under-juice and it's lifeless. Today you calibrate that dial by hand.
If one creative technologist directing agents can do what took a small team, the economics of indie games shift — and the new bottleneck is taste and QA, not raw output. Your head-to-head today is practice for a real hiring question. Discussion: where does a human have to stay in the loop?
Mon 2:45 · Guided lab A coin, a score, a win — with juice
We take your Week 10 character and build a complete micro-loop around it. Start with the plumbing, then layer the feel on last — you can't juice something that doesn't work yet.
- Make a collectible with an overlap
Create a coin Actor Blueprint (a Sphere Collision plus a Static Mesh is fine), and make sure the collision component has Generate Overlap Events checked and an overlap-friendly collision preset. An overlap volume detects contact without physically blocking movement — the player passes through it and Unreal reports the overlap instead of bouncing off it.
- Detect the pickup
On the coin's collision, add an On Component Begin Overlap event. Cast the Other Actor to your player Character (or check a tag) so only the player collects it. Confirm the event fires with a temporary Print String before you build anything on top of it.
- Announce the pickup with an Event Dispatcher
Add an Event Dispatcher
OnCollectedto the coin and Call it inside the overlap event, then Destroy Actor. The coin's only job is to broadcast "I was collected" — it must not know the score exists. Alternatively, implement a Blueprint InterfaceCollectibleand have the player call it; both decouple the coin so you can add reactions without touching it again. - Build the score UI
Add a Game Mode or manager Blueprint that holds an int, binds to the coin's
OnCollecteddispatcher, and increments on each collect. Create a UMG Widget Blueprint with a Text block, add it to the viewport on BeginPlay, and bind the text to the score so it updates whenever the value changes. - Wire a win state
Count total coins at BeginPlay (Get All Actors of Class); when collected equals total, flip to a win: show a "You win" UMG panel and disable input. A loop needs an ending — without a resolve condition you have an activity, not a game.
- Add the pop
Before the coin destroys itself, scale it up and back over ~150 ms — a Timeline node driving Set Actor Scale is the clean way. This squash-and-pop is the single highest-value piece of juice: it puts a punctuation mark on the exact frame of contact.
- Add particles and sound
Spawn a short Niagara burst at the coin's location and play a pickup cue with Play Sound at Location. Two extra senses now confirm the same event. Tune the volume and particle count down until it feels crisp rather than busy.
- Play, feel, lock it in
Play the whole loop: walk over coins, watch the score climb with a pop-burst-sound on each, hit the win state. Adjust one timing value until it feels right, then save and zip a dated backup. Trust your gut here — if it feels good, it is good.
Wed 2:00 · Agent lab Two agents, one pickup, a hiring decision
You now know exactly what a satisfying coin pickup takes. Give the identical task to two agents and judge them like you're deciding who to hire.
Give this same prompt to both Claude Code and the Codex CLI, each in its own copy of the project so the results stay separate. Compare three things: the approach (dispatcher vs. interface, structure), correctness (does it compile and feel good in Play In Editor), and how clearly each one explains itself. Write up which you'd hire and why — cite specific nodes, not vibes.
- Both agents' versions compile and run; you tested each in Play In Editor.
- Your write-up names a winner and backs it with specific differences in approach, correctness, and explanation.
- The pickup broadcasts an event, updates the UMG score, and pops with particle + sound in whichever version you keep.
- Zip each agent's result as its own labeled snapshot so the head-to-head stays comparable.
- Add an
AILOG.mdentry: the two approaches, your hiring call, and the reasoning.
Wed 3:10 · Crit / share Whose coin feels best?
Everyone plays their loop on the projector and we do a blind gut-check: which pickups actually feel good, and why? We pull apart the timing — was the pop too slow, the sound too loud, the particles too much? Then each person delivers their hiring verdict from the AI lab: Claude Code or Codex for this task, and the specific evidence. The lesson lands when the room realizes two correct solutions can feel completely different, and that the difference is craft you control — not something the agent decides for you.
Homework — due before Week 12
| Task | Deliverable |
|---|---|
| Fold the collectible loop into your Project 3 vertical slice with tuned juice. | A level where the loop plays start to win, with a clip. |
| Add one more feedback layer of your choice — screen shake, a UI number bump, a combo counter. | The new feedback working in the level, plus a note on the timing you chose. |
| Prep your vertical slice to present next week and bring a final-project idea to pitch. | A one-paragraph final pitch drafted in your process log. |
Resources
- Blueprints — Event Dispatchers and Blueprint Interfaces, the decoupling tools we use for pickups.
- UMG UI Designer — building the score display and win panel with Widget Blueprints.
- OpenAI Codex — the second agent in today's head-to-head.
- Juice it or lose it (Jonasson & Purho) — the canonical talk on game feel; watch it once and steal everything.