Inspiration

  • Modern Youtube Podcast formats and how possible it is to replicate the high level production in horizon worlds.
  • Popularity of simple game loops like Spin the bottle
  • The educational benefit of 10-15 years olds learning debate skills in a fun, casual setting.
  • The possibility of creating a 'Director' role on the 2D mobile medium, something not possible in VR.

What it does

  • Very simple game loop. 2 players debate a 'hot topic'. Any audience present get to 'vote with their feet' by walking onto the voting tiles. Winner stays on.

How I built it

  • Scripting architecture: - The world is with a super simple server-client split script architecture. A script attached to my stage trigger acts as my authoritative game manager, managing the game state, round timing, voting, and player roles. Separately the client manager is assigned to each of the 32 Custom UI gizmos hidden in the world, which each mobile/web player (32 max) is assigned to upon entry. This local script is responsible for rendering the entire mobile UI as well as managing the multi camera system.
  • Cameras: - Using the horizon camera API, I created 12 camera angles, including static shots, animated dolly and orbit cameras, and player-specific seat cameras, and (what I'm most proud of) are some close up shots with a blurred background effect (see demo video for how I achieved this!) I also made use of the built in FOV tooling in the API to dial in my close up angles, as well as create a very wide fish eye angle.
  • Custom UI: - Using the horizon UI API, I was able to generate a sophisticated UI design consistently across the experience, with active, inactive and disabled states. I was able to specify colours, including transparency in the code, as well as button size and position, and reactions to game state / events.

Challenges I ran into:

  • Blurred focus camera effect - An interesting last minute challenge. I REALLY wanted to get an out-of-focus background effect for my close up shots, and burnt valuable hours on the last day of the competition trying to get this to work. In the end, this is how I did it:
  • I took a screenshot of the background of the specific camera angle while previewing in the editor.
  • I opened the image in inkscape (.ai file editor app) where I could easily blur the image.
  • I then imported the blurred png image into the horizon editor as a texture, attached to a plane and positioned it to be a fake background to achieve the same effect as a blurred background.
  • UI launch race condition bugs - While testing, when multiple players joined at the same time, one would occasionally fail to load their UI. The solution was to replace the on-demand 'spawnAsset' with an object pooling pattern instead. I pre-placed and tagged 32 custom UI gizmos in the scene, so the world just had to assign a gizmo to players when joining. This seemed to fix the issue.

Accomplishments that I am proud of:

  • Bug solving! - My background is QA, so it was very satisfying to be on the fixing side this time!
  • Cameras! - I feel I have achieved my goal of a 'mobile director' experience for spectators. They have access to 12 precise camera angles with a range of effects, virtually simulating a high production equipment experience
  • UX design I put a lot of effort into creating a world which feels 'alive' and responsive. I made the most of SFX, VFX, genAI skyboxes, textures and animations for an interactive experience, all designed to complement the game mode of debating silly topics with friends. I am proud of how far I pushed some of the particle effect gizmos I imported from the public asset store, and used in bespoke ways via the custom tooling properties provided. I was surprised how much creative licence these gizmos would afford.
  • Positive feedback (so far..) - Creating a world which got strong feedback from early multiplayer testing with friends. It's a great feeling to make something actually fun for others.

What I learned

  • Coding - My prior coding experience was just a 16 hour course Javascript course on Codecademy. So this live project really honed my understanding of typescript syntax, how to build a game architecture, and how to script in a game engine. I relied heavily on the available horizon tutorials and documentation to learn quickly.
  • Project management - Having a limited amount of time for the competition taught me to order features by priority, and then to ruthlessly cut from the bottom. I also learnt to have the confidence to pivot a project if the direction is wrong, regardless how much time and resource may have already been used. if there's a better route and it's achievable, then the pivot is worth it.
  • Games Design - I personally enjoy game design significantly more than coding and bug fixing. This project has proven this to me. For future projects I will definitely consider partnering with someone else who has the inverse interest and strength . weakness balance, so I can spend more time designing.

What's next for Lets Argue! (Nicely)

  • Implement progression and daily awards - I made the decision to cut the plan to make camera angles unlockable from time spent in the world. I decided to target 'shareability' instead as I valued the 1st time user experience of freely exploring all 12 angles on a 1st play experience, especially 'CAM12 DUCK' with the quack SFX. So a future plan to properly introduce a quests system into the game to encourage participation. for example, total votes received, total debate rounds won, total vote given etc etc
  • Test test test - And iterate on the player feedback. The current state is still mostly a manifestation from my mind, so I'm looking forward to battle testing the concept with others and tweaking the gameplay as I drag more and more of my friends into the experience and collect their honest feedback. I want to really tighten up the game loop, to the point where randoms can wander in and genuinely have fun taking part or spectating a debate.
  • Audience Interaction - One of the 1st bits of feedback I got was to give players tomatoes to throw as players they disagree with. I would love to implement more ability for the audience to interact with the discussion. a Projectile tomato unlockable or purchase-able would be awesome.

Built With

Share this project:

Updates