
Unreal Engine C++ Developer: Learn C++ and Make Video Games | |
Created in collaboration with Epic Games. Learn C++ from basics while making your first 4 video games in Unreal |
|
Created by | Ben Tristem, Sam Pattuzzi, GameDev.tv Team, Rob Brook |
Language | English |
-
1. Where To Find Lecture Resources .html
In this course, you are welcome and encouraged to participate in discussions regarding lessons and sections in our Community at GameDev.tv
During lessons, you will be encouraged to head over to the lecture's resources to participate in the lecture's discussions, review documentation and/or download content.
You can find the lecture resources just like below:(The Course Content tab may also be below the video in some cases)
- 1.1 Course Slides .html
- 2. Meet The GameDev.tv Community 00:05:58
- 2.1 Twitter .html
- 2.2 Facebook Group .html
- 2.3 YouTube .html
- 2.4 Discord .html
- 2.5 Twitch .html
- 2.6 Forum .html
- 3. Compilers & VS Community 00:06:07
- 3.1 Course Slides .html
- 3.2 This Lectures Discussions .html
- 3.3 install .png
- 4. Install Prerequisites On MacOS 00:05:05
- 4.1 This Lectures Discussions .html
- 5. Build Unreal From Source (Linux) 00:13:56
- 5.1 Unreals documentation about building from source .html
- 5.2 Talk about this lecture on our forum .html
-
6. Antivirus Warnings .html
If you run into warnings/strange issues due to your antivirus.
You may need to tweak some settings for your antivirus. Make sure to add an exception for your file (or path to the folder where you file is kept) to your antivirus program.
Due to the amount of antivirus programs out there, we cannot provide documentation for each one. Please consult the documentation for your antivirus program for the steps on how to add an exception.
- Gavin - 7. Install Unreal Engine 4.22 00:04:35
- 7.1 This lectures discussions .html
- 8. Also Install Visual Studio Code 00:09:11
- 9. 4.25 VSCode Intellisense Bug 00:02:43
- 9.1 defines .txt "defines": [ "IS_PROGRAM=0", "UE_EDITOR=1", "ENABLE_PGO_PROFILE=0", "USE_VORBIS_FOR_STREAMING=1", "USE_XMA2_FOR_STREAMING=1", "WITH_DEV_AUTOMATION_TESTS=1", "WITH_PERF_AUTOMATION_TESTS=1", "UNICODE", "_UNICODE", "__UNREAL__", "IS_MONOLITHIC=0", "WITH_ENGINE=1", "WITH_UNREAL_DEVELOPER_TOOLS=1", "WITH_APPLICATION_CORE=1", "WITH_COREUOBJECT=1", "USE_STATS_WITHOUT_ENGINE=0", "WITH_PLUGIN_SUPPORT=0", "WITH_ACCESSIBILITY=1", "WITH_PERFCOUNTERS=1", "USE_LOGGING_IN_SHIPPING=0", "WITH_LOGGING_TO_MEMORY=0", "USE_CACHE_FREED_OS_ALLOCS=1", "USE_CHECKS_IN_SHIPPING=0", "WITH_EDITOR=1", "WITH_SERVER_CODE=1", "WITH_CEF3=1", "WITH_LIVE_CODING=1", "WITH_XGE_CONTROLLER=1", "UBT_MODULE_MANIFEST=\"UE4Editor.modules\"", "UBT_MODULE_MANIFEST_DEBUGGAME=\"UE4Editor-Win64-DebugGame.modules\"", "UBT_COMPILED_PLATFORM=Win64", "UBT_COMPILED_TARGET=Editor", "UE_APP_NAME=\"UE4Editor\"", "NDIS_MINIPORT_MAJOR_VERSION=0", "WIN32=1", "_WIN32_WINNT=0x0601", "WINVER=0x0601", "PLATFORM_WINDOWS=1", "OVERRIDE_PLATFORM_HEADER_NAME=Windows", "NDEBUG=1", "UE_BUILD_DEVELOPMENT=1", "UE_IS_ENGINE_MODULE=0", "IMPLEMENT_ENCRYPTION_KEY_REGISTRATION()=", "IMPLEMENT_SIGNING_KEY_REGISTRATION()=", "DEPRECATED_FORGAME=DEPRECATED", "UE_DEPRECATED_FORGAME=UE_DEPRECATED", "INCLUDE_CHAOS=0", "WITH_PHYSX=1", "WITH_CHAOS=0", "WITH_CHAOS_CLOTHING=0", "WITH_CHAOS_NEEDS_TO_BE_FIXED=0", "PHYSICS_INTERFACE_PHYSX=1",
- 9.2 This Lectures Discussions .html
- 10. Want to Focus on Blueprint .html Check out the partner to this course, which focuses on different games and Blueprint over C++.
- 10.1 Our Unreal Blueprint Course .html
- 11. Section Wrap-up 00:01:19
- 11.1 Unreal Course Community on Facebook .html
- 11.2 Unreal Engine on our Forum .html
- 11.3 Join Our Discord Live Chat Server .html
- 1. Introducing Triple X & Gavin 00:01:42
- 1.1 Course Slides .html
- 1.2 Lecture Community Forum Tag .html
- 2. Triple X Game Design Doc 00:05:00
- 2.1 Lecture Community Forum Tag .html
- 2.2 Lecture Project Changes .html
- 3. The Structure Of C By Example 00:07:39
- 3.1 Lecture Community Forum Tag .html
- 3.2 Lecture Project Changes .html
- 4. Your First Program 00:07:42
- 4.1 This Lectures Github Commit .html
- 4.2 Lecture Community Forum Tag .html
- 4.3 Lecture Project Changes .html
-
5. Saving Files .html
It's important to save your files! If you don't save before compiling, your changes will not be reflected!
Throughout this section, I work with "Auto save" enabled inside VS Code.
You can find this under file > Auto save.- Gavin
-
6. A note about red underlines .html
(Right click the image and open in a new tab to view full sized image)
If you get the following in the next lecture where you have a red unline under the include for <iostream>
Then do the following:
First, if you haven't done so already, open the folder to where you have saved TripleX.cpp in VS Code via File > Open Folder
Next open the Command Palette (Ctrl + Shift + P) and select Edit Configurations (UI)
From here use the drop down menu in Compiler Path and select the compiler you are using
If the compiler isn't detected use the Developer Command prompt and type "where cl" and copy and paste its output there instead (you can right click after highlighting to copy otherwise use Ctrl + C)
If you are unable to enter it in the UI then you will have to enter directly into the c_cpp_properties.json.
To do that first open that file which you can do by clicking the link hereThen add the following inside "configurations"
"compilerPath": "Path",
Replacing "Path" with the actual path to your compiler. For example
If your path has backslashes (\) then you will need to add extra or replace them with forward slashes e.g.
"C:\Users\Dan"
Would need to either be "C:/Users/Dan" or "C:\\Users\\Dan"
- 7. Hello World! 00:08:53
- 7.1 Lecture Project Changes .html
- 7.2 Lecture Community Forum Tag .html
- 8. Variables 00:08:03
- 8.1 Lecture Community Forum Tag .html
- 8.2 Lecture Project Changes .html
- 9. const & Assigning Values 00:06:18
- 9.1 Lecture Project Changes .html
- 9.2 Lecture Community Forum Tag .html
- 10. Statements & Comments 00:05:27
- 10.1 Lecture Project Changes .html
- 10.2 Lecture Community Forum Tag .html
- 11. Triple X Mid-section Quiz .html
-
12. MSVC Compilation Warnings [Windows Only] .html
You may see unnecessary warnings when compiling your program on Windows. If you would like to remove these warnings, follow the steps below.
Instead of compiling with:Â
cl triplex.cpp
Try adding /EHsc to the end of the command:
cl main.cpp /EHsc
For further reading: https://docs.microsoft.com/en-us/cpp/build/reference/eh-exception-handling-model?view=vs-2019
- Gavin - 13. Naming & Self Documenting Code 00:07:14
- 13.1 Lecture Project Changes .html
- 13.2 Lecture Community Forum Tag .html
- 14. Getting User Input 00:08:56
- 14.1 Lecture Community Forum Tag .html
- 14.2 Lecture Project Changes .html
- 15. Using if and else in C 00:07:50
- 15.1 Lecture Community Forum Tag .html
- 15.2 Lecture Project Changes .html
- 16. Functions 00:11:01
- 16.1 Lecture Community Forum Tag .html
- 16.2 Lecture Project Changes .html
- 17. Returning Data From Functions 00:08:33
- 17.1 Lecture Project Changes .html
- 17.2 Lecture Community Forum Tag .html
- 18. Triple X Mid-section Quiz .html
- 19. Function Parameters 00:08:54
- 19.1 Lecture Community Forum Tag .html
- 19.2 Lecture Project Changes .html
- 20. Comparing Values 00:08:09
- 20.1 Lecture Project Changes .html
- 20.2 Lecture Community Forum Tag .html
- 21. Generating Random Number Ranges 00:11:36
- 21.1 Lecture Project Changes .html
- 21.2 Lecture Community Forum Tag .html
- 22. Triple X End Of Section Quiz .html
- 1. Hi Im Mike 00:01:16
- 2. Introduction To Bull Cow Game 00:04:30
- 2.1 Course Slides .html
- 2.2 This Lectures Discussions .html
-
3. Non-English characters .html
The path you extract the zip to in the following lecture can't contain non-English characters in it.
This also applies to all Unreal projects, as it can't work with them. Sorry for the inconvenience.- Dan
- 4. Importing Bull Cow Game 00:08:25
- 4.1 If Unreal cant detect Xcode. .html
- 4.2 This Lectures Discussions .html
- 4.3 Lecture Project Changes .html
-
4.4 BullCowGame-starter-kit .zip
The terminal actor does not support Non-English characters.
If you find that your terminal is not displaying your characters, this may be why.
We apologise for any inconvenience.
- Gavin -
5. Terminal Actor Non-English Characters Unsupported .html
The terminal actor does not support Non-English characters.
If you find that your terminal is not displaying your characters, this may be why.
We apologise for any inconvenience.
- Gavin - 6. The Game Module X Could Not Be Loaded 00:01:12
- 7. Helping Us Help You 00:03:32
- 8. A Look Around Unreal 00:05:35
- 8.1 Lecture Project Changes .html
- 8.2 This Lectures Discussions .html
- 9. Controlling The Viewport 00:04:01
- 10. Editing Actors In Our Level 00:10:05
- 10.1 This Lectures Discussions .html
- 0.2 Lecture Project Changes 1 .html
- 11. Adding Actors To The Level 1 00:04:54
- 11.1 This Lectures Discussions1 .html
- 11.2 Lecture Project Changes .html
- 12. Editing the Landscape 00:08:03
- 12.1 This Lectures Discussions .html
- 12.2 Lecture Project Changes .html
- 13. Mid-section Quiz .html
- 14. Setting Up VS Code In Unreal 00:04:11
- 14.1 Lecture Project Changes .html
- 14.2 This Lectures Discussions .html
- 15. Actors And Components 00:05:07
- 15.1 Lecture Project Changes .html
- 15.2 This Lectures Discussions .html
- 16. Using The In Game Terminal 00:08:55
- 16.1 This Lectures Discussions .html
- 16.2 Lecture Project Changes .html
- 17. Unreals Types - FString 00:03:46
- 17.1 Lecture Project Changes .html
- 17.2 This Lectures Discussions .html
- 18. The TEXT Macro 00:03:11
- 18.1 This Lectures Discussions .html
- 18.2 UE4 String Handling .html
- 18.3 Lecture Project Changes .html
- 19. Mid-section Quiz .html
- 20. Bull Cow Basic Game Loop 00:04:42
- 20.1 This Lectures Discussions .html
- 21. Accessing Player Input 00:02:53
- 22. Coding The Basic Game Loop2 00:08:58
- 23. Member Variables 00:06:13
- 24. Solving Slow Compile Times 00:04:27
- 25. The Full Game Loop 00:05:16
- 26. Pseudo Code 00:10:17
- 27. Mid-section Quiz .html
- 28. Creating Our First Function 00:09:52
- 29. Finding And Replacing In VS Code 00:08:06
- 30. The C Dot Operator 300:05:39
- 31. Formatting FStrings 00:17:43
- 32. Booleans 00:17:49
- 33. Pre vs Post Increment Decrement 00:18:27 lecture
- 34. Parameters And Arguments 00:08:51
- 35. Early Returns 00:14:22
- 36. Mid-section Quiz .html
- 37. Structure Of An FString 00:21:27
- 38. Const Member Functions 00:06:17
- 39. Looping In C 00:15:17
- 40. Checking Characters Part 1 00:09:01
- 41. Checking Characters Part 2 00:12:36
- 42. TArray Of Hidden Words 00:07:49
-
43. Loading Words At Runtime .html
WARNING: The following content is optional and more advanced. If it doesn't make sense to you now, please skip over and revisit once you have finished the course.
Instead of massively bloating compile times by making a huge array of words. You can instead shift that to runtime by loading the words into the array at
BeginPlay
withFFileHelper::LoadFileToStringArray
.First remove all the C++ syntax from the HiddenWordList.h header file so you just have a list of words separated by newlines e.g.
a ability able about ...
Since it's no longer a header file and just a regular text file it makes sense to give it the
.txt
file extension so rename it toHiddenWordList.txt
. As it's now no longer source code it should be moved somewhere else; create a folder in the Content directory called "WordLists" (or whatever you want) and move it there.Now for the code.
First create a
TArray<FString>
member variable in BullCowCartridge header, I'll call mineWordList
, then in the cpp have the following.#include "Misc/FileHelper.h" #include "Misc/Paths.h" void UBullCowCartridge::BeginPlay() { Super::BeginPlay(); const FString WordListPath = FPaths::ProjectContentDir() / TEXT("WordLists/HiddenWordList.txt"); FFileHelper::LoadFileToStringArray(WordList, *WordListPath); //...
FPaths::ProjectContentDir()
will return the absolute path to the Content directory e.g.C:/Users/Dan/UnrealProjects/BullCowGame/Content
The
/
operator has been overloaded to concatenate the two strings together ensuring a/
inbetween them. So in this example that line of code would result in an FString with the value"C:/Users/Dan/UnrealProjects/BullCowGame/Content/WordLists/HiddenWordList.txt"
And finally
FFileHelper::LoadFileToStringArray
loads a text file into aTArray
ofFString
s. The first argument is the TArray to populate and the second is the path to the file.Packaging
In order for this to work in a packaged game you would need to add the WordLists directory to the list of Additional Non-Asset Directories to package in your Project Settings under Packaging.
- 44. Advanced Cursor Usage In VSCode 00:05:33
- 45. TArray Functions .Num() 00:06:14
- 46. Logical Operators 00:06:41
- 47. TArray Functions Adding And Removing 00:16:19
- 47.1 TArrays .html
- 48. Range-Based For Loop 00:05:33
- 50. A Quick Look At Memory 00:05:02
- 50.1 Endianness - Wikipedia .html
- 51. Introduction To References 00:13:59
- 52. Random And The UE4 Docs 00:13:49
- 53. Out Of The Frying Pan 00:03:41
-
54. Loading Words With A Predicate .html
Disclaimer: This is optional and a continuation of "Loading Words At Runtime" and a bit more advanced. Requires UE 4.25 or greater.
Wouldn't it be nice if instead of loading a file to an array of strings, creating a new array, and populating it with strings from the first array based on our criteria, we could instead do that all in one step?
With the help of
FFileHelper::LoadFileToStringArrayWithPredicate
and C++ lambdas we can do just that.LoadFileToStringArrayWithPredicate
takes an additional argument in the form of a function object which takes anFString
and returnsbool
(a function that returnsbool
are "predicates").This version of
LoadFileToStringArray
will only add strings to the array if the predicate returnstrue
.Let's take a look at an example
FFileHelper::LoadFileToStringArrayWithPredicate(Isograms, *WordListPath, [](const FString& Word) { return Word.Len() < 10; });
The first two arguments
Isograms
andWordListPath
are the same as the non predicate version. As a reminderIsograms
is the array to populateWordListPath
is the path to the file (*
is needed as the parameter isTCHAR*
and notFString
)This new third argument is called a lambda. One of its uses is to be able to pass a function to another function.
[](const FString& Word) { return Word.Len() < 10; }
For all intents and purposes this is equivalent to the function
bool Lambda(const FString& Word) { return Word.Len() < 10; }
One key difference is that it's an object so it can be passed to a function.
So what will happen is that each line of the text file is passed to that function and if it returns
true
then it gets added to the array otherwise it moves onto the next line in the file.So with this as the predicate
Isograms
will hold only words that are less than 10 letters long.Let's try matching what the lecture did so that it only holds words that are isograms which are greater than 4 and less than 8 characters in length.
FFileHelper::LoadFileToStringArrayWithPredicate(Isograms, *WordListPath, [](const FString& Word) { return Word.Len() > 4 && Word.Len() < 8 && IsIsogram(Word); });
We did it!... except this doesn't compile. In order to explain why I have to go off on a slight tangent (sorry).
The problem is that
IsIsogram
is a "non-static member function" which means that it needs an instance to call it on e.g.Cartridge->IsIsogram(Word);
However
IsIsogram
doesn't use any of the member variables so it doesn't actually need an instance to be able to use it. In other words it can be a static member function rather than non-static. You've come across static member functions before withFString::Printf
and in the next sectionFMath::Lerp
. What that means is that while they are part of the class they aren't tied to any particular instance of it.If we change the declaration of
IsIsogram
in the.h
to be (note the lack ofconst
¹)static bool IsIsogram(const FString& Word);
And the definition in the
.cpp
to be (note the lack ofstatic
²)bool UBullCowCartridge::IsIsogram(const FString& Word)
Then it should compile.
¹ As a const member function means the function doesn't modify the object that calls it, and a static member function aren't called on objects,
const
has no meaning here. Keeping it here would result in a compilation error.²
static
means several different things in C++, it's probably its most overloaded term; putting it here would mean something else and would fail to compile.Slightly more detailed explanation of a lambda
A lambda is actually just syntactic sugar for creating a class with a compiler generated name with the
()
operator overloaded. The first lambda example is the same as doing the followingclass CompilerGeneratedName { public: bool operator()(const FString& Word) const { return Word.Len() < 10; } };
then creating and passing an instance of this to the function.
- 55. Out Parameters 00:14:58
- 56. Break Out Of A Loop 00:02:48
- 57. Structs 00:11:13
- 58. Bull Cow Extra Credit 00:01:33
- 59. Bull Cow Wrap Up 00:00:48
- 1. Welcome To Building Escape 00:02:10
- 2. Building Escape End Goal 00:05:05
- 3. Setting Up The Building Escape Project 00:05:51
- 4. Pointer Primer 00:04:45
- 5. Unreal’s Classes and Components 00:09:18
- 6. Deleting A Class 00:03:53
- 7. Mid-section Quiz .html
- 8. Logging To The Output Log 00:07:02
- 8.1 Logging in UE4 .html
- 9. Project Settings Default Startup Level 00:01:40
- 10. Accessing An Object’s Name 00:15:14
- 10.3 C Operator Precedence .html
- 11. Getting An Actor’s Transform 00:13:00
- 12. Mid-section Quiz .html
- 13. Importing Custom Meshes 00:20:46
- 14. Using BSP For Basic Building Blocks 00:22:54
- 15. BSP Challenge 00:12:27
- 16. Basic Lighting 00:09:16
- 17. Mid-section Quiz .html
- 18. Transforming Material Textures 00:18:17
- 19. Rotating An Actor With Code 00:15:42
- 20. Object Collision 00:16:31
- 21. Using Linear Interpolation 00:19:50
- 22. Mid-section Quiz .html
- 23. Relative Vs Absolute 00:08:59
- 24. Exposing Parameters To The Editor 00:04:49
- 25. Assets Naming Conventions 00:07:42
- 26. Framerate Independent Using DeltaTime 00:06:13
- 27. Trigger Volumes 00:06:30
- 28. Using Collision Volumes 00:10:56
- 29. Mid-section Quiz .html
- 30. Protecting From A Null Pointer 00:08:37
- 31. Getting The Player To Open The Door 00:07:31
- 32. Getting The Door To Close 00:04:54
- 33. Using GetTimeSeconds() 00:12:54
- 34. Designer Friendly Components 00:07:58
- 35. Grabbing System Overview 00:07:27
- 36. Modifying The Default Pawn Actor 00:10:55
- 37. Inherit Game Mode Blueprint 00:06:40
- 38. Getting Player Viewpoint 00:14:07
- 39. Using DrawDebugLine 00:15:14
- 40. Line Tracing AKA Ray-Casting 00:12:35
- 41. Mid-section Quiz .html
- 42. LineTraceSingleByObjectType() 00:13:40
- 43. Using FindComponentByClass() 00:11:47
- 44. Introducing Input Binding 00:13:23
- 45. Accessors & Memory Layout 00:09:26
- 46. Reducing Code in “Hot Loops” 00:20:30
- 47. Using Physics Handles 00:16:20
- 48. Refactoring Rules 00:18:03
- 49. Iteration Through Valid Actors 00:21:58
- 50. Pointer Protection Process 00:11:46
- 51. SFX & Audio Clips 00:19:01
- 52. Building Escape Final Challenge 00:09:45
- 1. Section Intro - Toon Tanks 00:00:50
- 2. Project Intro 00:01:59
- 3. Pawn Class Creation 00:04:03
- 4. Creating Components 00:08:20
- 5. Deriving Blueprint Classes 00:03:56
- 6. Access Modifiers 00:06:54
- 7. Creating Child C Classe s 00:07:33
- 8. Pawn Movement Input 00:10:11
- 9. Exposing Variables 00:06:50
- 10. Pawn Turret 00:07:24
- 11. Find Distance Between 00:07:02
- 12. Virtual Functions 00:06:54
- 13. Calling Override Functions 00:09:10
- 14. Creating Actor Classes 00:08:40
- 15. Spawning Actors 00:05:35
- 16. Using Dynamic Delegates 00:07:17
- 17. Creating GameMode classes 00:09:51
- 18. Creating a Health Component 00:06:45
- 19. Adding Health Functionality 00:09:45
- 20. Creating Widget Blueprints 00:07:49
- 21. GameMode - ActorDied 00:08:20
- 22. End Game Widget 00:04:04
- 23. GameMode Blueprint 00:07:22
- 24. Debugging our Health Component 00:05:22
- 25. Player Controllers 00:09:57
- 26. PawnTank Destruction 00:04:34
- 27. Spawning Particles 00:06:19
- 28. Particle Components 00:02:20
- 29. Playing Sound Effects 00:03:52
- 30. Creating Camera Shake 00:06:14
- 31. Implementing Camera Shake 00:02:58
- 32. Wrap-up And Challenges 00:10:35
- 1. Section Intro Simple Shooter 00:02:02
- 2. Project Setup 00:10:44
- 2.1 This Lectures Github Commit .html
- 2.2 ShooterAssetPack.Part2.zip .html
- 2.3 This Lectures Discussions .html
- 2.4 ShooterAssetPack.Part1.zip .html
- 2.5 .gitignore .html
- 2.6 ShooterAssetPack.Part3.zip .html
- 3. Pawns vs Characters in C 00:12:22
- 4. Character Movement Functions 00:17:22
- 5. Controller Aiming 00:13:30
- 6. Third Person Camera Spring Arm 00:08:57
- 7. Skeletal Animations 101 00:08:20
- 8. Editing Collision Meshes 00:05:09
- 9. Animation Blueprints 101 00:13:16
- 10. 2D Blend Spaces 00:10:28
- 11. Connecting Animation To Gameplay 00:08:59
- 12. Inverse Transforming Vectors 00:09:38
- 13. Calculating Animation Speeds 00:11:54
- 14. Gun Actors 00:11:34
- 15. Spawning Actors At Runtime 00:06:37
- 16. Attaching To Meshes Via Sockets 00:10:20
- 17. Shooting Architecture 00:06:14
- 18. Spawning Particle Effects 00:08:14
- 19. Player View Point 00:10:52
- 20. Line Tracing By Channel 00:12:28
- 21. Impact Effects 00:04:37
- 22. Dealing Damage To Actors 00:08:04
- 23. Virtual Methods In C 00:10:15
- 24. Overriding TakeDamage 00:09:06
- 25. Blending Animations By Booleans 00:04:42
- 26. Blueprint Pure Nodes 00:06:28
- 27. Create and Setup an AI controller 00:03:59
- 28. AI Aiming 00:06:13
- 29. Nav Mesh And AI Movement 00:10:48
- 30. Checking AI Line Of Sight 00:07:39
- 31. BehaviorTrees And Blackboards 00:08:06
- 32. Setting Blackboard Keys In C 00:05:54
- 33. Behavior Tree Tasks And Sequences 00:08:24
- 34. BT Decorators And Selectors 00:12:12
- 35. Custom BTTasks In C 00:07:53
- 36. Executing BTTasks 00:10:31
- 37. BTTasks That Use The Pawn 00:10:48
- 38. BTServices In C 00:15:05
- 39. Ignoring Actors In Line Traces 00:06:04
- 40. Ending The Game 00:10:16
- 41. Setting Timers In C 00:10:35
- 42. Displaying A Lose Screen 00:11:19
- 43. Iterating Over Actors 00:10:25
- 44. Calculating The Win Condition 00:12:20
- 45. Refactoring PullTrigger 00:07:53
- 46. Weapon Sound Effects 00:06:35
- 47. Randomized Sound Cues 00:08:35
- 48. Sound Spatialization 00:06:45
- 49. Crosshairs and HUDs 00:07:24
- 50. Health Bars 00:07:50
- 51. AimOffsets 00:12:04
- 52. Animation State Machines 00:10:07
- 53. Complex State Machines 00:13:00
- 54. Wrap-up And Challenges 00:08:49
-
1. Coupon For Original Course Content .html
How To Access The Original Content For This Course
As you know, we have remastered (updated) the course to newer versions of Unreal. Most people will have no need to access the original content, given that the updated content is highly improved and created in a newer versions of Unreal. But, if you've taken the original content previously and want to find specific information you can still access it.
As we update each section of this course, we move the original content for that section to a separate Archive course here on Udemy. You can access that course for free by using the link below and entering the password provided. When you are on the confirmation page you may need to click on Enrol rather than clicking on Checkout.
The password is: archive
- 1. WARNING Content Soon To Move .html What follows is a section that is soon to be removed. If you want to take the content, we recommend going over to our archive course (see the previous lecture).
- 2. Intro Notes & Section 4 Assets 00:01:05
- 2.1 This Lectures Discussions .html
- 2.2 Live Google Slides - Always Up To Date .html
- 3. Battle Tank Overview 00:03:42
- 4. S04 Game Design Document (GDD) 00:06:09
- 4.1 Corresponding Blog Post .html
- 4.2 Lecture Project Changes .html
- 4.3 This Lectures Discussions .html
- 5. Setting Up a GitHub “Repo” 00:10:40
- 5.1 Accompanying Blog Post .html
- 6. Creating & Deleting Landscapes 00:10:03
- 7. Landscape Setup & Scaling 00:12:16
- 8. A Landscaping Process 00:10:16
- 9. Upgrading Engine Version 00:05:48
- 10. Using Landscape Layers 00:12:11
- 11. Flat Shading Low Poly Landscapes 00:12:38
- 12. More Landscaping Tools 00:12:10
- 13. Mid Section Quiz .html
- 14. Tank Control System 00:07:32
- 15. Actors from Multiple Meshes 00:13:42
-
16. Improved Models .html
The tank models included in the original content have a few issues with normals. Against this lecture you can download improved versions of the model that are a drop in replacement.
Thank you to Oleg Linkov for the new model.
- 17. Configuring a Tank 00:09:13
- 18. 3rd Person Camera Control 00:14:16
- 19. Fixing 3rd Person Camera Rotation 00:08:06
- 20. User Interface (UI) in Unreal 00:09:18
- 21. Main Menu Screens 00:09:02
- 22. UI Scale Box Buttons & Mouse 00:11:13
- 23. Controller Ready Navigation 00:08:25
-
24. Creating Unreal Engine UI with UMG and C .html
Based on where you are in the course, we're going to assume you’re already familiar with the Blueprint tools for UMG (Unreal's UI framework). These are definitely the best way to go about designing you interfaces. Who wants to be doing that in C++!
But there are good reasons to be using C++ for the logic driving your UI: version-ability, performance or just preference. How can we seamlessly bind our clean, performant C++ to the beautiful UI design created by the editor?Â
This post outlines the tips and tricks Sam has learnt, including...
- Basic setup
- Creating a Blueprint Widget from C++
- Widget Setup
- Getting to your Blueprint widgets
- Binding callbacks
- More cool UI stuff…
Read the full post:Â https://blog.gamedev.tv/creating-unreal-engine-ui-with-umg-and-c/
Enjoy!
Ben & Sam
- 25. Trial Packaging Your Game 00:07:08
- 26. Mid Section Quiz .html
- 27. Delegating to Components 00:11:20
- 28. Using virtual and override 00:14:04
- 29. Overloading and Polymorphism 00:14:27
- 30. Virtual Functions and Vtables 00:11:20
- 31. Creating an AI Controller Class 00:10:56
- 32. Get the Player Controller with C 00:09:35
- 33. Add Tick() to PlayerController 00:11:51
- 34. Creating an Out Parameter Method 00:12:09
- 35. Finding Screen Pixel Coordinates 00:13:49
- 36. Using DeprojectScreenToWorld 00:12:49
- 37. Using LineTraceSingleByChannel() 00:15:25
- 38. Unify Player & AI Aiming 00:10:36
- 39. Mid Section Quiz .html
- 40. Create Default Sub Objects in C 00:12:07
- 41. BlueprintCallable() 00:13:05
- 42. SuggestProjectileVelocity() 00:11:54
- 43. Predict Projectile Landing Point 00:12:36
- 44. Using FRotators in Unreal 00:10:59
- 45. The C Compilation Process 00:07:26
- 46. Using Forward Declarations 00:12:37
- 47. BlueprintSpawnableComponent() 00:10:56
- 48. Review Our Execution Flow 00:13:35
- 49. How to Report Bugs 00:12:18
- 50. Mid Section Quiz .html
- 51. Using Clamp() to Limit Values 00:14:18
- 52. CHALLENGE - Turret Rotation 00:12:44
- 53. CHALLENGE - Turret Rotation Pt.2 00:11:32
- 54. Setting Up Projectiles 00:10:34
- 55. Upgrading to Unreal 4.12 00:11:04
-
It seems that with from Unreal 4.18 the following bugs won't manifest...
- The bug which causes the collisions on the tank̢۪s components to interfere with components.
- The bug which involves the tanks shooting off into the distance when loading the level from the Main Menu.
Thanks to Dan for pointing this out.
Ben, November 2017
56. A Note About The Movement Bug .html - 57. Working Round Awkward Bugs 00:13:56
- 58. Using SpawnActor() to Spawn 00:11:36
- 59. Projectile Movement Components 00:11:11
- 60. Making AI Tanks Fire 00:09:45
- 61. EditAnywhere vs EditDefaultsOnly 00:08:38
- 62. Mid Section Quiz .html
- 63. Adding a Quit Button 00:11:06
- 64. Setup Track Throttles 00:12:31
- 65. ApplyForceAtLocation() in Action 00:12:03
- 66. Physics Materials & Friction 00:14:17
- 67. Fly-by-Wire Control System 00:08:50
- 68. Using BlueprintReadOnly 00:12:46
- 69. A Better Component Architecture 00:12:04
- 70. Completing Manual Tank Movement 00:11:09
- 71. Introducing AI Pathfinding 00:12:03
- 72. Dissecting RequestDirectMove() 00:12:29
- 73. Mid Section Quiz .html
- 74. DotProduct() Vector Operator 00:12:30
- 75. CrossProduct() Vector Operator 00:13:42
- 76. Finalising Your Class Code 00:09:28
- 77. How to Use Blueprint Variables 00:10:10
- 78. Using Enum(erations) in UE4 00:12:06
- 79. Refactoring our Aiming Component 00:14:52
- 80. Attaching a Debugger to Unreal 00:07:22
- 81. Constructor & Begin Play Timing 00:11:58
- 82. Decoupling Your Architecture 00:09:02
- 83. BlueprintImplementableEvent 00:11:57
- 84. Mid Section Quiz .html
- 85. Using the ensure Assertion 00:09:32
- 86. Dependency Mapping 00:09:53
- 87. Talking Head - Real World Skills 00:02:29
- 88. Starting From Green 00:11:10
- 89. Aiming Without the Tank 00:13:57
- 90. Finishing our Refactoring 00:14:04
- 91. Adding TickComponent() Back 00:13:06
- 92. Are Two Floats Equal 00:11:39
- 93. Programmatic Sideways Friction 00:15:18
- 94. OnComponentHit Event in 4.12 00:08:55
- 95. Avoiding Boolean Flags 00:13:18
- 95.1 Lecture Commit on GitHub .html
- 96. Mid Section Quiz .html
- 97. Improving Tank Aiming 00:11:24
- 98. Tweaking Tank AI 00:12:14
- 99. Making an Ammo Display 00:14:23
- 100. Making an AutoMortar 00:14:10
-
101. Improved Mortar Models .html
The mortar models included in the original content have a few issues with normals. Against this lecture you can download improved versions of the model that are a drop in replacement.
Thank you to Oleg Linkov for the new model.
- 102. Using the Reference Viewer 00:14:10
- 103. Preparing for Particles 00:13:22
- 104. Introducing Particle Systems 00:15:54
- 105. Particle Bounding Boxes 00:06:37
- 106. Using FAttachmentTransformRules 00:16:26
- 107. Mid Section Quiz .html
- 108. Radial Forces & Caching 00:14:20
- 109. Using GetTimerManager() 00:10:15
- 110. Using TakeDamage() on Actors 00:15:47
- 111. BlueprintPure & Health Bars 00:14:09
- 112. The Observer Pattern 00:14:19
- 113. Finishing Off - Part 1 00:14:36
- 114. Finishing Off - Part 2 00:15:47
- 115. Section 4 Wrap-Up 00:03:14
- 116. Bonus - Switching Cameras 00:06:36
- 117. Mid Section Quiz .html
- 118. Fixing The Tank Suspension 00:02:21
- 119. Upgrade to 4.19 And Bug Fixes 00:13:07
- 120. Real-world Vehicle Physics 00:08:51
- 121. Creating Physics Constraints 00:15:46
- 122. Making Springs 00:15:32
- 123. Converting The Spring To C 00:11:55
- 124. Attachment Actors and Components 00:13:31
- 125. SpawnActorDeferred and BeginPlay 00:07:14
- 126. Attaching Constraints In C 00:13:09
- 127. Chaining Physics Constraints 00:15:42
- 128. Applying Wheel Driving Force 00:11:29
- 129. Solution Implement GetWheels() 00:10:26
- 130. Tick Groups And Physics 00:18:20
- 131. Tweaking Linear & Angular Damping 00:11:56
- 132. BONUS Fixing Collider Issues 00:03:21
-
1. Coupon For Original Course Content .html
How To Access The Original Content For This Course
As you know, we have been remastering (updating) the course to newer versions of Unreal. Most people will have no need to access the original content as the updated content is highly improved and created in a newer versions of Unreal. But, if you've taken the original content previously and want to find specific information, you can still access it.
As we update each section of this course, we'll move the original content for that section to a separate Archive course here on Udemy. You can access that course, for free, by using the link below and entering the password provided. When you are on the confirmation page you may need to click on Enrol rather than clicking on Checkout.
https://gdev.tv/urcarhive The password is: archive.
-
2. Bonus Lecture - Our Other Courses .html
Congratulations on completing the course, that's no mean feat!
Did you know this course is now available on our very own GameDev.tv site, with shiny new features like 1080p and dark theme?
To claim free access to your GameDev.tv course on our site, simply follow these instructions: https://www.gamedev.tv/p/udemy-migrator and we̢۪ll do the rest.
So what now?
If you're looking to continue to your Unreal journey then check out our Unreal Multiplayer Mastery course.
If you̢۪d like to learn C#, another C family language, then head over to our Complete Unity Developer 2D or Complete Unity Developer 3D C# course.
If you're looking to create assets for your games, then our Blender course is for you.
Look forward to seeing you there soon.
Ben, Sam and the GameDev.tv team
No comments:
Post a Comment