Game Development // Task 4: Final Project & E-portfolio
Angel Tan Xin Kei / 0356117
Task 4 / Final Project & E-portfolio
- Students will integrate their art asset to their game development and produce a fully functional and playable game.
- Students describe and reflect on their social competencies within the design studio context, supported by evidence. Reflect on how to empathize with others within group settings, interact positively within a team and foster stable and harmonious relationships for productive teamwork. The reflective writing is part of the TGCP.
- Unity Project files and Folders.
- Video Capture and Presentation of the gameplay walkthrough
- Game WebGL Build
- Blog post for your reflective studies.
In addition to the Level 1 shadow character, I have also designed the Girl Character for Level 2. In this stage, the character appears significantly brighter and no longer in her shadow form, symbolizing her emotional growth after collecting the emotion collectibles. She now resembles a real, fully-formed character, reflecting her progress in the journey.
For this new form, I created a full set of animations, including Idle, Walk, Jump, and Hurt. Each animation was designed frame by frame using Adobe Illustrator and imported into Unity.
Moreover, I redesigned the character variations for specific scenarios:
Girl with Box: Includes Idle, Walk, and Jump animations.
Girl with Umbrella: Also includes Idle, Walk, and Jump animations.
These variations allow the character to interact differently with the environment based on the power-ups or tools she obtains throughout the game. All sprites were carefully illustrated and animated to ensure smooth transitions and consistent visual style across levels.
In Level 2, a new type of Mystery Box is introduced one that unlocks an Umbrella as a protector. With Angel’s contribution in completing the Mystery Box with Umbrella animation in sprite form, I took charge of scripting both the MysteryBoxTriggerLevel2 and MysteryBoxTriggerUmbrella scripts. To avoid any confusion or script overlap between Level 1 and Level 2, I decided to create separate scripts specifically for Level 2. This separation ensures that the gameplay mechanics remain consistent and error-free across levels. Additionally, I created a MysteryBoxManager GameObject in the Unity Hierarchy, where I attached the relevant C# script files. This helped organize the system and ensured that both Mystery Box functionalities — in Level 1 and Level 2 — operate smoothly and independently.
In Level 2, I designed a new type of light-based obstacle known as the Candle Walkers, which also poses a threat to the player’s health. I created the Candle Walker animations using Adobe Illustrator, exporting the sprite sequences into Unity for use in the game. These Candle Walkers behave like patrolling enemies, they move back and forth across a defined area, requiring the player to carefully time their movements to avoid contact. If the player fails to pass through at the right moment, the Candle Walker will deal damage, unless the player is protected by a shield-like item, such as the Mystery Box protectors such as Box or Umbrella.
To implement this mechanic, I developed two separate scripts. The first is the EnemyWalker.cs, which controls the movement of the Candle Walkers, including their walking range and speed. The second is the EnemyDamage.cs, which handles collision detection and applies damage by reducing the player’s HP by 1 upon contact. These scripts ensure the Candle Walkers function as dynamic, moving obstacles that add challenge and tension to the gameplay in Level 2.
I have also worked on designing and implementing the Emotion Collectibles system, adding a clear and visually engaging collection effect for each type. Whenever an emotion collectible is picked up by the player, it now displays a glowing or shining animation before disappearing. This helps make the collection process feel more rewarding and noticeable.
I designed all four types of Emotion Collectibles — Sad, Happy, Angry, and Scared each with its own colour palette and visual identity. The sprite animations for these collectibles were created in Adobe Illustrator, carefully crafted frame by frame to bring each emotion to life.
To enhance the interaction further, I created individual Animator Controllers for each emotion collectible. These animators ensure that once the player collects a collectible, it triggers the shining animation before the object disappears. This not only creates a smoother visual transition but also reinforces the collectible’s emotional theme.
These collection effects have been consistently applied across both Level 1 and Level 2, ensuring a uniform experience throughout the game. This attention to detail makes it easier for the player to identify when a collectible has been successfully collected and adds a more polished, game-like feel to the overall experience.
I handled this functionality through the Collectible script, which I customized to trigger the appropriate Animator transitions and add a slight delay before destroying the GameObject. This way, the collection animation can fully play out, giving the player visual feedback and making the collectible interaction feel more polished and satisfying.
In Level 2, I implemented a new feature where the player can regain 1 HP after collecting 5 Emotion Collectibles. This healing mechanic was introduced to balance the difficulty of Level 2, as it is designed to be more challenging than Level 1. By ofering this small reward, we aim to keep players motivated and give them a sense of progression and encouragement to complete the level.
For the healing visuals, I designed a custom Healing Effect sprite that resembles sparkling magical elements. This visual appears every time the player regains HP, making the healing process feel more rewarding and noticeable. In addition, I integrated a healing sound effect that plays during the recovery to enhance feedback and ensure that players are aware they’ve gained health.
To support this functionality, I wrote a dedicated script called HealingEffectManager.cs, which handles both the healing visuals and sound playback. I also made modifications to the existing HPManager script to ensure that the healing process correctly increases the HP and updates the heart sprite on the UI. These scripts work together to create a smooth and responsive healing effect whenever the player meets the collectible requirement.
Healing Sound Effects MP3 File
- Onboarding Scene
- I created a welcoming interface with a "Get Started" button to ease players into the experience
- Storyline Scene
- Illustrated a storytelling section where players learn about the background and emotional narrative behind the game.
- "Start Game" button that appears after the story.
- Main Menu Scene
- Developed a clean layout with “Start Play” button to ensure responsive button interaction.
- Level 1 Scene
- Designed layout of gameplay for Level 1 with working mechanics, enemies, obstacles, and collectibles.
- Once complete the level, a “Proceed to Next Level” button.
- Continue Buffer Scene
- Added a short pause scene between levels to prepare the user for the next stage without breaking the immersion.
- Level 2 Scene
- Introduced new obstacles and mechanics in Level 2 for increased challenge and engagement.
- Upon completion, the player is taken directly to the endgame scene.
- End Game Scene
- Final scene that shares the moral of the story to tie everything together meaningfully.
- Included a “Back to Home” button for replayability, directing users to the Onboarding Menu.
- I illustrated a shadowy figure hiding under a cloak at the center of a dark background to create a mysterious, haunting tone right from the start.
- The title “Self - Shadowed” appears in glowing text, symbolizing inner identity and fear, immediately capturing the game's metaphorical essence.
|
| Fig 2.2.1 Onboarding Scene Background in Adobe |
|
|
|
|
|
||
|
|
|
||
|
|
| Fig 2.4.1 Chapter 1 Flickers of Fears |
|
| Fig 2.4.2 How to Play Tutorial Panel |
|
| Fig 2.5.1 Level 1 Background |
|
| Fig 2.6.1 Chapter 2 Echos of Becoming |
|
| Fig 2.6.2 Continue Scene Background in Unity |
|
|
|
|
|
Fig 2.8.1 First background of End Game Scene |
|
| Fig 2.8.2 Second background of End Game Scene |
|
| Fig 2.8.5 Overview of EndGame Scene in Unity |
|
| Fig 2.8.6 Part 1 of EndGame Scene |
|
| Fig 2.9.1 Level 1 Background |
|
| Fig 2.9.2 Level 2 Background |
|
| Fig 2.9.3 Level 1 Tiles |
|
|
Fig 2.9.4 Level 2 Tiles |
|
| Fig 2.9.5 Floating Tiles |
|
| Fig 2.9.6 Tiles Speed and Distance Setting |
|
| Fig 2.9.6 Scripting for Floating Tiles |
|
| Fig 2.9.7 Overview of Level 1 |
|
|
Fig 2.9.8 Overview of Level 2 |
D. Redesigned Umbrella Obstacle Animation
|
|
| Fig 2.10.1 Animation of Umbrella Open from Mystery Box |
E. Background Music Selection
|
| Fig 2.11.1 Finding Music Sources |
|
| Fig 2.11.2 Assigning Music Sources for Background Scenes |
For Task 4, I updated existing UI panels and added sound effects and visual feedback to improve the game experience and polish the feel of interaction.
A. Game Flow UI Updates
1. Updated Game Completed Panel
Added inside:
- Next Level Button → calls UIManager.LoadNextLevel() to load ContinueScene.
- Quit Button → exits to main menu or another end scene.
![]() |
| Updated Game Completed Panel |
2. Updated Game Over Panel
Now includes:
- Replay Button (reload current level).
- Home Button (go back to MenuScene).
![]() |
| Updated Game Over Panel |
B. Button Hover & Click Sounds
I created UIButtonSound.cs, which is added to every UI Button object in Unity. Each button has:
AudioSource component.
- Two clips assigned: hover and click.
- Handled via Unity's EventSystem (IPointerEnterHandler and IPointerClickHandler).
Attached in:
- Main Menu
- Pause Panel
- Game Over & Complete Panels
- Storyline & Ending Screens
UIButtonsound.cs
![]() |
| UI Button Sound in Unity inspector |
B. Typing Sound (Storyline & Ending Scene)
In both StorylineManager.cs and EndingManager.cs, I created a coroutine for typing text using TextMeshProUGUI. To give players audio feedback, I played a typing sound during the loop.
IEnumerator TypeText(TextMeshProUGUI textElement, string fullText)
{
textElement.text = "";
audioSource.loop = true;
audioSource.clip = typingClip;
audioSource.Play();
foreach (char c in fullText)
{
textElement.text += c;
yield return new WaitForSeconds(typingSpeed);
}
audioSource.Stop();
}
![]() |
| Typing sound effect in Unity Inspector |
C. Emotion Collect Sound
Each emotion collectible has the PlaySoundOnHit.cs script attached. When player collides:
- Emotion count increases.
- Sound plays (pop/collect SFX).
- Emotion briefly reappears and "flies" to the UI (done without prefab, animator, or DOTween).
PlaySoundOnHit.cs
![]() |
| Attached on Unity Inspector |
D. Feedback on Damage (Visual + Sound)
1. Red Flash When Damaged
I created a full-screen Image in the Canvas (semi-transparent red), and used DamageFlashEffect.cs:
The image smoothly fades using Color.Lerp in Update() to create a red flash.
![]() |
| Red Flash Image Overlay in UI Canvas |
E. Player Movement Sound Effects
I created a PlayerSoundEffects.cs script attached to the player:
- Walk (looping sound when pressing left/right on ground).
- Jump (when pressing jump button).
- Land (when player touches ground again).'
![]() |
| Player Sound Effects assigned in Unity inspector FINAL TASK - SHADOWED-SELF SUBMISSION Here is our Shadowed-Self Final Task Playable Game Walkthrough Video. Click HERE to view it on YouTube. Here is our Shadowed-Self Game File in Google Drive link below. Google Drive Link: https://drive.google.com/file/d/1jdlFhqm8WtUb8PdtSe9TX2SBx1Ow2qDW/view?usp=sharing |
Siang Huey Yee
Experience:
In the final playable version of Shadowed-Self, I continued working on scripting and polishing key features such as healing logic, scene transitions, damage systems, and the HP UI. I was able to fully implement features from earlier stages and expand them across multiple levels. I continued to rely on ChatGPT and YouTube to troubleshoot bugs and gain new insights, especially when developing scene management and animation control for multiple levels. I am very happy and thankful to work with teammates like Angel and Yuk Guan, who were always supportive, cooperative, and contributed equally to design, artwork, and testing. Our collaboration helped us successfully complete a playable game project with meaningful interaction and storytelling.
Observation:
From this task, I observed that final integration is often more complex than individual tasks. Even when individual features work perfectly in isolation, putting them together into a seamless experience requires extra attention to timing, compatibility, and performance. We also faced issues like audio layering, collision inconsistencies, and asset organization, which we resolved through communication and testing.
Also, player feedback became more crucial at this stage. We realized which features were enjoyable and which ones needed fine-tuning to enhance engagement.
Findings:
By the end of this task, I have become more confident in my ability to build a fully playable 2D game using Unity. I also understood the importance of collaboration, clear file structuring, and playtesting in delivering a polished game. The most valuable lesson I learned is that even with limited resources, great teamwork and a clear vision can lead to a successful and meaningful game experience.
Angel Tan Xin Kei:
Phoon Yuk Guan:
During the final project phase, I focused more on adding polish and player feedback. I added typing sound effects in both the storyline and ending scenes, which made the narration feel more alive. I also implemented button hover and click sounds to every single button in the game — even the ones in storyline and pause menu. On top of that, I worked on damage feedback with camera shake and red flash effect whenever HP drops, which added a lot of intensity to the game. I also added emotion collect sound and made the emotion fly up to the counter bar — all with just code and without using animator or prefab, which I’m really proud of.
Observations
What I observed during this stage was how much small sounds and effects could improve the "game feel." Without sound and visual feedback, pressing a button or taking damage felt empty. But once I added the sound effects, it immediately made everything feel more responsive. Also, working with coroutines for the typing animation made me more comfortable using IEnumerator, especially when combining it with audio playback. I also noticed how critical it was to have clean organization in my scripts, since everything was getting more complex.
Findings
I found out that everything in Unity can be enhanced with just scripting — I didn’t need Animator or DOTween for most of the features I implemented. By writing my own custom scripts for audio, typing, camera shake, and screen flash, I could control exactly how things behaved. I also learned that it's better to write reusable components like UIButtonSound.cs or PlayerSoundEffects.cs, so I can apply them to multiple buttons or characters without repeating myself. In the end, I realized that feedback systems (audio, visual, vibration) are just as important as gameplay mechanics — they complete the experience.









































































Comments
Post a Comment