Exercise 2 — The Verb
GAME 1303-001 · Unity 6.x · Week 3 — Tuesday, September 8
In class, 10:30 – 11:45 · 2 points · Submit by end of class
The skill
Every game has one verb it is actually about. Mario is jump. Portal is place-a-hole. Tetris is rotate-and-drop. Everything else in those games exists to make that one verb interesting.
Beginning designers add verbs. Experienced designers remove them until one is left, then spend all their time making that one feel extraordinary.
Today you pick your verb, build it in isolation, and tune it until it feels like something. Not your whole game — one action, on a bare test course.
By the end of the block you will have: one mechanic, working, tuned, in a build, that a stranger can feel the quality of in ten seconds.
This exercise and Ex 3 — Rules & States together feed Milestone 2 — Core Game Mechanic (Week 5). What you build today is the thing you will demo in two weeks.
What you need
- Your Week 1 project, or a fresh Universal 2D project set up the same way
HelperScripts.unitypackageimported- Your
PlayerControlsInput Actions asset from Ex 1
Part 1 — Choose your verb (10 min)
Pick one. It should be the verb from your Week 2 pitch. If your pitch didn't have one, that's useful information — pick the closest and talk to me during lab.
| Verb | What it is | Good for |
|---|---|---|
| Dash | A burst of speed in a direction, with a cooldown | Platformers, bullet-hell, anything about momentum |
| Grab / Throw | Pick an object up, carry it, throw it | Puzzle, physics games, Portal-likes |
| Shoot | Spawn a projectile that travels and hits | Shooters, tower defense, action |
| Swap | Trade places with an object or a marker | Puzzle, teleport-based movement |
| Grapple | Attach to a point and pull toward it | Traversal, momentum platformers |
| Interact | Context-sensitive use of the thing you're facing | Narrative, adventure, walking sims |
Narrative track: Interact is your verb. Puzzle track: usually Swap or Grab.
Write your verb at the top of a text file now. One sentence: "The player dashes through hazards that would otherwise kill them."
Part 2 — Build a test course (15 min)
A verb can't be evaluated in an empty room. Build the smallest possible space that makes it matter.
1. Make the ground
Empty GameObject → Box Collider 2D, scaled into a long floor. Add a Sprite Renderer with a plain square if you want to see it. Name it Ground.
2. Add three tests
Three obstacles, each slightly harder than the last, spaced along the floor:
| Verb | Your three tests |
|---|---|
| Dash | Three gaps: one you can jump, one you must dash, one needing dash + jump |
| Grab / Throw | A block to carry to a target · a gap to bridge with the block · a switch to hit by throwing |
| Shoot | A close target · a distant target · a moving target |
| Swap | A swap to cross a gap · a swap through a wall · a swap onto a moving platform |
| Grapple | A ceiling anchor · a swing across a gap · two anchors in sequence |
| Interact | Three objects that respond differently — a door, a note, a lever |
Greybox only. Coloured rectangles. Do not make art today.
3. Add a reset key
Select your Player → add the GameStateManager helper to an empty GameObject named GameManager. Set Restart Key to R.
You will press R several hundred times in the next hour. Set it up now.
✅ Checkpoint 1 — a floor, three escalating obstacles, and R restarts the scene.
Part 3 — Implement the verb (30 min)
4. Add the input action
Open Assets/Input/PlayerControls. In the Gameplay map, add one action named for your verb:
| Verb | Action name | Type | Bindings |
|---|---|---|---|
| Dash | Dash | Button | Left Shift · Right Trigger [Gamepad] |
| Grab / Throw | Grab | Button | E · Button West [Gamepad] |
| Shoot | Fire | Button | Left Mouse · Right Trigger [Gamepad] |
| Swap | Swap | Button | Q · Button North [Gamepad] |
| Grapple | Grapple | Button | Left Mouse · Right Bumper [Gamepad] |
| Interact | Interact | Button | E · Button South [Gamepad] |
Click Save Asset. Same trap as last week.
Because Player Input is set to Send Messages, an action named Dash automatically calls a method named OnDash. The name is the wiring — there is nothing else to connect.
5. Wire it up
Dash — already in the helper. On PlayerMove2D, set enableDash ✔. Tune dashSpeed, dashDuration, dashCooldown.
Grab / Throw — add the Grabber helper to Player. Set grabRange, holdOffset, throwForce. Tag objects you can pick up as Grabbable — add a Rigidbody2D and Collider2D to each.
Shoot — add the Shooter helper to Player. Make a projectile prefab: sprite + Rigidbody2D (Gravity Scale 0) + Collider2D set to Is Trigger + the Projectile helper. Save it into Assets/Prefabs/, then assign it to Shooter's projectilePrefab. Tune projectileSpeed, fireRate, lifetime.
Swap — add the Swapper helper. Set swapRange and swapTargetTag. Tag your swappable objects to match.
Grapple — add the Grappler helper. It needs a LineRenderer on the same GameObject. Set maxRange, pullSpeed, anchorTag.
Interact — add the Interactor helper to Player and the Interactable helper to each object. On each Interactable, hook its OnInteract UnityEvent in the Inspector to whatever should happen — move a platform, enable an object, print a line.
6. Press Play and get it working
Do not tune yet. Get it functioning first, then stop and move to Part 4.
✅ Checkpoint 2 — the verb fires on input and does something visible. All three tests are completable, even if it feels bad.
Part 4 — Tune it, then subtract (15 min)
7. Tune against a reference
Name a game whose version of this verb you admire. Open it if you have it. Then tune yours toward it.
For every verb there are three questions:
| Question | The value |
|---|---|
| How long does it last? | dashDuration, lifetime, pullSpeed |
| How often can I do it? | dashCooldown, fireRate, grabRange |
| How much does it commit me? | Can you steer mid-dash? Cancel a throw? Move while shooting? |
The third one is where the design lives. A dash you can steer is a movement option; a dash you cannot steer is a decision. Neither is better — but you must choose, on purpose.
8. Run the subtraction test
Turn off everything except your verb.
- Set
moveSpeedto 0. Can you still get through any of the three tests? - Disable jump. Does the course still work?
If the answer is yes to either, your verb isn't carrying the game yet — the movement is. Change the obstacles until the verb is required. This is a design decision, not a bug, and it's the one this exercise is really about.
Then turn movement back on.
9. Write your notes
Docs/Ex02_notes.txt:
Verb: Dash — "The player dashes through hazards that would otherwise kill them."
dashSpeed: 22
dashDuration: 0.15
dashCooldown: 0.6
Steerable mid-dash: NO
Reference: Celeste. I wanted the dash to be a commitment, not a
steering tool, so I locked direction at the moment of input. At 0.25s
duration it felt floaty and forgiving, so I cut it to 0.15 — now you
have to aim before you press, which makes the third gap actually
tense instead of automatic.
Subtraction test: with moveSpeed 0 I could not clear gaps 2 or 3.
Gap 1 was still jumpable, so I widened it.
The subtraction test result is required in your notes. It is the difference between a full and half score on the design point.
✅ Checkpoint 3 — values tuned deliberately, subtraction test run and course adjusted, notes written.
Part 5 — Build and submit (5 min)
10. Build
File → Build Profiles → Windows → Build into MyGameName/PC_Builds/Ex02/.
11. Record
15–30 seconds showing all three tests being completed with your verb.
12. Submit
Zip as lastname_ex02.zip:
PC_Builds/Ex02/- Your recording
Docs/Ex02_notes.txt
Canvas → Assignments → Exercise 2. Due before you leave.
Rubric — 2 points
| Criterion | Pt | Met when |
|---|---|---|
| Implementation | 1 | Build runs · the verb fires on input and works · three escalating tests exist and are completable · no console errors |
| Design decision | 1 | Values tuned with a named reference · the commitment question answered on purpose · subtraction test run, result recorded, course adjusted if needed |
Troubleshooting
The action does nothing.
Action name must match the method name — Dash → OnDash. Check spelling and capitalisation, confirm the action is in the Gameplay map, and click Save Asset.
The dash goes through walls.
Rigidbody2D → Collision Detection → Continuous. Fast-moving objects tunnel through thin colliders on Discrete.
Grabbed objects fling wildly.
Set the held object's Rigidbody2D.isKinematic true while held — the Grabber helper does this if disablePhysicsWhileHeld is ✔.
Projectiles never disappear.
Projectile.lifetime is 0. Set it to 2–3 seconds. Left running, you will have 4,000 of them and a frozen editor.
The verb feels laggy.
Check you are not applying it in FixedUpdate with a low physics timestep, and set Rigidbody2D → Interpolate → Interpolate.
Everything works but feels like nothing.
That's normal, and it's the whole point of Week 6 (Ex 4 — Juice It), where you add animation, particles, sound, and shake to this exact mechanic. Today is about the underlying values.
If you finish early
- Add a second variation of your verb — a charged dash, a heavy throw — and decide whether it earns its extra button.
- Make gap 3 impossible, then make it possible again by changing exactly one value. Note which one.
- Hand your build to the person next to you and watch them play without saying anything. Where they hesitate is where your verb is unclear.
Before next week
Ex 3 — Rules & States builds win and lose conditions onto this exact scene. Keep the project — you will open it again. Your One Sheet is also due next week in Canvas.