For the final week, Mai and I finished up our Unity project quite smoothly. We both were very pleased with the overall results. As with any large project, there were a lot of changes to both the story and the game scenes. Here is a brief rundown of the entire process:
1. Mai and I decided to loosely base our Unity experience on the classic Chinese folktale, Monkey Grasps the Moon (猴子捞月亮), a story that I've heard countless times in my childhood. Mai and I both loved the simplicity of the tale, as well as the lesson behind the monkey's foolishness. Prior to building the game, I already had a vision for what I wanted the experience to look like.
Our moodboard:
2. In order to better visualize the scenes we wanted to make, I drew some quick sketches:
3. Both of us really liked the idea of having the monkey switch between two different settings. The first setting would be the forest with the moon's reflection on the surface of the lake. Once the monkey jumps into the lake to grasp the moon, he will find himself underwater, looking at the actual moon above and realizing that he tried to grasp the reflection. We *naively* assumed that making this scene transition would be easy enough.
4. I attempted to find some assets we could use, but there was a shortage of monkeys in the Unity asset store, and I felt that because we wanted to create a unique visual style, generating our own assets would be the best direction to go in. Having worked with Cinema4D for around four years, I was pretty confident I could create some basic assets to use for our experience.
Cinema 4D process frames:
Over the course of two weeks, I custom modeled all the assets we needed for the experience, using reference images to help me achieve the right level of detail. Modeling the assets was extremely painstaking, so I knew that I needed to create a shader that hides the *embarrassingly* simple shapes and makes them look more complex than they actually are. I also rigged our Main Monkey and ran it through Mixamo to get the animations we needed.
5. The next step was to start animating and getting user input for the Main Monkey. Using Unity's graphical animators, we managed to make the monkey move basic left.right,up,down, as well as jump (sort of).
6. After perfecting the animations and input for the Main Monkey, we started building the scene. At first, everything looked very gray and drab, which put more pressure on us to make a good-looking shader.
7. In terms of the shader, I knew that I wanted to create something similar to storybook art. Bright, colorful, with dark outlines. I had previously modified a Toon shader for my first assignment, and I used that as the starting point for this shader. The main challenge was to cycle through the pixels of the asset and draw a thick outline on any edges. The result would be a cell-shaded-esque effect that would hide any imperfections of the model itself.
8. I half-expected the shader not to work at all, but surprisingly, it was the best part of the entire project. After applying it to the materials in the scene, the project immediately transformed into something out of a children's storybook.
9. With the assets and the shader, all we had to do was to rearrange the scenes so that it included all the elements we wanted: Bamboo forest, temple, Cherry Blossoms, river, and Buddha statue.
9. Next up, we needed to create the reflection of the moon on the lake. After the lecture on applying video planes in Unity, we decided to just use a video of a moon reflection and stick it to the lake object. I quickly went into After Effects and created a moon reflection animation (literally just an ellipse with ripple effect).
10. I added the video to a plane on top of the lake
11. Of course, we also needed to start creating the second scene. At this point, we ran into our first real problem: how were we going to transition from the forest scene into the underwater scene. At first, we experimented with hiding objects through collider-trigger methods, so that the monkey would fall into the underwater scene below the forest. However, the change was too abrupt, and it just looked like the game glitched out. After a few long meetings, we decided to completely change the layout of the second scene; we decided on a larger version of the lake, with only a large moon and the reflection as the main points. I added particle effects for stars, as well as smaller particles around the monkey to emphasize the dreamlike, surreal atmosphere of the entire story.
12. With everything coming together, we just needed to transition from Scene1 into Scene2 seamlessly. I decided to use a trick that I implemented regularly when I'm filming videos, which was to use light as the transition. I just took a screenshot of the moon's texture, and then layered it over the entire scene. Then, I animated the texture so that it fades out when the monkey collides with the reflection plane, and then fades in when Scene 2 loads, making it seem as if the moon light shone over the camera. It was a very seamless transition, which meant that all we had left to do was to record the audio.
13. Before starting the project, I had planned to create all the audio on our own. However, everything about the project had taken a toll on us, so we decided to use freesound assets instead, and make some minor adjustments in Audition. Surprisingly, freesound had almost everything we needed (except for monkey sounds, which Mai found on YouTube). I used the guqin (古琴) a Classical Chinese instrument for the Cherry blossom section, Chinese wind chimes for the temple, bamboo chimes for the bamboo forest, stream-flowing sounds for the lake, crickets for the overall terrain, and a hum with reverb applied to the Buddha statue.
14. After adding all the audio, we thought we were essentially finished. However, after receiving feedback during our last class, we discovered that our story wasn't displaying that effectively to our audience. As a result, we had to rethink our narrative. After some meetings, we decided that there should be a narrator that narrates specific parts of the story throughout the experience, mirroring how a parent would read a nighttime book to a child. I thought that maybe I could narrate the story in Mandarin, but after finding out that my voice is not relaxing at all, we agreed that Mai should be the narrator instead. We created a simple script for narration:
Introduction
Narrator: "One day, a little monkey was taking a stroll through the forest"
Quotes
[Bamboo:]‘Everything we see is a perspective, not the truth.”
[Mushroom:] “No problem can be solved from the same level of consciousness that created it”
[Buddha:] “Thinking before acting is wisdom. But acting before thinking is regret.”
[Water:] “The only thing worse than being blind is having sight but no vision.”
Monkeys
“Oh No! The moon has fallen into the lake!”
How do we bring the moon out of the water?
“Let’s scoop it out!”
Ending
Narrator: “To his surprise, the monkey realizes that the moon in the lake was only a reflection”
The only condition we needed to implement was that the Main Monkey could not activate the scene change unless he has talked with the other monkeys in the scene. Mai researched and picked the quotes, and then recorded herself reading over the script. After adding some post-production effects to her voice, I thought the result was amazing. Mai's voice had the story-teller feel to it, and it really tied the whole experience together.
15. The last few bits were just adding Mesh Colliders to the objects, placing the GameObject audio sources around the map, and fixing small issues such as fades and camera angles.
Final Screengrabs:
Personally, this project process was a very valuable experience. Since Mai and I are both beginners at Unity, tackling a large project like this really strengthened our understanding of the software and workflow, and I will definitely keep using Unity after this course. Mai was amazing to work with, and I really liked how we were both able to build off of each other's ideas and flesh out our prototypes into a piece that we are happy with!