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
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)
- Video walkthrough and presentation of the game
- Online posts in your E-portfolio as your reflective studies
I was responsible for the animation tasks, which included creating the Idle, Walk, Jump, 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.
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 |
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.
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.
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.
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 |
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 |
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 |
- Displays when the player reaches the level-ending door.
- Triggered via UIManager.ShowLevelComplete().
- Used to just indicate level clear.
|
| Level Caompleted Panel |
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);
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
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.
- Resets HP back to full when starting a new level or respawning.
- Checks if HP is already full, to prevent over-healing.
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
- 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 |
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.
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.



























Comments
Post a Comment