Game Development // Task 4: Final Project & E-portfolio

29/6/2025 - 26/7/2025 / Week 11 - 14

Angel Tan Xin Kei / 0356117

Games Development / Bachelor of Design (Hons) in Creative Media 

Task 4 / Final Project & E-portfolio


⋆ ˚。⋆୨୧˚ Instruction˚୨୧⋆。˚ ⋆

Module Information Booklet
Task 4: Final Project & E-portfolio
Timeframe: Week 11 – Week 14 
Description: 
Final Project – Playable Game – 30 % 
  • Students will integrate their art asset to their game development and produce a fully functional and playable game. 
E-Portfolio - 10 % 
  • 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. 
Submission: 
  • Unity Project files and Folders.
  • Video Capture and Presentation of the gameplay walkthrough 
  • Game WebGL Build 
  • Blog post for your reflective studies.

⋆ ˚。⋆୨୧˚ Task 4: Final Project & E-portfolio ˚୨୧⋆。˚ ⋆
Siang Huey Yee:
A. Character Design, Animation & Scripting

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.


Girl Idle, Walk, Jump, Hurt Animation in Sprites (in Adobe Illustrator) 

Girl Animator (Level 2)

Girl with Box Animation in Sprites (in Adobe Illustrator)

Girl with Box Animator


Girl with Umbrella Animation in Sprites (in Adobe Illustrator)



Girl with Umbrella Animator
I also have done the scripting for the Girl Character on Level 2 so that it able to collect both the mystery box and trigger it to change to the Girl Animation with Box or Umbrella and able to get hurt by the light obstacles or protected by the protectors. So I have come out with the Player Controller Level 2 script to make it slightly different from the Level 1.
Player Controller Level 2 Script 
B. Mystery Box with Protectors Scripting

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.

Mystery Box Trigger Umbrella Script

Mystery Box with Umbrella Animator



C. Obstacles Animation & Scripting (Candle Walkers)

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.


Candle Walkers Animation in Sprites (in Adobe Illustrator)


Enemy Damage Script 

Enemy Walker Script



D. Emotion Collectibles Collection Design, Animation & Scripting

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.

Angry Emotion Collectibles Collection Effects Animation in Sprites (in Adobe Illustrator)


Angry Disappear Animator


Happy Emotion Collectibles Collection Effects Animation in Sprites (in Adobe Illustrator)

Happy Disappear Animator

Scare Emotion Collectibles Collection Effects Animation in Sprites (in Adobe Illustrator)


Scare Disappear Animator


Sad Emotion Collectibles Collection Effects Animation in Sprites (in Adobe Illustrator)


Sad Disappear Animator
Then, I created the script logic for the Emotion Collectibles to smoothly transition from their original idle animation to the collection and disappearing effects once triggered by the player. This transition happens seamlessly for all four types of collectibles — Sad, Happy, Angry, and Scared which ensuring that each collectible plays its respective animation before disappearing from the scene.

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.
Collectibles Script
E. Healing Effects and Recover HP Scripting

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 Effects Sparkling Elements

Healing Sound Effects MP3 File

Healing Sound Effects
Healing Effect Manager Script

HP Manager Script

Angel Tan Xin Kei
To ensure a smooth and immersive user gameplay experience, I have carefully planned, illustrated, and implemented each component of the game with clear flow and interactive design. Below is a detailed breakdown of my progress:
A. Storyline and Game Flow Planning
I started by mapping out the entire narrative and structural flow of the game to guide players from onboarding to end credits in a seamless manner. The flow includes the following scenes:
Onboarding Scene --> Storyline Scene Main --> Menu Scene --> 
Level 1 Scene --> Continue Buffer Scene --> Level 2 Scene --> End Game Scene
  1. Onboarding Scene 
    • I created a welcoming interface with a "Get Started" button to ease players into the experience
  2. 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.
  3. Main Menu Scene 
    • Developed a clean layout with “Start Play” button to ensure responsive button interaction.
  4. 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.
  5. Continue Buffer Scene 
    • Added a short pause scene between levels to prepare the user for the next stage without breaking the immersion. 
  6. 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. 
  7. 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.
