|
Assignment 1: Physics-based Games |
You will familiarize yourself with Unreal Engine 5 and the underlying systems by creating a physics-based arena. You will create multiple "Pawn" classes, through which the player can interact with the world, as well as multiple "Interactable" objects, with which the players can perform various physical interactions. You will also include a report write-up describing the software architecture choices you made and why.
Your demonstration will contain a minimum of the following objects:
You must create an arena that encloses all Interactable and Pawn objects. This arena should have multipel types of lighting, and at least two types of Materials. You should also create at least one "Kill-Z" Volume, which is placed such that the player will "die" and reset the level should any of their Pawns escape. The prevents annoying situations where the player is infinitely falling or unable to continue their progress should your levels have flaws in them (which your levels will).
You will create exactly 2 Pawns that the player can Possess/Unpossess at any time. You can choose how players should Possess/Unpossess Pawns, but be sure to include that information in the documentation. You can also choose how to architect these Pawns, but again, be sure to include that information in your documentation. Each Pawn will have one shared behavior, and one unique behavior, but any other functionality can be implemented (either for both of them or just one of them).
You will create 3 types of Interactable objects, each with one or more of these features, that the player can interact with via the Pawns. There should be at least 3 instances of each Interactable type in the scene, but you can choose whether the level starts with all instances spawned or if you want to have them spawn in over time etc. As always, your choices should be documented. All features should be implemented even if Interactables have more than one feature.
The are several opportunities for extra credit in this assignment if you'd like to add the features below, but note that extra credit points will only be available after completing the minimum requirements.
Attach the camera to the currently possessed Pawn. Include basic controls for this camera: either rotate around the Pawn, zoom in and out based on the Pawn location, or both.
Add sound effects that are synchronized with interactions in the world. You can choose how to differentiate sound effects (e.g. different Pawns have different interaction sounds, or different interactions trigger different sounds) but please make a note of what you did in your report.
Add some sort of GUI that is displayed in your game. You can choose what this GUI will capture. For example, you can implement a scoring system based on what Pawn interacts with what Interactable, or create a game time limit where the player collects nodes that increase time remaining. This GUI system should be somewhat substantiative though, so we expect you to add on some "game-like" feature in addition to the GUI itself.
You will be working in UE5, so first ensure all team members have downloaded the exact same version of UE5. Create a C++ blank project from the templates and name it CS354p_A1. Please do not use the existing templates. They are good for learning, but it's always best to customize your project to your exact needs rather than trying to fit another project into meeting your approximate needs.
Once you have a project created, now is the time to get your project connected to a git repo. This means creating a .gitingore, and .gitattributes (via git-lfs).
After you confirm all team members can successfully pull and push, begin development on the arena and the game objects themselves. You may want to take at least a little time to architect your code. UE4 is quite nice to work in if you have a plan and some system knowledge, but will actively fight you if you freestyle it. Also remember that you should not work in the level file itself at the same time someone else is modifying it. Only one of your changes can be preserved.
The only required submission for Canvas is a link to your project's repository. The TA will be looking at the branch called codefreeze, so make sure you have created and committed working code to this branch before the deadline. Any commits made after the deadline will result in that day being deducted from your late slip pool. You project's repository can have the report included as the README or as a separate file, and any video footage of your game can be linked from this report (or included in the repository). Remember that your report should include at least a couple screenshots of critical or interesting code segments you wrote. Please make sure, however you decide to structure your repository, that you inform the TA of the setup in the README so they can quickly figure out how to look over your assignment.
You'll be graded on how well you met the requirements of the assignment. D quality work is project compiles but features are not working. C quality work is features have been implemented in a way that is mostly working, but the project may be buggy or not scalable. B quality work is features are working, but the project may have scaling issues, or lack consideration for tuning and iterating, include difficult to read code. A quality work is features have been implemented in a robust, polished way that demonstrates consideration for tuning and scaling, including well-written code.