VR Scooter Simulation Game

Unity Game Design
Project Details
Deliverables
Role

The Problem

In the development of the game, I aimed to utilize the controller affordances to create a unique user experience, envisioning the controllers as scooter handles with accelerators and brakes. The idea was to have the players tilt the controllers parallel to the floor, mimicking the real-life action of steering a scooter.

However, implementing the tilt functionality proved challenging. The biggest  challenge was to accurately calibrate the tilt of the controllers about the Y-axis and translate it to the scooter’s rotation/steering. I opted for a quick fix by using head rotation for steering instead. Doing so allowed me to make progress in the game development, providing a workable solution for the time being.

Goals

The project began with the creation of a new 3D URP project in Unity, with the Oculus integration package

installed to ensure compatibility with the Meta Quest 2 headset. I started prototyping by white boxing a basic

scooter model on a simple plane, refining it with separate detailed components like bike handles to enhance realism.

To simulate the actual riding experience, I integrated an OVR player controller within the scene, positioning it to mimic

how a person would sit on the scooter. I attached the left and right handles of the scooter model to the OVR player

controller's left and right hand anchors, respectively. This was done to simulate realistic control of the scooter.During

the testing phase with the Quest 2 headset, I identified that the handles, intended to be horizontal, were misaligned

by 90 degrees in-game.

This issue required additional adjustments of the handle's orientation and spacing, to more accurately reflect the real-world

scooter mechanics. A sphere was placed at the center of the handles as a visual guide, and an average transform script

was employed to standardize the handle distance.

Competitive Analyis

The movement system of the scooter is determined by an accelerator script, which I developed to work in tandem

with the Meta Quest controllers. The script facilitated forward movement of the scooter when the Secondary Index Trigger

was pressed on either of the controllers. 



Below you can see the script I implemented to achieve this:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class SteeringRotation : MonoBehaviour
{

    public Transform lookAtMe;
    void Update()
    {
        // Get the position of the main camera
        Vector3 cameraPosition = lookAtMe.position;

        // Ignore the Y-axis of the camera position
        cameraPosition.y = transform.position.y;

        // Make the transform look at the modified camera position
        transform.LookAt(cameraPosition);
    }
}

More Movement Mechanics

Steering the Scooter

While steering proved to be more complex, I initially attempted to implement it using lerping with guidance from my

professor, Ciera Jones. However, due to time constraints, I shifted to a simpler yet effective method as suggested by

Professor Jones. In this new implementation, the scooter's steering is controlled by the player's head movements.

The following script was used to achieve this:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class SteeringRotation : MonoBehaviour
{    
	public Transform lookAtMe;    
	void Update()    
	{	        
	// Get the position of the main camera        
    Vector3 cameraPosition = lookAtMe.position;     
    
    // Ignore the Y-axis of the camera position        
    cameraPosition.y = transform.position.y;      
    
    // Make the transform look at the modified camera position        
    transform.LookAt(cameraPosition);    
    }
}

This script enabled the scooter's direction to be determined by the player's head orientation, excluding vertical movements for a consistent level and a more natural riding experience.

Proto Persona

User Journey

Information Architecture

LoFi Wireframes

Research Goals

I then took a little break from implementing basic mechanics to build an immersive gameplay, I sourced detailed

models like a Vespa scooter, houses, and roads from the Unity Asset Store, and additional objects such as vehicles,

lamp posts, traffic cones, and animals from Sketchfab. I imported my player character from Mixamo. These elements

were integrated into the game to build an interactive world. Replacing the whitebox model with a detailed scooter

from the Asset Store significantly improved the game's visual appeal.

Usability Testing

Next, I implemented various collision scripts to make the game environment interactive, allowing for dynamic

responses when the scooter interacted with different elements. To keep things original, I created particle systems

to create visual effects upon collisions. I also used audio source components on animal objects that trigger during

collisions. Additionally, I added collision scripts on lamp posts in the scene to change colors as the scooter passed

by, enhancing the dynamic and interactive nature of the game world. You can find the script I used to achieve this below.



public class CollisionScript : MonoBehaviour
{
    public GameObject explosion;
    public ParticleSystem confetti;

