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.
- Create an Epic
Games account
- Download Unreal Tournament (Windows or Mac)
- Install compiler
- 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:
- 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.
- 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).
- Think about basic features from games you know and see if
any of those fit in with your understanding of coding in UE4.
- 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:
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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:
- A Windows executable (
.exe).
- Important! If the game runs but you get a "black screen" with
red reticule in it, try one (or both) of the following:
- In your
[project]/Config folder,
open DefaultEditor.ini, find the line
"bDontLoadBlueprintOutsideEditor=true" and change it to
"bDontLoadBlueprintOutsideEditor=false".
- In project settings, select "Maps and Modes". There are two
dropdown menus for setting a map, so set both to the map for your
game game. In particular, do not have one set to the starter map,
which is all black.
- Build this in "Debug" mode to
preserve the console messages you may have.
- Test that the
.exe created runs outside of your UE4
editor.
Important! Upload the .exe to Web site where
we can download it. This can use your favorite way of distributing
files (WeTransfer, Dropbox, OneDrive, Google Drive, MediaFire,
TinyUpload, ...). Or, you can upload it to a FusionForge project
and give the TA access permission.
- A source code package:
- All your source code (.cpp and .h) files for your game.
Important! Make sure your code is well-structured and commented.
Failure to do so will result in a loss of points.
- A README.txt file providing:
- A short description of the additional 10%
extension to the FPS tutorial game. You should detail the
functionality added and briefly indicate the code written.
- The URL where the
.exe has been uploaded.
To submit:
- Upload your
.exe (see above).
- Place the README and Source code in a folder with your last name
(e.g., "claypool").
- Zip up the folder.
- Log into Turnin
using your WPI user id and the password you were mailed.
- 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).