IMGD 4000

UE4 Quickstart

Due date: March 25th, 11:59pm


The goal of this project is to get up to speed doing Unreal Engine 4 (UE4) development, including familiarizing with the editor, adding code - both Blueprints and C++ - and importing art assets.

First, you will setup your UE4 development environment. Then, you will familiarize yourself with the UE4 editor through a brief tutorial. After that, work through a tutorial that has you make the beginnings of a first person shooter game using UE4. Lastly, you will show your understandings of UE4 basics by extending the tutorial with custom code, a "10%" extension.

Doing the above will help better understand the UE4 game engine by developing a game from a game programmer's perspective, providing the foundational knowledge needed for building your own game from scratch in UE4.

You will work alone for this project. This will ensure you have the development skills needed even if your tasks when you make your game in a team are partitioned. While you can discuss the project with other students and even help each other debug code, you must write all code yourself.


Top | Setup | Editor | Programming | Shooter | Extension | Hints | Submission | Grading

Setup

To setup your UE4 development environment, do the following steps. If using one of the school labs (e.g., the IMGD lab or the Zoo lab), steps #2 and #3 are already done.

  1. Create an Epic Games account
  2. Download Unreal Tournament (Windows or Mac)
  3. Install compiler
  4. Setup source control (git or svn)

Unreal Editor Quick Start

Go through the Unreal Editor Quick Start Guide:

"The Unreal Editor Quick Start Guide walks you through creating a new project, navigating the viewports, creating a new level, placing and editing Actors in your level, as well as the process of building and running your levels"


Programming Quick Start

Go through the Unreal Programming Quick Start Guide:

"Over the course of this tutorial, you will download and install your code editing software, create a new project, add a new C++ class, then compile your project and add an instance of your new class to your level."


First Person Shooter Tutorial

Go through the First Person Shooter C++ Tutorial:

"Over the course of this tutorial, you will transform a blank project template into the beginnings of a first-person shooter, with a character that moves and strafes, camera control, and projectiles you can fire at the environment. Using C++, you will create a GameMode, Character and HUD."


Extend the Tutorial Game

Extend the First Person Shooter game from the tutorial in some fashion. This means adding additional code (C++ or blueprints) to extend the game functionality in some meaningful way by 10%. The actual extension is up to you. Some suggestions are in the hints section, but these suggestions are not the only way of extending the game - the actual extension is up to you. You will indicate what you have done with brief documentation when you turn in the assignment.

Note that "10%" is rather subjective. Do not concentrate on whether you have added 10% - just use this homework to learn as much as you can from the tutorials and documentation. It is very hard (although not impossible) to do less than 10% if you just spend some time experimenting.


Hints

The Tutorial can mostly be followed as-is. However, depending upon the version of UE4 that you are using, there may be a few differences. We have documented some specific differences from version 4.6.1. If you get stuck or encounter a difference that worries you, you might consult these notes.

If you are having trouble getting started with your "10%" modification, here is some advice:

  1. Save a copy of your game in case you "break" something and need start re-start your modifications fresh. The easiest way to do this may be to make a copy your UE4 project directory.
  2. Revisit parts of the tutorial to refresh how the game is built (the first time through, you might have just been "plugging it in" without reflecting upon how it works).
  3. Think about basic features from games you know and see if any of those fit in with your understanding of coding in UE4.
  4. For technical unknowns, see if any of the resources provided for this class, or from a search through the Unreal Engine Documentation can help.