Fig 2.1 All Scenes in Unity

B. Storyline Illustration

I illustrated all the storyline pages using Adobe Illustrator and imported them into Unity as PNG files. Each page is placed as a full-screen background image 1920 x 1080 within Unity's Canvas system. 

Then, I assisted Yuk Guan a little bit in the UI buttons (“Next,” “Start Game,” etc.) by designing in Adobe Ilustrator as well, customized with Unity’s Button component using MonoBehaviour scripts to link button presses to scene transitions and animated UI elements for better user experience.

1. Onboarding Scene 
  • 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

This artwork was imported into Unity and layered using Canvas elements. Button functionality for "Get Started" was scripted to transition smoothly into the Storyline Scene.

Fig 2.2.2 Onboarding Scene Background in Unity

2. Storyline Scene 

I have created three fully illustrated storytelling pages to introduce the emotional background and themes of the game. Each page was designed in a dark, moody tone to convey fear and isolation.
Fig 2.3.1  Page 1 Background of Storyline Scene

Fig 2.3.2 Page 2 Background of Storyline Scene
Fig 2.3.3 Page 3 Background of Storyline Scene

On the second page, I illustrated two blinking monster eyes in the darkness, then animated using Unity’s Animator and looping behavior to evoke tension and mystery for storytelling.

Fig 2.3.4 Monster Eyes Animation

Fig 2.3.5 Monster Eyes Animation

Fig 2.3.6 Adjustment of Monster Eyes in Unity Animator

I have implemented a sliding page effect using Unity UI scripting when the "Next" button is clicked, the next story page slides in and the text having the typing effect enhancing user engagement. I also created the storytelling scripts for every pages to introduce the emotional background and themes of the game.

Fig 2.3.7 Part 1 of Storyline Scene

Fig 2.3.8 Part 2 of Storyline Scene

Fig 2.3.9 Part 3 of Storyline Scene


Fig 2.3.10 Overview of Storyline Pages in Unity

Then, I have also done the scripting for page container seamless sliding transtion in storyline manager. 

Fig 2.3.11 Scripting for Storyline Manager

Fig 2.3.12 Inspector for Storyline Manager

Fig 2.3.13 Walkthrough of Storyline Scene
3. Main Menu Scene 

The scene acts as a central hub for gameplay access. Designed a minimal yet polished layout featuring a central “Start Play” button and " How to Play" to demonstrate play mechanic tutorial.

Main Menu: 
Fig 2.4.1 Chapter 1 Flickers of Fears
How to Play Tutorial Panel:
Fig 2.4.2 How to Play Tutorial Panel

Fig 2.4.3 Walkthrough of Main Menu Scene

4. Level 1 Scene 

The visual design for Level 1 begins in dark green hues, reflecting a fearful, uncertain beginning.  All background layers were placed with proper sorting orders to create depth, and the emotion collectibles were placed strategically. 
Fig 2.5.1 Level 1 Background

As the player progresses, the background gradually shifts to brighter shades, symbolizing growth and hope. This was implemented using Unity’s color palette adjustments and lighting gradients.

5. Continue Buffer Scene 

This scene was designed to mirror the Main Menu layout, acting as pause and brief intermission between levels. It prepares the player mentally and visually for Level 2, offering a moment of rest while maintaining thematic consistency, 

It is called "Echos of Becoming" because the Character Judy started to become more brave and brighter showing that it still fear of light but can hide and protect herself already. 

Fig 2.6.1 Chapter 2 Echos of Becoming

Fig 2.6.2 Continue Scene Background in Unity

6. Level 2 Scene

Level 2 was designed with a more complex and darker visual theme, indicating that the player is facing deeper fears and challenges. Like Level 1, the background also brightens as the level progresses, reflecting the player’s internal growth and courage. 