    private void OnCollisionEnter(Collision collision)
    {
        // Check if the scooter collides obstacle
        if (collision.gameObject.tag == "ObstacleTag")
        {
            // Activate the explosion
            explosion.SetActive(true);
            explosion.GetComponent<ParticleSystem>().Play();

 // HideExplosion method after 2 seconds to deactivate the explosion
            Invoke("HideExplosion", 2f);
             Debug.Log("Hit an Obstacle");
        }
    }
void HideExplosion()
    {
// hide explosion
        explosion.SetActive(false);
    }

    private void OnTriggerEnter(Collider other)
    {
         if (other.CompareTag("Vespa"))
        {
            Debug.Log("Finish line crossed by " + other.name);
// Activate and play the confetti Particle System
            if (confetti != null)
            {
                confetti.Play();
                 Invoke("HideConfetti", 2f);
            }}}
        void HideConfetti()
    {
        confetti.Stop();
    }}

Findings

Cras sit amet velit id nulla tempus dictum sit amet eu nisi.

Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae. Fusce aliquet turpis at orci bibendum, non convallis justo tempor.

Maecenas euismod sapien eu arcu convallis, vitae vestibulum ipsum maximus.

Donec eu felis at libero consequat sagittis a et urna. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae.

Vivamus vitae arcu vel velit efficitur vestibulum vel in purus. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas euismod sapien eu arcu convallis, vitae vestibulum ipsum maximus.

Praesent nec orci at nulla consequat congue ut non arcu. Cras sit amet velit id nulla tempus dictum sit amet eu nisi. Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Donec eu felis at libero consequat sagittis a et urna.

Integer rutrum ante et nunc venenatis, id ultricies risus ultricies. Cras sit amet velit id nulla tempus dictum sit amet eu nisi.

Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Donec eu felis at libero consequat sagittis a et urna.

Maecenas euismod sapien eu arcu convallis, vitae vestibulum ipsum maximus. Donec eu felis at libero consequat sagittis a et urna.

Cras sit amet velit id nulla tempus dictum sit amet eu nisi. Sed auctor augue id tellus lacinia, nec ultricies est fermentum.

Sed auctor augue id tellus lacinia, nec ultricies est fermentum.

Integer rutrum ante et nunc venenatis, id ultricies risus ultricies. Sed auctor augue id tellus lacinia, nec ultricies est fermentum.

Integer rutrum ante et nunc venenatis, id ultricies risus ultricies.

Sed auctor augue id tellus lacinia, nec ultricies est fermentum. Praesent nec orci at nulla consequat congue ut non arcu. Integer rutrum ante et nunc venenatis, id ultricies risus ultricies.

Integer rutrum ante et nunc venenatis, id ultricies risus ultricies. Sed auctor augue id tellus lacinia, nec ultricies est fermentum.

Maecenas euismod sapien eu arcu convallis, vitae vestibulum ipsum maximus.

Mid-Fi Wireframes

Usability Testing II

Closing Note

Developing the VR Vespa scooter game was a comprehensive process involving the integration of various technologies and creative problem-solving. From constructing the initial prototype to implementing detailed environmental interactions and refining control mechanics, each step was driven by a focus on creating an immersive and enjoyable VR experience. Despite challenges, particularly with the steering functionality, the project evolved into a dynamic simulation that captures the essence of scooter riding in a virtual environment.

Acknowledging that this project requires further refinement, I plan to continue working on it, with the goal of enhancing its mechanics to more closely align with the original concept of using the controllers.

VR Scooter Simulation Game

Unity Game Design
Project Details
Deliverables
Role

Kickoff

In the development of the game, I aimed to utilize the controller affordances to create a unique user experience, envisioning the controllers as scooter handles with accelerators and brakes. The idea was to have the players tilt the controllers parallel to the floor, mimicking the real-life action of steering a scooter.

However, implementing the tilt functionality proved challenging. The biggest  challenge was to accurately calibrate the tilt of the controllers about the Y-axis and translate it to the scooter’s rotation/steering. I opted for a quick fix by using head rotation for steering instead. Doing so allowed me to make progress in the game development, providing a workable solution for the time being.

Goals

The project began with the creation of a new 3D URP project in Unity, with the Oculus integration package

installed to ensure compatibility with the Meta Quest 2 headset. I started prototyping by white boxing a basic

scooter model on a simple plane, refining it with separate detailed components like bike handles to enhance realism.

To simulate the actual riding experience, I integrated an OVR player controller within the scene, positioning it to mimic

how a person would sit on the scooter. I attached the left and right handles of the scooter model to the OVR player

controller's left and right hand anchors, respectively. This was done to simulate realistic control of the scooter.During