Some suggestions for extensions:

  1. Add a way for the player to lose energy (e.g., stamina from running or jumping or just standing) and energy packs the player can pick up to recharge. Implementation suggestion: create a function inside of the player that allows adding energy. If the player "hits" the energy pack, add to the player's energy. Just have the energy displayed as an on screen debug message.
  2. Have button to pick up objects (and hold them while moving). Implementation suggestion: Create a function in your C++ Character class to do a line trace on a key press (e.g., 'E'). If the line trace hits an object you want to move (such as a cube), attach the held object to your character. You can do this by storing a pointer to the object and updating its position every time your character ticks.
  3. Implement a jetpack (holding a button moves the player up, release lets gravity take effect). Implementation suggestion: Create two functions in your Character class, one for a button pressed and one for a button released. In the button pressed event, calculate a maximum height for the player's thrust. Then, in your character's tick function, have the player linearly interpolate to that height. If the player has gotten close to that height, turn the "jetpack" off. Also, when the player releases the jetpack key, turn it off.
  4. Create an enemy (enemy doesn't need AI necessarily, should just shoot projectile forward at a constant rate) and health for player. Implementation suggestion: Create a new projectile class (a fairly simple class, with a static mesh for a visual representation in world and a boolean for whether it has been fired or not). Create a new pawn class for an enemy (again, fairly simple). For the enemy, the model can just be a cube. To control the firing rate (e.g., one bullet every 5 seconds) create a new variable to keep track of the total elapsed time from the last fired projectile. If the elapsed time exceeds 5 seconds, reset it. spawn a new projectile, and tell the projectile that it has been fired. In the projectile tick function, update forward velocity accordingly every tick. Create a delegate function for hit events in the projectile class. Create a function inside of the player that allows deducting health. If the projectile hits the player, deduct from the player's health. Just have the health displayed as an on screen debug message.
  5. Create an enemy with AI. Implementation suggestion: as for the "Create and enemy" suggestion above, but the enemy should react to bullets in some way when it detects a collision (e.g., ragdoll, shatter, lose health). Make the enemy move based on how the AI Controller tells it to move. Brownie points if you use a navmesh.
  6. Make a "sticky" object to which all projectiles stick (sort of Katamari effect). Implementation suggestion: Create a new actor class for a sticky object. Within this class, create a new delegate for a hit event. Inside, check the type of actor this sticky object has collided with, and if it is your character, attach the sticky object to your character.
  7. Create ammo packs. Make the player have a limited amount of ammo. Spawn ammo packs dynamically during the game to replenish ammo. The packs can respawn at specific points or spawn randomly within the bounds of a collider. The player will look at the pack and press a button to pick it up. Display the ammo supply on the screen.
  8. Minimap/overhead view. Use a render texture and a second camera to show an overhead view of the game world in one corner of the screen. Make a more complicated map (dig through the default assets or place some cubes as walls, etc) so it looks interesting.
  9. Trigger audio. From your C++ code, trigger a sound to play when the player fires, when the bullet collides with another object, when the player walks and jumps, and any other effects you want to add. You can add an audio component to the blueprint, but trigger it from your class in C++, not the event graph. Mess around with the attenuation radius, reverb, filters and other features to get a feel for what the engine has to offer when you go to make your term project. The quality of the audio itself has no impact on your grade.
  10. Add a second weapon, one that fires projectiles with different properties (e.g., faster bullets). Provide some way for the player to switch between weapons.
  11. Add targets that spawn automatically, if randomly, and provide points. These can be inanimate objects, but should be destructable. Implementation suggestion: just have the points displayed as an on screen debug message.

Some of the above you may need to combine to get to 10%, depending upon the complexity of your implementation. This is admittedly vague, but the goal is for you do do enough to be competent in UE4.


Submission

Your assignment is to be submitted electronically via turnin by 11:59pm on the day due. You must hand in the following:

To submit:

  1. Upload your .exe (see above).
  2. Place the README and Source code in a folder with your last name (e.g., "claypool").
  3. Zip up the folder.
  4. Log into Turnin using your WPI user id and the password you were mailed.
  5. Select the IMGD 4000 area of turnin (if necessary) and submit the zip file under "quickstart". (If your submission times out, try again.)


Grading

Grading Guidelines
Tutorial 35% Doing the tutorial without any additional customization is worth about 1/2 the grade. While you will have learned a substantial amount about the UE4 game engine, you will not yet have demonstrated an in-depth understanding of the engine capabilities.
Customization 60% Extending or modifying the tutorial game with custom work is worth more than 1/2 the grade. Doing so will begin to flex your technical muscles and show competence using the Unreal Engine. This is essential in moving forward.
Documentation 5% Not to be overlooked is including the documentation provided, as well as having that documentation be clear, readable and pertinent to the assignment. This includes the README described above as well as having well-structured and commented code is typically part of the Documentation requirement, too. Getting in the habit of good documentation is important for large software projects, especially when done in teams (e.g., your game for this course).

Below is a general grading rubric:

100-90. The submission clearly exceeds requirements. The tutorial game works without problems. The custom extensions exhibit an unusually high degree of effort, thoughtfulness, technical ability and insight. Documentation is thorough and clear.

89-80. The submission meets requirements. The tutorial game works without problems. The custom extensions exhibit substantial effort, thoughtfulness, technical ability and/or insight. Documentation is adequate.

79-70. The submission barely meets requirements. The tutorial game may operate erratically. The custom extensions exhibit marginal effort, thoughtfulness, creativity and/or insight. Documentation is missing details needed to understand the contributions and/or to build the program.

69-60. The project fails to meet requirements in some places. The tutorial game may crash occasionally. The custom extensions are of minor scope, or exhibit perfunctory effort, thoughtfulness, technical ability and/or insight. Documentation is inadequate, missing key details needed to understand the contributions and/or to build the programs.

59-0. The project does not meet requirements. The tutorial game crashes consistently or does not compile. The custom extensions exhibit little or no evidence of effort, thoughtfulness, technical ability and/or insight. Documentation is woefully inadequate or missing.


Top | Setup | Editor | Programming | Shooter | Hints | Submission | Grading

Return to the IMGD 4000 Home Page

Send all questions to the TA mailing list (imgd4000-staff at cs.wpi.edu).