Game Development // Task 3: Game Prototype

8/6/2025 - 28/6/2025 / Week 8 - 10

Angel Tan Xin Kei / 0356117

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

Task 3 / Game Prototype



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

Module Information Booklet

Task 3: Game Prototype

Timeframe: Week 08 – Week 10

Description:

Students given the task to create the prototype of their game. The prototype doesn’t need to have the final art asset, and theuse of grey boxing is allowed. The focus here is to quickly test out the game mechanics and to troubleshoot any technical difficulties discovered during the development. The focus should be the MVP of your game.

This includes:

  • Coding movements and actions
  • Coding obstacles and enemies’ interactions
  • Coding game levels (Logic of the game)

    Submission: 
    1. Video walkthrough and presentation of the game
    2. Online posts in your E-portfolio as your reflective studies


    ⋆ ˚。⋆୨୧˚ Task 3: Game Prototype ˚୨୧⋆。˚ ⋆
    Siang Huey Yee
    A. Character Design, Animation & Scripting

    I was responsible for the animation tasks, which included creating the IdleWalkJump, and Hurt animations for the Girl Shadow Character. These animations were imported into Unity, and I created an Animator Controller for the Girl Shadow Character. In Level 1, the character appears as a shadow, but as she progresses to Level 2, she transforms into her original, brighter form. Therefore, I created two Animator Controllers: one for the Girl Shadow and another for the Original Girl Character.

    Since Task 3 focuses on the Level 1 prototype, I have showcased only the Level 1 version of the character and its animations. Additionally, I realized that we did not include a Hurt sprite for the Girl Shadow in Task 2, so I designed it in Adobe Illustrator.

    I set up transitions between the animations in the Animator, allowing the character to move left and right using the arrow keys and jump with the space bar.

    Girl Shadow Animator (Level 1)


    Girl Shadow Hurt Animation in Sprites (in Adobe Illustrator)

    After Angel completed the design of the Mystery Box and its opening animation, I scripted it so that when the Girl Shadow Character collects the box, she transforms into the Girl Shadow with Box Protector version. I redesigned a new set of sprites for this transformation, frame by frame, based on the original Task 2 art assets using Adobe Illustrator.


    Girl Shadow with Box Animator


    Girl Shadow with Box Animation in Sprites (in Adobe Illustrator)


    Once all animations and assets were implemented into the game scene (which includes Angel's completed background), I ensured the character could stand on the ground, Idle, Walk, Jump, get Hurt by obstacles, and collect both the Mystery Box and Emotion Collectibles properly.

    Player Controller Script 

     

    B. Obstacles Animation & Scripting
    For Level 1, the only obstacle is the Light Beam, which reduces the character's HP by one bar upon contact. I scripted it to appear for 5 seconds, then disappear, and reappear every 10 seconds, creating an interval-based challenge for the player.
    Light Beam Controller Script


    C. Mystery Box Animation & Scripting
    After Angel finished the sprite animation for the Mystery Box, I created an Animator Controller for it and scripted the interaction. When the Girl Shadow Character triggers the Mystery Box's collider, it plays the opening animation and transforms the player into the Girl Shadow with Box form. This effect lasts for 15 seconds, after which the character returns to the normal Girl Shadow version.
    Mystery Box Animator
    Mystery Box Script
    Mystery Box Trigger Script

    D. Collectibles Scripting
    Angel completed the sprite animations for the Emotional Collectibles: Sad, Angry, Happy, and Scared. With Yuk Guan assisting in designing the Emotion Count UI element, I handled the scripting to allow the player to collect the emotions. Upon collection, the corresponding Emotion Count text updates on the screen. This task was a true team effort, and we worked closely together to make the feature functional and visually appealing.
    EmoCoin Manager Script

    E. Camera Follow
    Lastly, I was also responsible for scripting the Camera Follow system, ensuring that the camera smoothly tracks the player to provide an immersive and enjoyable gameplay experience.
    Camera Controller Script
    Angel Tan Xin Kei

    A. Set up the Background and Tiles

    I have imported and organized background assets in the scene so that all the layers fit the screen.

    Fig 2.1 Background Layering in Unity

    I ensured that the background layers are properly sorted to maintain depth and visual clarity.I also laid out tilemaps using Unity’s Tilemap system to design the level structure.

    Fig 2.2 Tiles Layer in Game Mode

    Also adjust the setting accordingly such as adding Tilemap Render, RigidBody 2D, Tilemap Collider 2D, Composite Collider 2D so players can walk on it

    Fig 2.3 Tilesmap Inspector Setting in Tilesmap
    B. Draw the Box Animation 

    I have designed the box sprite in Adobe Illustrator and then animated using frame-by-frame animation in Unity’s Animator. I created idle and interaction animations for opening with a bouncing effect to make the box visually engaging when players try to get the protector.

    Fig 2.4 Box Animation in Sprites

    I imported animation clips and integrated them into the scene with basic triggers.

    Fig 2.5 Animation of Box Trigger in Unity

    C. Draw the Light Obstacles Animation 

    I have designed light obstacle sprites and animated them to simulate flickering or moving lights.

    Fig 2.6 Light Beam Animation in Sprites

    I also implemented animation in Unity to add dynamic hazards that fit the game’s visual theme. I have placed animated obstacles in the level to create environmental challenges for the player.

    I also applied looping animations and added Box Collider 2D to simulate hazards and placed them strategically in the game environment. I ensured animations are timed well to sync with gameplay pacing and difficulty.

    Fig 2.7 Light Beam Animation in unity

    D. Scripting for the Emotions as Collectibles

    Fig 2.8 Emotion Collectibles Scattered in Game

    I have created emotion collectible prefabs with associated scripts. I scripted functionality so that when the player touches a collectible, it disappears and triggers a collection event.

    I also linked the collectibles to the UI or game state (e.g., score, progress tracking) to reflect successful pickups.

    Fig 2.9 Scripting for Emotion Collectibles 

    Phoon Yuk Guan 
    A. UI Buttons & Elements

    To start doing the UI Buttons and elements, I put all of the buttons and UI panels are placed under a single Canvas in Unity, and their functionalities are handled through scripting which is the UI Manager Script.

    UIManager.cs




    using
    UnityEngine;


    1. Pause Menu Panel
    I created a Pause Panel (GameObject) inside the Canvas.

    Contains:

    • Resume Button → calls UIManager.TogglePause() to unpause the game (Time.timeScale = 1).
    • Home Button → calls UIManager.ReturnToHome() to go to the main menu scene.
    • Controlled via the Escape key or in-game triggers.
    • Panel is hidden at start (pausePanel.SetActive(false) in Start()).
    Pause Menu Panel



    2. Restart Button

    I put this restart button in both the Pause Panel and Game Over Panel.

    Buttons are connected via Unity Inspector to call UIManager.RestartGame(), which reloads the current scene using: SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex);

    Pause and Restart Button in UI Canvas
    Pause Menu Panel Hierarchy


    3. Game Over Panel

    I also added an overall game over panel when the game is over or the player loses their game.

    Contains:

    • Replay Button → reloads the current scene (same as restart).
    • Quit/Home Button → goes back to main menu (MenuScene).
    • Triggered via UIManager.ShowGameOver() when HP reaches 0.
    • Initially hidden (gameOverPanel.SetActive(false)).
    Game Over Panel

    Game Over Panel Hierarchy


    4. Level Completed Panel

    • Displays when the player reaches the level-ending door.
    • Triggered via UIManager.ShowLevelComplete().
    • Used to just indicate level clear.
    Level Caompleted Panel


    B. HP System & Damage Management

    In my Unity game project, I implemented a centralized HP management system using a custom script called HPManager.cs. This script handles HP initialization, reduction, recovery, visual feedback, and game over detection.

    The script is attached to a dedicated GameObject in the scene (usually an empty GameObject called HPManager), and marked as a singleton so it can be accessed from other scripts easily.

    In my HPManager.cs:

    1. HP Initialization

    • I set the maximum HP to 5 for my game.
    • At Start(), I initialize currentHP = maxHP and update the UI by calling: UIManager.instance?.UpdateHP(currentHP);

    2. Reduce HP and Trigger Game Over

    When the player takes damage, this function is called: public void ReduceHP(int amount)

    • Subtracts the amount from currentHP
    • Clamps it between 0 and max
    • Updates the UI HP bar
    • Triggers ShowGameOver() in UIManager.cs if HP drops to 0

    3. Add HP with Floating Text

    When healing is triggered (like by a health pickup), this method is used.

    It checks if HP is already full. If so, logs "It is already Full HP" and skips.

    If not:

    • Heals the player by the specified amount
    • Clamps HP
    • Updates the HP UI
    • Plays a healing effect using HealingEffectManager
    • Shows floating text (e.g., “+1 HP”) at the player’s position

    This adds strong game feel when healing occurs.

    4. Utility Functions of HP Manager
    • Resets HP back to full when starting a new level or respawning.
    • Checks if HP is already full, to prevent over-healing.
    5. Floating Text on Heal

    When the player heals, a floating text prefab appears above the player.

    This is managed by:

    • Instantiating the prefab at position + Vector3.up * 2
    • Setting the text using: floating.SetText("+1 HP");
    • I will set the text by assigning the prefab in the Unity Inspector later
    Here is the full script of this HPManager.cs:

    Moving on, after I done my script set up,

    • I created an empty GameObject named HPManager.
    • Attached this HPManager.cs script to it.
    • Assigned:
      • The FloatingTextPrefab from the prefab folder.
      • Set maxHP in the Inspector to 5.
    • Called HPManager.instance.ReduceHP(1) from my player collision/damage script.
    • Called HPManager.instance.AddHP(1, transform.position) from collectible or healing scripts.
    HP Manager Unity Inspector

    Hp Image in UI Canvas

    HP Damaged Red Effect Image



    C. Emotion Count Text

    For my Emotion Count text, I included it in my UI Manager script via UIManager.UpdateEmotionCount(int count). It will updates real time my emotion count that I collected and I will assign the emotioin count text that will be shown in the Unity Inspector. 

    UI Text for Emotion Text assigned in Inspector

    TASK 3 PROTOTYPE SUBMISSION

    Here is our Shadowed-Self Task 3 Game Prototype Walkthrough Video.
    Click HERE to view it on YouTube.



    ⋆ ˚。⋆୨୧˚ Feedback ˚୨୧⋆。˚ ⋆

    Week 10

    After our presentation, Ms. Mia mentioned that our game mechanics are cute and really impressed her. However, she noted that the background tends to blend in with the characters, so she suggested either changing the background color tone or making the characters brighter to improve contrast. Overall, she really liked our game and felt it already looks like a complete prototype but just need a few small adjustments needed.


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

    Siang Huey Yee's Reflection

    Experience:

    During the development of the Shadowed-Self game prototype in Task 3, I was responsible for a significant portion of the character design, animation, and gameplay scripting. I explored Unity in more depth than ever before, including setting up animators, collision-based triggers, and visual/audio effects for elements like healing and collectibles. To overcome technical challenges, I actively sought help from online resources, especially ChatGPT for scripting logic and YouTube tutorials to understand Unity animation systems and user interface scripting. These platforms greatly accelerated my learning and made it possible for me to solve issues independently. I am also really grateful to work with amazing teammates like Angel and Yuk Guan. Both of them collaborated closely with me, shared feedback, and divided the design work effectively so we could move forward together in sync.

    Observation:

    I observed that using an iterative workflow helped a lot in the development process. As we built the prototype level by level, we were able to spot issues and refine our features, especially in terms of character transitions and collectible behaviour. We also realized how important communication and proper asset naming were to avoid confusion, particularly with multiple animations and prefabs. I also noticed that certain Unity features—like animator transitions and UI updates that can cause unexpected bugs if not handled carefully, and testing them often helped to reduce unnecessary debugging time later.

    Findings:

    Through Task 3, I learned the value of early planning and assigning clear responsibilities within the team. I also realized that visual feedback (like effects when collecting or healing) significantly improves player experience. Additionally, I found that debugging and polishing even a simple interaction can take more time than initially expected, especially when making it feel smooth and responsive. This task helped me grow not just technically but also in terms of teamwork and collaboration.

    Angel Tan's Reflection

    Experience:

    My experience throughout this project—from the initial proposal phase to developing a working prototype has been incredibly rewarding and eye-opening. Even though it’s just a prototype, the process felt surreal and exciting. I truly enjoyed every step of the journey, especially seeing our ideas gradually come to life in Unity. Since I had no prior background in Unity or coding, I relied heavily on YouTube tutorials and ChatGPT for guidance during scripting. It was a steep learning curve, but each time something worked successfully like an animation triggering correctly or a collectible functioning as expected it gave me a huge sense of satisfaction and confidence. This project made me realize that with enough persistence and support, I can learn new skills, even from scratch.

    I am extremely grateful to my teammates, Huey Yee and Yuk Guan. Their support was invaluable. Whenever I faced issues like bugs, coding errors, or crashes, they were always there to help me troubleshoot and fix the problems patiently. Their encouragement really kept me going.

    Observation:

    Through this project, I observed that game development, while challenging, becomes much more manageable with time, practice, and teamwork. At first glance, certain tasks like animating or scripting seem intimidating, but after getting used to the Unity interface and experimenting a bit, things start to make more sense.

    One key observation was that there’s often a big difference between our original ideas in the proposal and the actual implementation. For example, we imagined the mystery box as a simple object in the beginning, but during development, we realized it needed extra effects like an opening animation, sound, and interaction logic to feel complete and satisfying to players. Similarly, small details like the light beam animation were initially overlooked but became crucial for gameplay clarity and atmosphere.

    Findings:

    From this project, I discovered several important things about game development is iterative: What you plan at the start will almost always evolve. New ideas, obstacles, and improvements naturally appear as you start building. Flexibility and creative problem-solving are essential. Also, small details make a big difference such as effects, animations can significantly enhance the player experience. Adding things like animation to the mystery box or visual cues for collectibles made the game feel more alive. I learned more about Unity and coding through hands-on practice than I ever would from theory alone. Testing, failing, and trying again helped solidify my understanding. 

    Online resources like YouTube and ChatGPT played a huge role in helping me understand scripting and overcome technical issues. Knowing how to search for solutions is just as important as knowing how to code.Working with teammates who support and help each other makes a huge difference. The success of this project was only possible because of strong collaboration, communication, and trust within the team.

    Phoon Yuk Guan's Reflection

    Experience

    For Task 3, my main goal was to build the basic game UI and make sure the player could interact with everything smoothly. I started with creating the pause menu, game over screen, level complete panel, and emotion counter. I learned how to manage different UI panels inside the Canvas and switch them on/off using scripts. It was quite fun figuring out how to properly use Unity’s Button onClick system and link them to my UIManager.cs. Setting up the HP system also gave me a better understanding of how to use sprites to visually represent player health. I also really enjoyed creating the logic behind restarting the level, pausing the game with Escape key, and updating the HP image according to how much damage the player took.

    Observations

    One thing I observed while working was that even small features like a restart button or emotion count needed proper scripting and connection through Unity Inspector. Just adding the button visually in Canvas is not enough — it needs backend logic to function correctly. I also noticed how easy it was to miss small things like forgetting to assign an AudioSource or prefab in the Inspector, which caused a few bugs at first. I also realized the importance of managing Time.timeScale when pausing or resuming the game — without that, animations and physics kept running even when paused.


    ⋆ ˚。⋆୨୧˚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