the testing phase with the Quest 2 headset, I identified that the handles, intended to be horizontal, were misaligned

by 90 degrees in-game.

This issue required additional adjustments of the handle's orientation and spacing, to more accurately reflect the real-world

scooter mechanics. A sphere was placed at the center of the handles as a visual guide, and an average transform script

was employed to standardize the handle distance.

First Down

The movement system of the scooter is determined by an accelerator script, which I developed to work in tandem

with the Meta Quest controllers. The script facilitated forward movement of the scooter when the Secondary Index Trigger

was pressed on either of the controllers. 



Below you can see the script I implemented to achieve this:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class SteeringRotation : MonoBehaviour
{

    public Transform lookAtMe;
    void Update()
    {
        // Get the position of the main camera
        Vector3 cameraPosition = lookAtMe.position;

        // Ignore the Y-axis of the camera position
        cameraPosition.y = transform.position.y;

        // Make the transform look at the modified camera position
        transform.LookAt(cameraPosition);
    }
}

More Movement Mechanics

Steering the Scooter

While steering proved to be more complex, I initially attempted to implement it using lerping with guidance from my

professor, Ciera Jones. However, due to time constraints, I shifted to a simpler yet effective method as suggested by

Professor Jones. In this new implementation, the scooter's steering is controlled by the player's head movements.

The following script was used to achieve this:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class SteeringRotation : MonoBehaviour
{    
	public Transform lookAtMe;    
	void Update()    
	{	        
	// Get the position of the main camera        
    Vector3 cameraPosition = lookAtMe.position;     
    
    // Ignore the Y-axis of the camera position        
    cameraPosition.y = transform.position.y;      
    
    // Make the transform look at the modified camera position        
    transform.LookAt(cameraPosition);    
    }
}

This script enabled the scooter's direction to be determined by the player's head orientation, excluding vertical movements for a consistent level and a more natural riding experience.

LoFi Wireframes

Hi-Fi Wireframes

Post-Game Reflection

Developing the VR Vespa scooter game was a comprehensive process involving the integration of various technologies and creative problem-solving. From constructing the initial prototype to implementing detailed environmental interactions and refining control mechanics, each step was driven by a focus on creating an immersive and enjoyable VR experience. Despite challenges, particularly with the steering functionality, the project evolved into a dynamic simulation that captures the essence of scooter riding in a virtual environment.

Acknowledging that this project requires further refinement, I plan to continue working on it, with the goal of enhancing its mechanics to more closely align with the original concept of using the controllers.

VR Scooter Simulation Game

Unity Game Design

The Problem

In the development of the game, I aimed to utilize the controller affordances to create a unique user experience, envisioning the controllers as scooter handles with accelerators and brakes. The idea was to have the players tilt the controllers parallel to the floor, mimicking the real-life action of steering a scooter.

However, implementing the tilt functionality proved challenging. The biggest  challenge was to accurately calibrate the tilt of the controllers about the Y-axis and translate it to the scooter’s rotation/steering. I opted for a quick fix by using head rotation for steering instead. Doing so allowed me to make progress in the game development, providing a workable solution for the time being.

Goals

The project began with the creation of a new 3D URP project in Unity, with the Oculus integration package

installed to ensure compatibility with the Meta Quest 2 headset. I started prototyping by white boxing a basic

scooter model on a simple plane, refining it with separate detailed components like bike handles to enhance realism.

To simulate the actual riding experience, I integrated an OVR player controller within the scene, positioning it to mimic

how a person would sit on the scooter. I attached the left and right handles of the scooter model to the OVR player

controller's left and right hand anchors, respectively. This was done to simulate realistic control of the scooter.During

the testing phase with the Quest 2 headset, I identified that the handles, intended to be horizontal, were misaligned

by 90 degrees in-game.

This issue required additional adjustments of the handle's orientation and spacing, to more accurately reflect the real-world

scooter mechanics. A sphere was placed at the center of the handles as a visual guide, and an average transform script

was employed to standardize the handle distance.

Empire Coffee & Tea

Main Features

  • Top navigation with categories for coffee, tea, makers & filters, gift baskets, gourmet foods, mugs, history, and help.
  • Search bar located on the left side of the homepage, above the main navigation.
  • Banner image of their shop.
  • Contact information listed under the help tab.
  • Physical location with delivery services.


