Kenechukwu Umelo
Technical Gameplay Designer
Won "Best AR/VR Game" at 2021 Quinnipiac Game Design & Development Showcase
Role: Solo Project
Time of Development: 3 Months
Patties! Around The World VR is a cooking simulation virtual reality game. Serve fresh beef patties and other foods outside your famous food truck to a variety of customers.
Developed as my capstone project during my senior year as a game design student.
Engine/Tools:
Unity, XR Interaction Toolkit Plugin, MagicaVoxel, Trello
Platform:
PCVR and Meta Quest
Initial Concept and Goals
Original Prototype
Patties! Around the World VR was initially a prototype developed two weeks into my VR/AR for Games course during my senior year. I attempted a VR experience of cooking a Jamaican beef patty on a stove, in which I explored implementing cooking mechanics in VR and scripting logic for how the beef patty gets cooked.
After several positive feedback from students and my professor, I took the idea of a cooking game with virtual reality and dedicated a semester to building on its potential.
Prototype Footage from AR/VR course in 2020
Design Goals
-
Arcade Cooking Simulation Feel
-
The core vision for this project wasn't to represent a super-realistic cooking simulation. It needed to be fun, fast, and something I could execute in a short time to convey the idea.
-
-
Maintaining Stationary Setting
-
For a game where players would constantly cook with their hands, the aim is to prototype an area for a stationary set-up to eliminate or minimize movement to grab ingredients.
-
-
Fast-Pacing Serving
-
With the customers, I used the design approach that Counter Fight VR featured in the game, allowing up to four customers to order food at a time. This move provided constant moving as orders came in quickly, keeping the player moving quickly to serve food.
-
Food Design
I designed the mechanics for foods to be a simplistic "grab-n-cook" rather than doing a whole ingredient combing as it would require me to script an entire system to get it functionally working.
The food truck served several foods and drinks:
-
Beef Patties
-
Coco Bread
-
Loaf Bread
-
Sliceable into Bread Slices
-
-
Potatoes
-
Sliceable into French Fries
-
-
Plantains
-
Sliceable into Plantain Chips
-
-
Three Fountain Drinks
-
Water
-
Sorrel
-
Coke
-
Cookable foods such as beef patties, french fries, and plantains used game object tags, collision boxes, cook status enum states, and visible UI cook bars to provide feedback on how they were getting cooked. Stove-top is used to cook beef patties exclusively while the fryer is used to fry plantains or fries only.
Cooking Beef Patties
Frying French Fries
For sliceable foods such as regular bread, potatoes, and plantains, I ran into an issue with not knowing how meshes can be dynamically sliced in real-time, even with research I found tutorials with loads of complexity code to get the feature working but I lacked time to understand or fix future issues with that approach........
What was my solution? Slices instantiate if the cuttable food is "cut" a certain amount of times, I achieved this by incrementing the number of times the knife touched them. I'd hoped to give an illusion of "slicing an object" to the player.
Cutting Bread
Slicing a Potato
Cutting Plaintains
Drinks are servable when the player sticks the cup under an invisible collision box under the fountain to fill it. After a few seconds, the cover top object of the cup is set to active.
Getting Fountain Drinks
Technical Design
Early Footage in Development Testing Mechanics!
Integrating the Unity XR Interaction Toolkit
Since the XR plug-in was barebones and having been using it for small prototypes it was a no-brainer to use for this project. I focused on crafting new types of base interactable scripts to support the mechanics needed for the game, which were all derived from the XR Base Interaction script provided by the toolkit.
-
With the Universal Render Pipeline installed, my custom-derived XR interaction scripts didn't work with Meta Quest Standalone builds.
-
Fortunately, with research in Unity forums, I resolved the issue with a simple replacement block of code for the custom XR interaction scripts to work with Meta Quest users.
-
XR Offset Grabbing and Hover Sockets for Foods
Initial Layouts for Systems
During pre-production, I mocked up visuals of what I envisioned for the cooking and service systems to flow. Despite my limited C# programming skills at the time preventing the implementation of the game systems I wanted, I was happy with how I drafted some of the game's systems to play out.
Early visuals for the game systems include:
-
Queue waiting system for the customer AI
-
Customer AI navigation
-
Mockup of inside the food truck
-
Cooking logic for a beef patty
Detailing how serving a customer works and how they track if the order is complete.
System Managers
I implemented several major game systems to balance out cooking mechanics against customer wants/needs with their orders. I only focused on these three below as it was attempting to add more but I needed to maintain the scope for the project.
Game Manager
-
Handles win-and-lose states based on player earnings.
-
Added a concession window animation to close the truck once the time of day ends.
-
A three-coin rating system that is calculated based on money earned divided by money required.
Service Manager
-
Handles selecting wait spots for customer NPCs to gravitate towards once spawned.
- Features over 5+ variety orders for NPCs to request.
- The customer is assigned to an order spot, and once the customer reaches the place, a tray and order ticket appear.
Rewards and Punishments
-
Customer NPCs detect food properties to see if they are burned or even incorrect about what they ordered. The customer will not accept the order under these conditions.
-
If the time is up, the customer leaves angry, providing no money or tips.
-
NPC Customers
-
I scripted simple customer NPCs, it didn't require any Nav Mesh as I didn't include animations due to time however they included several important elements such as:
-
Box collisions on the trays to track foods placed on them.
-
Global ordering script that selects an order from the service manager system.
-
A UI display on the tray dynamically shows the customer's wait timer.
-
Customer Approaching Truck
Project Management
For solo development, it was important to track my weekly progress, agile, and current tasks for different departments, including art, sound, programming, and UI/UX to ensure smooth and progressive production during the 10-week cycle of development.
I used Trello for Task Management, priorities, Assets Placement, and Deadlines. I used Git for Version Control.
Each task was marked with either "Planned," "In-Progress," or "Finished."
Post Mortem
Developing the capstone project was a big challenge, especially as a solo developer. I worked on a few small VR projects and built enough skills in VR development which led to this project being made.
This project, in a way, served as a way for me to increase my skills in C# scripting. I learned C# inheritance and how it could improve my food design and the logic for how it gets cooked. If I were to revisit the game, the food mechanics would be completely revamped using this object-oriented principle, which would've cut down development time by 80%, in my opinion.
Outside of development, one of my biggest accomplishments was the demo trailer. I was so focused on attention to detail and presentation that I scripted several events and recorded them exclusively for the trailer. This resulted in positive feedback from peers and professors.