Fig 2.7.1 Level 2 Background

The level features more challenging obstacles and an increasingly intense atmosphere. Color and lighting shifts were manually configured using Unity’s Sprite Renderer and Lighting tools.

7. End Game Scene 

Upon completion of Level 2, players are automatically transitioned to the End Game Scene, where the core message of the game is revealed. I illustrated two final story pages, the first page colour is same as the first level whereas second page is using the same colour tone of level 2, they reflected the moral and emotional resolution of the character’s journey. 

Fig 2.8.1 First background of End Game Scene

Fig 2.8.2 Second background of End Game Scene

Then, I have also done the scripting for page container sliding transtion using ending manager. 
Fig 2.8.3 Scripting for Page Sliding Animation

Fig 2.8.4 Scripting for Text Typing Animation

These pages use warmer, softer lighting and colors to convey peace, acceptance, and understanding. As with the earlier Storyline Scene, a sliding transition effect is used to navigate between each final message. 
Fig 2.8.5 Overview of EndGame Scene in Unity

Fig 2.8.6 Part 1 of EndGame Scene

Fig 2.8.7 Part 2 of EndGame Scene in Unity

A “Back to Home” button allows players to return to the Onboarding Scene, encouraging replay or reflection.

C. Background and Platform Design 

I redesigned all background artwork for Level 1 and Level 2 in a consistent shadowed style. Each background was layered for parallax effects using Unity’s sorting layers to add depth to the scenes. Updated all platform designs to fit the aesthetic of their respective levels, with texture variations and shadow details.

Fig 2.9.1 Level 1 Background

Fig 2.9.2 Level 2 Background

I made the tiles to rectangular this time so that the Box Collider 2D can easily detected the overall collider. Imported background elements into Unity, positioned them accurately in the scene, and ensured they are non-interfering with gameplay colliders.

Fig 2.9.3 Level 1 Tiles

Fig 2.9.4 Level 2 Tiles

Moreover, for the Level 2 Tiles, I have made it more challenging by making the floating tiles moving up and down or left and right with different speeds and the ground are not always connected so the floating tiless act as a bridge to gap the pathway.

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

Fig 2.9.9 Walkthrough of Floating Tiles

D. Redesigned Umbrella Obstacle Animation

I completely reworked the umbrella animation used for obstacles. By designing the new umbrella sprite in multiple animation frames opening from mystery box. 

Fig 2.10.1 Animation of Umbrella Open from Mystery Box

Used Unity’s Animator system to animate the umbrella movement and when the character "Judy" touched it. Attached collision scripts to trigger effects when the player hits the mysterybox and umbrella came out. Synced the animation timing with gameplay flow to avoid breaking the user experience.

Fig 2.10.2 Walkthrough of Umbrella Unbox Animation 

E. Background Music Selection

I sourced fitting background music that matches the emotional tone of the game from royalty-free music platforms Pixabay

Fig 2.11.1 Finding Music Sources

Although I delegated the final scripting of music integration to another team member, I ensured that each scene had assigned music tracks and transition logic prepared. I provided guidance on when to fade in/out music to maintain an immersive experience across scenes.

Fig 2.11.2 Assigning Music Sources for Background Scenes

G. UI Buttons and Game Panels 

I created consistent UI buttons for all scenes, including: “Get Started,” “Start Game,” “Proceed,” “Retry,” “Back to Menu,” and “Next.” All buttons have hover effects and sound feedback for user interaction (audio clip sources attached). 

Designed Game Over and Game Complete panels using Unity's Panel UI system, and scripted conditional logic to show the appropriate panel based on player progress. Each panel includes buttons to retry the level or proceed to the next stage, ensuring smooth player flow.










Phoon Yuk Guan

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.
Managed in UIManager.cs by linking Button.onClick.AddListener() in Start().

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).

public void OnPointerEnter(PointerEventData eventData)
{
    audioSource.PlayOneShot(hoverClip);
}