Standout Qualities

  • Specializes in offering a wide variety of coffee and tea products.
  • Provides a visually appealing website with a banner image showcasing their shop.
  • Offers a user-friendly search bar and navigation system.
  • Emphasizes customer support through contact information and help resources.
  • Provides a physical location and delivery services, providing convenience for customers.

Steepster

Main Features

  • Top navigation with pages for tea, places, discussions, explore, learn more, sign up, and login.
  • Two search bars, one on the top right corner and one in the banner section.
  • Ability to filter tea by type, category, and companies.
  • Sorting options for search results.
  • Discussions tab for users to engage in tea-related conversations.


Standout Qualities

  • Provides a platform for tea enthusiasts to share their experiences and engage in discussions.
  • Offers a comprehensive search and filtering system for finding specific types of tea.
  • Emphasizes community engagement and exploration through various tabs and sections.
  • Allows users to discover new tea places and connect with other tea lovers.

Rate Tea

Main Features

  • Comprehensive top navigation with categories for Styles, Brands, Regions, People, Places, Images, Articles, News, Contact, and About.
  • Search bar accessible from every page, although search entries must be at least 4 characters long.
  • Consistent breadcrumbs throughout the website.
  • Provides options for sorting search results.
  • Offers articles and information about the history of the organization.


Standout Qualities

  • Focuses on providing extensive information and resources about tea.
  • Offers a wide range of categories for navigation, allowing users to explore different aspects of tea.
  • Provides in-depth search options for users to find specific types of tea.
  • Emphasizes the educational and informative aspect of tea through articles and history.

The Cultured Cup

Main Features

  • Top navigation with pages for tea, coffee, sweets, events, and explore.
  • Search bar located on the right side of the homepage, accessible from every page.
  • Ability to narrow down search results.
  • Provides sorting options for search results.
  • Discussions tab for open-ended conversations.
  • Physical location in Texas, with both pickup and delivery options.


Standout Qualities

  • Offers a diverse range of products, including tea, coffee, and sweets.
  • Focuses on creating a community through discussions and events.
  • Provides a convenient search and filtering system for finding specific products.
  • Offers both pickup and delivery options, giving users flexibility in how they receive their orders.

I then took a little break from implementing basic mechanics to build an immersive gameplay, I sourced detailed

models like a Vespa scooter, houses, and roads from the Unity Asset Store, and additional objects such as vehicles,

lamp posts, traffic cones, and animals from Sketchfab. I imported my player character from Mixamo. These elements

were integrated into the game to build an interactive world. Replacing the whitebox model with a detailed scooter

from the Asset Store significantly improved the game's visual appeal.

Site Maps

Findings

Developing the VR Vespa scooter game was a comprehensive process involving the integration of various technologies and creative problem-solving. From constructing the initial prototype to implementing detailed environmental interactions and refining control mechanics, each step was driven by a focus on creating an immersive and enjoyable VR experience. Despite challenges, particularly with the steering functionality, the project evolved into a dynamic simulation that captures the essence of scooter riding in a virtual environment.

Acknowledging that this project requires further refinement, I plan to continue working on it, with the goal of enhancing its mechanics to more closely align with the original concept of using the controllers.

VR Scooter Simulation Game

Unity Game Design

Phase I : Ideation

In the development of the game, I aimed to utilize the controller affordances to create a unique user experience, envisioning the controllers as scooter handles with accelerators and brakes. The idea was to have the players tilt the controllers parallel to the floor, mimicking the real-life action of steering a scooter.

However, implementing the tilt functionality proved challenging. The biggest  challenge was to accurately calibrate the tilt of the controllers about the Y-axis and translate it to the scooter’s rotation/steering. I opted for a quick fix by using head rotation for steering instead. Doing so allowed me to make progress in the game development, providing a workable solution for the time being.

Phase II : Prototyping the Scooter Model

The project began with the creation of a new 3D URP project in Unity, with the Oculus integration package

installed to ensure compatibility with the Meta Quest 2 headset. I started prototyping by white boxing a basic

scooter model on a simple plane, refining it with separate detailed components like bike handles to enhance realism.

To simulate the actual riding experience, I integrated an OVR player controller within the scene, positioning it to mimic

how a person would sit on the scooter. I attached the left and right handles of the scooter model to the OVR player

controller's left and right hand anchors, respectively. This was done to simulate realistic control of the scooter.During

the testing phase with the Quest 2 headset, I identified that the handles, intended to be horizontal, were misaligned

