CAGD 373 - Pirate Game Assets Final
Game Walkthrough:
The goal of this project was to recreate a location from Sea Of Thieves. My team decided to work on an outpost with a stationary sloop and a tavern. We needed to make the mountains similar and add many assets that would be interesting for the player to look at, like the barrels and the lamposts. Also, we needed some interactivity, like cannon shooting and quests.
My role on this project was the programmer in charge of implementing all the systems regarding the gameplay. So I managed to make the player movement, interaction with barrels, shootable cannons, a quest system, the final battle, money systems, a high score leaderboard table, and many other small systems within the scene. I also tackled Unity-related tasks like generating a new water shader and sculpting the terrain.
One of the problems I faced was dealing with the inventory system since that took a whole sprint on its own, and I did not have any prior experience designing one. I tackled the problem of researching data structures and making structs inside classes that would later on be the inventory that would be held inside each container. Another problem faced during development was shader graphs, something I'd never heard of before this project, but after research and learning through trial and error, I managed to get a decent water system in the scene.
This project was an amazing learning opportunity for me because I was able to tackle many problems and challenges that I've never attempted solving before, like the inventory system and shader graphs. I've learned a lot from this project and had an amazing team that completed their tasks accordingly.
Final Sprint:
The last sprint was the biggest. We decided to tackle everything that hadn’t been completed and take on the challenge of completing our wish list in the backlog. This was the sprint where everything my team had worked on had to come together.
The first big thing I tackled was the quest system. For the scene, we wanted the player to be able to take on quests and complete them once they were finished. The first thing I tackled for this was the UI, which needed to display all the active and completed quests. After the UI was done, I started programming the quest system, which took a while, but it gave me time to polish it and add announcement bars that would display whenever the player took on a new quest and completed a quest.
The second thing we needed was an ending to the scene. We decided to make it a raid so that the player had to shoot enemy ships and defend the outpost. For this, I did research on splines and how objects in the scene could follow this spline and follow a predefined path. I added the already-made ship, and now we have ships roaming the island. I made the ships a target so the player could get a quest in which there was a counter for ships sunk and after we had that done, I added some effects made by another group member so there were visuals that the ship was sinking.
After the final battle defending the outpost, we needed something that would let the player know when the scene ended. So, I made an ending screen that displayed a cannon on a mountain and scrolled up the credits that each group member listed. It also added a high-score system where players could submit their scores to a local leaderboard table. That way, there was some competitive aspect to the game as well.
Something else we needed in the scene for the high score system to work was a way for the player to get money. We decided to make the money a pickup item that could be grabbed if found in the scene and got it through the completion of quests. Also, we needed a way for the player to know when money was picked up, so we added a simple UI that would stack the money messages and display them accordingly whenever the player picked up coins.
The final thing we added was sound effects. The scene needed to be more immersive, so sounds were added for events like money pickup, quest starting, quest completion, raid starting, raid completion, the main menu ambiance music, the end screen final music, and finally, a sound that played whenever the final quest started, followed by encouraging music.
Overall, this project was great. I learned many things like shader graphs, inventory systems, UI scroll views, and many other systems that I had never attempted before. For my team, I had a great team that communicated the week I missed at the start of the project, and they were able to catch me up on what was planned already and what needed to be done. I had a great time and am amazed at how the project turned out.
Sprint 5:
This sprint was by far one of my most challenging sprints because I managed to make something that I’d never tackled before, Barrel inventories. Before beginning the development process I was warned that something I should watch out for was the duplication of items which could cause scene problems.
The first thing I tackled was the barrel inventory. So, the barrel needed an inventory system that the player could access, and items could be taken out. After writing all the methods needed, I needed something to display. So, I made a UI pretty similar to our target game. With the UI done, I realized I also needed to display the player’s inventory; that way, the player knew when an item was being transferred. This brought another problem because it showed me that I needed a better modular player inventory system.
Using the previous system, I could now loop the player’s inventory and display it when the player opened a barrel. With that done, it was time to do the same for the barrel, looping all its contents and displaying them when opened. With the basic item display done now, I needed to handle inventory item transferring.
Inventory transferring was hard because the UI needed to be updated whenever an item was changed inside each inventory. So I managed to make a method that would refresh the UI whenever the player interacted with an item in either inventory.
After all the systems were working, I started doing more things, like making the UI display a white circle whenever the pointer was on top and making the Barrel a modular interactable item that could later be added to any container in the scene.
Sprint 4:
For this sprint, I wanted to ensure that we had enough interaction for the scene, so I added items that could be picked up and an inventory wheel that displayed the player’s inventory. This brought many challenges to the table, including the item type, the player's ability to hold an inventory, the inventory limits, the player inventory wheel UI, and many more.
Before starting the programming process, I decided to work on the UI, so I made a slot prefab that had a position for displaying the item and also a small slot that would display the number of items available. After that was done, it was time to start scripting. I made it so all the slots were kept in the player inventory, and then the UI will be updated on events like OnPickUp and OnUse. I didn’t want the items to be useless, so I made them able to be held in the hand.
With the items done, I wanted the game scene to feel more like our target game, in which whenever the player is looking at an item, a tooltip will appear to let the player know that the item can be interacted with. I had to make a separate shader so this text would display on top of the object being looked at.
Overall, in this sprint, I tackled various things like the player inventory scene items and mostly the inventory wheel UI. I managed to make a good slot and displayed icons with their respective number saved. To make the UI more interactable, the Slot would grow whenever the pointer was on top.
Sprint 3:
This sprint, which marked the halfway point of our project, was a significant one. To make up for the week I missed, I took on more tasks than in the previous sprint. The two main challenges I tackled were completing the water shader and developing a shootable cannon. These tasks were crucial for the project's advancement and posed unique challenges.
Working with shader graphs was a new experience for me, and I dedicated several nights to learning the basics. I followed an old guide to incorporate water elements into the shader graph and then added features like wave-like movement and foam. This learning process was challenging but rewarding, and the final result was a success.
In addition to the water, I also made a script for a floating object in case we wanted to make more dynamic objects that reacted with water.
The cannon was the other challenge I took this sprint. I made the camera snap to the cannon when the player started using it and snap back to the player when the player exited using it. This required making components in the player and the cannon that saved the location where the camera would snap back and forth. After the camera worked, I needed to make the cannon work with the player's mouse. I decided to make its script separate from the mouse input for the player. I also added limits to the movement; that way, the cannon wouldn’t go more than 45 degrees in any direction from the middle position.
Overall, the team took care of two main challenges, and now I feel confident about manipulating the camera component and making shaders in Unity.
Sprint 2:
During Sprint 2, I was introduced to the project theme and what my group had discussed before I joined. The theme was a Sea of Thieves outpost and
My programming skills were a perfect fit for the team's needs in this project. One of the first tasks was to establish a functional GitHub, a platform that played a pivotal role in enabling seamless collaboration and sharing of the unity scene among team members. Once this was in place, we could focus on other essential aspects like setting up a basic scene and implementing player movement.
An interaction was a requirement for the project's completion. My team wanted to make a player interaction, so by tapping on the “E” key, the animation will play, and by tapping “E” again the, the item will play another animation. This was fairly easy to achieve using Raycast, and when the player was looking at the correct object and used the trigger key, it would trigger an animation that the game designer would be able to drag and drop the desired animator and trigger the desired animation. Something else that I wanted to polish was the player jump mechanic since it turned out rough at the start. I wanted it to be more like Sea of Thieves, so I spent much time polishing that. Other than that, I set up a testing scene and added some test material for future development.
This sprint was more about getting introduced to the team and the project we would be working on, but I got a lot done and got to know the team better.
Comments
Post a Comment