Attached in:

  • Main Menu
  • Pause Panel
  • Game Over & Complete Panels
  • Storyline & Ending Screens

UIButtonsound.cs

using UnityEngine;
using UnityEngine.EventSystems;

public class UIButtonSound : MonoBehaviour, IPointerEnterHandler, IPointerClickHandler
{
public AudioClip hoverClip;
public AudioClip clickClip;
public AudioSource audioSource; // Drag this in the Inspector

void Start()
{
if (audioSource == null)
{
Debug.LogWarning("AudioSource is not assigned in UIButtonSound!");
}
}

public void OnPointerEnter(PointerEventData eventData)
{
if (hoverClip != null && audioSource != null)
audioSource.PlayOneShot(hoverClip);
}

public void OnPointerClick(PointerEventData eventData)
{
if (clickClip != null && audioSource != null)
audioSource.PlayOneShot(clickClip);
}
}

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

using UnityEngine;

[RequireComponent(typeof(Collider2D))]
public class PlaySoundOnHit : MonoBehaviour
{
[Header("Sound Settings")]
public AudioClip soundEffect;

[Tooltip("Volume level from 1 (soft) to 10 (loud)")]
[Range(1, 10)] public int volumeLevel = 10;

[Tooltip("Optional: Only play when hit by object with this tag")]
public string requiredTag = "Player";

void OnTriggerEnter2D(Collider2D other)
{
if (string.IsNullOrEmpty(requiredTag) || other.CompareTag(requiredTag))
{
if (soundEffect != null)
{
float volumeBoosted = Mathf.Clamp01(volumeLevel / 10f);

// Create temporary object with AudioSource
GameObject tempGO = new GameObject("TempAudio");
tempGO.transform.position = transform.position;
AudioSource aSource = tempGO.AddComponent<AudioSource>();
aSource.clip = soundEffect;
aSource.volume = volumeBoosted;
aSource.Play();

Destroy(tempGO, soundEffect.length); // auto-cleanup
}
}
}
}


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.

using UnityEngine;
using UnityEngine.UI;

public class DamageFlashEffect : MonoBehaviour
{
public Image flashImage;
public float flashDuration = 0.2f;
public Color flashColor = new Color(1, 0, 0, 0.4f); // semi-transparent red

private Color originalColor;
private float flashTimer = 0f;

void Start()
{
if (flashImage != null)
originalColor = new Color(1, 0, 0, 0); // transparent
}

void Update()
{
if (flashTimer > 0)
{
flashTimer -= Time.deltaTime;
flashImage.color = Color.Lerp(originalColor, flashColor, flashTimer / flashDuration);
}
else
{
if (flashImage != null)
flashImage.color = originalColor;
}
}

public void TriggerFlash()
{
flashTimer = flashDuration;
flashImage.color = flashColor;
}
}

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).'
PlayerSoundEffects.cs

using UnityEngine;

[RequireComponent(typeof(AudioSource))]
public class PlayerSoundEffects : MonoBehaviour
{
[Header("Audio Clips")]
public AudioClip walkClip;
public AudioClip jumpClip;
public AudioClip landClip;

[Header("Volume")]
[Range(0f, 1f)] public float walkVolume = 0.7f;
[Range(0f, 1f)] public float jumpVolume = 1f;
[Range(0f, 1f)] public float landVolume = 0.9f;

[Header("Ground Detection")]
public LayerMask groundLayer;
public Transform groundCheck;
public float groundCheckRadius = 0.2f;

private AudioSource audioSource;
private Rigidbody2D rb;
private bool wasGrounded = true;
private bool isWalking = false;

void Start()
{
audioSource = GetComponent<AudioSource>();
rb = GetComponent<Rigidbody2D>();
}

void Update()
{
bool grounded = Physics2D.OverlapCircle(groundCheck.position, groundCheckRadius, groundLayer);
float moveInput = Input.GetAxisRaw("Horizontal");

// Walk sound
if (grounded && Mathf.Abs(moveInput) > 0.1f)
{
if (!isWalking)
{
audioSource.clip = walkClip;
audioSource.volume = walkVolume;
audioSource.loop = true;
audioSource.Play();
isWalking = true;
}
}
else
{
if (isWalking)
{
audioSource.Stop();
isWalking = false;
}
}

// Jump
if (Input.GetButtonDown("Jump") && grounded)
{
audioSource.PlayOneShot(jumpClip, jumpVolume);
}

// Landing
if (!wasGrounded && grounded)
{
audioSource.PlayOneShot(landClip, landVolume);
}

wasGrounded = grounded;
}
}