by 90 degrees in-game.

This issue required additional adjustments of the handle's orientation and spacing, to more accurately reflect the real-world

scooter mechanics. A sphere was placed at the center of the handles as a visual guide, and an average transform script

was employed to standardize the handle distance.

Phase III: Integrating Movement Mechanics

The movement system of the scooter is determined by an accelerator script, which I developed to work in tandem

with the Meta Quest controllers. The script facilitated forward movement of the scooter when the Secondary Index Trigger

was pressed on either of the controllers. 



Below you can see the script I implemented to achieve this:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class SteeringRotation : MonoBehaviour
{

    public Transform lookAtMe;
    void Update()
    {
        // Get the position of the main camera
        Vector3 cameraPosition = lookAtMe.position;

        // Ignore the Y-axis of the camera position
        cameraPosition.y = transform.position.y;

        // Make the transform look at the modified camera position
        transform.LookAt(cameraPosition);
    }
}

More Movement Mechanics

Steering the Scooter

While steering proved to be more complex, I initially attempted to implement it using lerping with guidance from my

professor, Ciera Jones. However, due to time constraints, I shifted to a simpler yet effective method as suggested by

Professor Jones. In this new implementation, the scooter's steering is controlled by the player's head movements.

The following script was used to achieve this:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class SteeringRotation : MonoBehaviour
{    
	public Transform lookAtMe;    
	void Update()    
	{	        
	// Get the position of the main camera        
    Vector3 cameraPosition = lookAtMe.position;     
    
    // Ignore the Y-axis of the camera position        
    cameraPosition.y = transform.position.y;      
    
    // Make the transform look at the modified camera position        
    transform.LookAt(cameraPosition);    
    }
}

This script enabled the scooter's direction to be determined by the player's head orientation, excluding vertical movements for a consistent level and a more natural riding experience.

Phase IV: Game Environment

I then took a little break from implementing basic mechanics to build an immersive gameplay, I sourced detailed

models like a Vespa scooter, houses, and roads from the Unity Asset Store, and additional objects such as vehicles,

lamp posts, traffic cones, and animals from Sketchfab. I imported my player character from Mixamo. These elements

were integrated into the game to build an interactive world. Replacing the whitebox model with a detailed scooter

from the Asset Store significantly improved the game's visual appeal.

Phase V: Collisions for Dynamic Interactions

Next, I implemented various collision scripts to make the game environment interactive, allowing for dynamic

responses when the scooter interacted with different elements. To keep things original, I created particle systems

to create visual effects upon collisions. I also used audio source components on animal objects that trigger during

collisions. Additionally, I added collision scripts on lamp posts in the scene to change colors as the scooter passed

by, enhancing the dynamic and interactive nature of the game world. You can find the script I used to achieve this below.



public class CollisionScript : MonoBehaviour
{
    public GameObject explosion;
    public ParticleSystem confetti;

    private void OnCollisionEnter(Collision collision)
    {
        // Check if the scooter collides obstacle
        if (collision.gameObject.tag == "ObstacleTag")
        {
            // Activate the explosion
            explosion.SetActive(true);
            explosion.GetComponent<ParticleSystem>().Play();

 // HideExplosion method after 2 seconds to deactivate the explosion
            Invoke("HideExplosion", 2f);
             Debug.Log("Hit an Obstacle");
        }
    }
void HideExplosion()
    {
// hide explosion
        explosion.SetActive(false);
    }

    private void OnTriggerEnter(Collider other)
    {
         if (other.CompareTag("Vespa"))
        {
            Debug.Log("Finish line crossed by " + other.name);
// Activate and play the confetti Particle System
            if (confetti != null)
            {
                confetti.Play();
                 Invoke("HideConfetti", 2f);
            }}}
        void HideConfetti()
    {
        confetti.Stop();
    }}

Closing Note

Developing the VR Vespa scooter game was a comprehensive process involving the integration of various technologies and creative problem-solving. From constructing the initial prototype to implementing detailed environmental interactions and refining control mechanics, each step was driven by a focus on creating an immersive and enjoyable VR experience. Despite challenges, particularly with the steering functionality, the project evolved into a dynamic simulation that captures the essence of scooter riding in a virtual environment.

Acknowledging that this project requires further refinement, I plan to continue working on it, with the goal of enhancing its mechanics to more closely align with the original concept of using the controllers.