Game Development - Final Project

18.12.2024 - 1.1.2024 / Week 13 - Week 15
Tan Zhao Yi / 0363285
Game Development / Bachelor of Design (Hons) in Creative Media
Final Project



LIST

Final Project




INSTRUCTION



Final Project

Finally, we have to complete our prototype to a fully functional and playable game. The required submission are:
  • Unity Project files and Folders
  • Video Capture and Presentation of the gameplay walkthrough
  • Game WebGL Build
  • Blog post for your reflective studies
As I mentioned in my last blog post, the remaining tasks are:
  • Background boundaries / Looping
  • Opening scrolls
  • Key in symbols password - will be drag and drop method
  • Sprout Guardian spawning
  • Polishing - UI
Also I added some neglected tasks:
  • Hit and die animation
  • Eryndor and Gravelock health bar
  • Level 3 Gameplay
A. Background Boundaries
I have tried to add a boundary to the background by using collider but it doesn't work. Therefore I tried to achieve that by restricting the camera.
Fig 1.1. Camera Boundary
The minX, maxX, minY, and maxY values set the limits for how far the camera can move horizontally and vertically. In the LateUpdate method, the script calculates the camera's position based on the player's position but clamps it within the allowed range using Mathf.Clamp. This prevents the camera from going outside the set boundaries, keeping the player and scene within view.
Fig 1.2. Outcome Video (2x speed)
B. Opening Scrolls
For this part, I planned to display the four scrolls collected in the centre of the screen, and player can click on which they want to check. 
Fig 2.1. Panel fading in after collect four scrolls
Then, I want user to click on the four scrolls and the opened scroll with riddle will pop out. First I edited the opened scroll design to ensure style consistency, as the characters are using a 3D method. 
Fig 2.2. Opened Scrolls - Before (above) and After (below)
I fixed the sequence of the scrolls to the following order: sun, moon, rose, and star. To implement this, I first added a button component to each scroll and then assigned the corresponding scroll game objects along with their respective target game objects. 
Fig 2.3. Scroll Button Settings
I also made adjustments to the Player Controller script to enhance the gameplay experience. The script now includes functionality to detect when the player collects all four scrolls and safely lands on the ground. Once both conditions are met, the panel will appear on the screen, providing visual feedback to the player.
Fig 2.4. Checking player is on the ground and collected four scrolls
Additionally I added an exit button to the opened scroll.
Fig 2.5. Exit Button

Outcome
Fig 2.6. Opening Scrolls Outcome Video
C. Enter Symbols
I plan to use a drag-and-drop method for players to input the passcode. To support this, I designed a board where players must drag the symbols into the correct sequence to unlock it.
Fig 3.1. Board
I also added a "Next" button on the panel, allowing the player to proceed to the passcode board.
Fig 3.2. Next Button
In Unity, I positioned the symbols at the bottom of the board, where players can easily select them. I also assigned a target box for each symbol. The password mechanic works by allowing players to drag the symbols to the corresponding boxes. If the symbol collides with the correct target box, it will be placed in that position. If the symbol is placed in the wrong box, it will return to its original position, providing a simple and interactive way for players to solve the puzzle.
Fig 3.3. Dragging symbols to their target boxes
Next, I designed instructional text and added a button to proceed to the next level. I implemented a game logic system to check if all the target boxes are filled correctly. Once the player successfully places all the symbols in their correct boxes, the system triggers the appearance of the instructional text and the button, allowing the player to move on to the next level.

Outcome
Fig 3.4. Entering Symbols Outcome
D. Sprout Guardian
In Level 1, the Sprout Guardian will spawn similarly to the Power of Shadow. I imported the Sprout Guardian asset from the Unity Asset Store and created both a Sprout and Spawner Script to control its behavior. 
Fig 4.1. Slime Guardian Movement Script
Fig 4.2. Slime Spawner
Then I added a collider to the sword to detect the enemy. Once it hits the slime, the slime will dissapear, representing Eryndor has defeat the Sprout Guardian.
Fig 4.3. Sword Collider
In the script, I control the sword collider by enabling it only when the attack animation is triggered. Once the animation ends, the collider is disabled. This approach ensures that the sword's collider is active only during the attack animation, preventing the Sprout Guardians from being detected by the sword while the player is in other states, such as idle or running. This helps avoid unintended collisions and improves the accuracy of the combat mechanics.
Fig 4.4. Enabling and Disabling Sword Collider

Outcome
Fig 4.5. Sprout Spawning
E. Hit and Die
This section focuses on implementing the hit and die animation alongside the health bar system. I initially neglected this animation in the prototype because the system hadn't been implemented yet. In both Level 1 and Level 2, I want Eryndor to play a hit animation whenever she collides with an enemy, and the same should apply to the enemy when it is attacked by Eryndor. This will help enhance the combat interaction and visual feedback for both the player and the enemy.

