Virtual Pet
Virtual Pet is a collaborative project developed for Augmented Reality coursework, aimed at providing users with an emotional companion—especially for those unable to care for real pets. I collaborated with a cross-functional team of two engineers and designers, focusing on 3D design, interactive animation, and UX design.
My ​Role
Team
3D Design
Animation
UX Design
Suyeon Lee
Zemeng Li
Fynn
KT
Kicky Chen
Date
Oct - Dec 2024

Background - Why AR?
The initial idea came from my previous UX case study PetFam, a project that explored using AI-based facial expression analysis to help pet owners interact meaningfully with their pets, even when away from home. However, Virtual Pet naturally solved this challenge. With a virtual pet, user can connect with their pet anytime, anywhere without worrying about it feeling lonely. That’s why AR is the perfect way to bring this project to life.
Concept
After we clarified our concept, I visualized a rough prototype and shared our ideas through detailed sketches to ensure a clear direction for the project.

Initial idea sketch
User Journey
We mapped out the core flow of our project using user maps and storyboards. I created the storyboard sketches to show the interactions between the user and the pet more clearly.


User Map
Storyboard
Initial Features & User Testing

To keep the time efficient, we tested the main interaction 'Throwing The Ball' before diving into detailed individual tasks.
01. Interaction
-
Made colliders to prevent hitting the wall or tables.
-
Applied XR Grab Interactable to pick up and throw the ball.
02. Pet Behaviour
-
Using AR Plane Manager from Unity AR Foundation enabled the pet to roam naturally in the space.
-
Applied a Rigidbody to make sure the object stays on the ground naturally with gravity.
-
Enable the pet to navigate to the ball by setting the ball as the target using NavMesh.
​​

Insights From Initial User Testing

Problems:
01. Users felt the dragon didn’t seem very interested in chasing the ball.
02. Pet wasn’t looking at the user when throwing the ball—users wanted it to pay more attention to the interaction.
03. More than half of the demo participants wanted to reach out and touch the pet. However the pet moved around so much that users couldn’t catch or pat it.
Solutions:
01. Play the "Run" animation when the pet starts chasing the ball to make its behavior more lively.
02. Add variety by randomly triggering "Roar" or "Jump" animations when the user picks up the ball.
03. Use the [LookAt] function to make the pet face the ball as soon as the user picks it up for a more engaging interaction.
04. Add patting interaction.
Individual Contributions
01. Creating joints in Maya
For our virtual pet, we used a dragon model downloaded from the Unity Asset Store.
To add more animation variety, I first iterated on the existing joints using Maya’s skeleton system. I bound the joints to the mesh skin, ensuring the mesh moved naturally with the joints.
02. Add animation in Unity Animator
Next, I exported the character as an FBX file and imported it into Unity. Using Unity Animator, I adjusted the joints and created smooth loop animations with keyframes. The key to a good looping animation is making sure the first and last keyframes are identical.
​
I researched how dogs move in real life to make the animations feel more natural and created four animations: Pat, Eat, Roar, and Jump
Patting
During testing, I realised the big head was hiding the tail, so I added a little rotation to show off the tail wag better

Jumping
I added a jumping animation that randomly plays when the user picks up the ball but doesn’t throw it.

03. 3D Asset Design
For the item, I created the main ball 3D asset in Maya.
I started with a sphere, applied a texture using an image, and created a bump map from the same texture to add detail.
​
Then I exported the 3D asset as an FBX file and imported both the texture and source files into Unity.
Based on the insights from the first demo, we focused on our each tasks and followings are my contributions.


Eating
Pet faces down, moves its mouth repeatedly, and has a slight body shake to make it feel more lifelike.

Roaring
Roaring is another random animation that plays when the user picks up the ball but doesn’t throw it.



Texture

Bump map
Walk-Through Video
Reflection
From the very beginning of planning the virtual pet, I imagined how great it would be to have my own virtual pet. We achieved most of our initial goals. Using AR Foundation, we successfully implemented spatial scanning and the ability to pick up and throw the ball. Through user testing, we enhanced the project, improving the overall user experience. The virtual pet interaction met the needs of users who can’t have real pets, and it was heartwarming to see many students enjoying and playing with the pet during the final demo day.
​
Since it was my first time using tools like Unity and Maya this semester, learning the software while keeping up with the project was definitely a challenge. I also needed to do a lot of research to rig the model and create natural animations.
​
The next step is to design the UI. In the initial concept phase, the goal was to complete the UI as well, but I decided to focus on making the animations and interactions feel more natural. Now, it's time to enhance the user experience by adding a head-up display that shows the pet's mood and status.The next step is to design the UI. In the initial concept phase, the goal was to complete the UI as well, but I decided to focus on making the animations and interactions feel more natural. So now I plan to enhance the user experience by adding a head-up display that shows the pet's mood and status.