In my script, it uses Physics2D.OverlapCircle to detect if grounded, with public Transform groundCheck and LayerMask.

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


Contribution by Angel Tan, Huey Yee and Yuk Guan

⋆ ˚。⋆୨୧˚ Feedback ˚୨୧⋆。˚ ⋆
Week 13 
Ms. Mia felt that our game is fully complete and praised the art direction and sound effort, noting that the sound effects effectively reflect the game's theme. She suggested that we could consider extending the gameplay and enhancing the mechanics in Level 2 to make it more challenging for users. 

Week 14 
Ms. Mia said our game is very well done and she really liked it. It met her expectations for an A-grade project.

⋆ ˚。⋆୨୧˚ Reflection ˚୨୧⋆。˚ ⋆

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:

Experience: 
Working on the final version of the game has been both challenging and deeply rewarding. Turning our ideas into a fully functioning, complete game felt like a big achievement, especially after seeing how much we’ve grown since the proposal stage. I truly enjoyed illustrating each scene, from the mysterious onboarding to the emotional ending, and seeing them come to life inside Unity. This time, the experience felt more polished and intentional. I became more confident with using Unity’s tools especially UI systems, scene transitions, sprite layering, and animation control. It was exciting to experiment with light and color to show emotional progression, such as how the background brightens as the player moves forward in the level. Although there were still some technical hurdles, I found them easier to handle thanks my teammates as they helped a lot, especially when it came to scripting and implementing music. Overall, it was fulfilling to build something that not only works but also communicates a message about fear, identity, and growth. 

Observations: 
I observed that visual storytelling plays a huge role in shaping the player’s experience. Small details like glowing text, blinking monster eyes, or the shift in background color can subtly guide the player’s emotions without needing direct explanation. It made me realize how much can be communicated through design choices alone. I also noticed that maintaining a consistent flow between scenes is crucial for immersion. By smoothing out the UI buttons, applying sliding effects, and syncing background music with the mood of each level. Another key observation was how gradual progression in visuals and difficulty makes the game more engaging. Level 2 being more complex than Level 1 gave a sense of growth and accomplishment. The subtle changes in brightness and obstacle design helped reinforce the theme of overcoming fear. 

Findings: 
Through this final task, I discovered several valuable insights emotion can be shown through mechanics and visuals, not just dialogue. Designing light transitions, scary animations, and uplifting endings taught me that gameplay and story can support each other in powerful ways. Learning to trigger scene transitions, implement button feedback, and create page-slide effects has improved both my technical and creative skills. Elements like timing, button behavior, background music, and screen layout may seem small, but they significantly affect how professional and enjoyable the game feels.  Narrative design requires planning,  not just about what the story is, but when and how it's delivered. Spacing out story pages, using visuals to reflect progress, and placing moral lessons at the end made the message more meaningful. Teamwork is still key as even in this final stage, collaborating on tasks like scripting and debugging made everything more efficient and less stressful.

Phoon Yuk Guan:

Experience
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.

⋆ ˚。⋆୨୧˚Quick Link˚୨୧⋆。˚ ⋆




Comments

Popular posts from this blog

Information Design / Exercises

Game Development // Task 2: Art Asset Development

Information Design / Project 1: Animated Infographic Poster