I created the animation directly in Unity, as it is much easier than importing a GIF while achieving the same visual effect.
Fig 5.1. Hit Animation in Unity
Next, I assigned an "Enemy" tag to both the Sprout Guardian and the Power of Shadow. This tag allows the game to identify these objects as enemies during gameplay. I also implemented functionality where, upon collision between the player and any of these tagged enemies, the hit animation is triggered. 
Fig 5.2. Hit Animation
Similar to the scroll bar panel, I added a health panel at the top left of the screen. The player has three hearts, and every time the player takes three hit, one heart will decrease. Once all three hearts are gone, the player will die, and the player will fade out to indicate the end of the game. This health system helps provide feedback on the player's performance and adds an element of challenge to the gameplay.

Outcome
Fig 5.3. Hit and Die - Level 1 Outcome Video

Fig 5.4. Hit and Die - Level 2 Outcome Video
F. Level 3 Gameplay
I finalized the gameplay for Level 3 in this section. To enhance the challenge, I reused the Power of Shadow as an ongoing obstacle and placed Gravelock at the end of the scene to serve as the guardian and the final boss. This setup creates a climactic end to the level, emphasizing the player's progression and culminating in a significant encounter.
Fig 6.1. Level 3 Scene Setting
There is an invisible box collider in front of Gravelock. Once player collides with the box collider, Gravelock will perform attack animation.
Fig 6.2. Invisible Box Collider
Next, I added an HP bar above Gravelock, with a total of 15 HP. Each hit from Eryndor deals 3 damage. With the addition of the HP bar, I decided to remove the hit animation, as it created repetitive visual feedback that I felt was unnecessary for the gameplay experience.
Fig 6.3. Gravelock's HP Bar

Outcome
Fig 6.4. Level 3 Gameplay
G. UI
Finally I started the interface part, including the instruction, start menu and end screen. In this section, I will be working on the music and sound effect too.

1. End Screen
I started with the end screen first because it continued from Level 3. Once the player defeat Gravelock successfully, it will proceed to the end screen, which display the Crystal of Balance.
Fig 7.1. End Screen

Outcome
Fig 7.2. End Screen Outcome

2. Start Menu
I created a start button using Adobe Illustrator, ensuring it aligns with the overall aesthetic of the game. Once the design was finalized, I integrated the button into the home scene within Unity. Positioned prominently, the button serves as the primary gateway for players to begin their journey. When clicked, it seamlessly transitions the player to Level 1, marking the start of their adventure in the enchanting world of Eryndor.
Fig 7.3. Start Scene

Outcome
Fig 7.4. Start Menu Outcome

3. Instruction Board
I created a separate scene for the instructional board of each level to ensure easier scripting.
Fig 7.5. Scenes

Fig 7.6. Instruction Board Sample - Level 1

H. Music and Sound Effects
This section will include:
  • Background music
  • Sound effects
I am downloading the audio from Artlist, the key words are cinematic, fantasy, and gaming.
1. Background Music
  • Start: In Flight
  • Level 1: The Very First Moment
  • Level 2: Lost Kingdom
  • Level 3: The Brave One
2. Sound Effect (from Pixabay)
  • Buttons: Sound Effect by freesound community from Pixabay
  • Scrolls: Sound Effect by Yuliana from Pixabay
  • Collect: Sound Effect by LIECIO from Pixabay
  • End Screen: Sound Effect by Universfield from Pixabay
  • Attack: Sound Effect by karim nessim from Pixabay
  • Move: Sound Effect by freesound community from Pixabay
Final Project Submission

Fig 8.1. Final Walkthrough Video

Netilify Link: 
https://eryndor.netlify.app/
Fig 8.2. Netlify Screenshot

 
  Fig 8.3. Game Design Document - PDF

  Fig 8.4. Final Presentation Video


REFLECTION

Throughout this project, I encountered countless issues, errors, and obstacles, but I’m truly grateful that I was able to overcome them on my own. This experience taught me so much more than just game design; I’ve developed problem-solving skills, learned how to ask the right questions to find information, and gained a deeper understanding of gameplay mechanics. While I acknowledge that there’s still plenty of room for improvement, I’m genuinely satisfied with the amount of knowledge I’ve gained and the hard work I’ve put into this project.

I’ve observed that the hardest part of this process wasn’t just about drawing and designing—it was solving all the intricate details that brought the game to life. From debugging scripts to fine-tuning interactions, these challenges required focus and persistence. Each step pushed me beyond my comfort zone and gave me a greater appreciation for the complexity of game development. Looking back, I feel proud of the progress I’ve made and excited about how I can continue to improve in the future.

Comments