Feedback for Section: "Crypt Raider"

Lectures include:

  1. Section Intro - Crypt Raider - We overview the prototype for the game and our plan of action for creating it.

  2. Project Setup - We download all the assets we need for the section and create a new first person project.

  3. Modular Level Design - We look at the building blocks included in our asset pack and use these constraints to help us design our level on paper.

  4. Modular Level Layout - We put our paper design into practice by layout out our level. We learn to use grid snapping and the 4 viewport view to layout levels efficiently. We also learn about keeping our outliner organised in folders.

  5. Solution: Modular Level Layout - We go through the rest of the level design in this challenge solution video.

  6. Light Types - We encounter some of the main types of lighting: point, spot, rect, directional and skylight. We see how to setup a sky sphere with our skylight and directional light to create natural lighting.

  7. Lumen & Light Bleed - We edit the materials in our scene to make them Lumen compatible. Then we block out any light bleeding into our dark dungeon.

  8. Level Lighting - We use the different types of light to light our level. We learn about core light settings such as intensity and radius. And we enable shadows for our lights

  9. Character Blueprint - We remove the mesh from the first person character and create a GameMode to spawn this by default.

  10. Inheritance vs Composition - We go over the benefits of composition and how we can use it in Unreal.

  11. C++ Actor Component - We create a C++ actor component and add it to our gate in our level

  12. Pointer Types & GetOwner() - We learn what a pointer is and how to store one in a variable. We learn how to get a pointer to the owning actor and print this to the console.

  13. Deferencing & Arrow (->) Operator - We see how we can “dereference” a pointer and use this to access functions from a pointer class. We then see a shortcut using the arrow operator.

  14. Linkers, Headers and Includes - We learn how to include a header file so that we have access to more functionality. We look briefly into how the C++ compiler works.

  15. FMath::VInterpConstantTo - We learn to use the FMath library and particularly the VInterpConstantTo function. We see the various variant of it and learn to read it’s documentation. We then make our Mover go with a boolean.

  16. Scene Components - We create a new Scene Component and learn how they are different from Actor Components. We then attach this one to our player so that it rotates with the player view.

  17. Line Tracing & Sweeping - We learn what a line trace is and why it might be useful. We also see a helpful alternative, the shape sweep and why we might want to use this instead. We then see how to setup trace channels in the engine.

  18. GetWorld() - We learn about the UWorld type and what it represents as well as how to get and store a pointer to it. See see some of the functions it has available to us.

  19. DrawDebugLine() - We see how to draw a line for debugging purposes to allow us to visualise our line trace or sweep.

  20. References vs Pointers - We step back from our project to see the difference between a reference and a pointer and the pros and cons of each.

  21. Const References & Out Parameters - We see how references can be used to pass parameters without a copy. We see how const can be used to protect them and how out parameters can be used.

  22. Geometry Sweeping - We learn how to do a Geometry sweep by creating a Shape object and using out parameters to get our results.

  23. Input Action Mappings - We see how to configure our input actions in the editor and how this gives us controller and mouse or keyboard support.

  24. Blueprint Callable - We learn how to make a function callable from Blueprint. We use this to call the “Grab” and “Release” function on a key event.

  25. FindComponentByClass() & nullptr - We are introduced to the PhysicsHandle component and why we want to use it. We then learn to use FindComponentByClass to get and store a pointer to it.

  26. DrawDebugSphere() - We learn to draw debug spheres to visualise points in space.

  27. Grabbing With Physics Handle - We learn to grab using a physics handle and set the target location and rotation. We take the opportunity to extract a function from repeated code.

  28. Waking Physics Objects - We look at waking a sleeping physics object and releasing the grabbed object.

  29. Returning Out Parameters - We learn to extract our own functions that use out parameters and how we can pass a result out using one.

  30. Overlap Events - We learn about trigger volumes, object types and collision responses so that we can get our volumes to give overlap events in the right circumstances.

  31. Constructors - We see how constructors get run before the game runs and how they can be used to set default values and setup our classes. We use this to allow our class to Tick.

  32. TArray - We learn what an array is and how we can get the size of one as well as get element from it using the index operator.

  33. While & For Loops - We learn to use the simplest type of loop “while”. We use it to get each element in turn from the array. We see how we can do this more easily using a for-loop.

  34. Range Based For Loops - We learn the easiest way to loop over a collection like TArray: the range-based for loop.

  35. Actor Tags - We see how we can add actor tags in the editor and check for them in C++ code. We use this to give an acceptance parameter to our Trigger Component.

  36. Early Returns - We see how we can extract a function with a for loop an how we can make it more efficient using an early return.

  37. Dependency Injection - What is Dependency Injection and how can it make our code more reuseable? We answer these questions to allow us to link up our Trigger Component with our mover.

  38. Casting & Actor Attachment - We learn how to enable and disable physics for a component as well as how to attach an actor to a scene component. We do this to attach our statues where we drop them.

  39. Adding and Removing Tags - We see how we can manipulate the TArray of tags at run time. We do this to tag an object while it’s being grabbed.

  40. Boolean Logical Operators - We learn how to use && and ! to make more complex boolean expressions. This allows us to only accept an actor on the pressure plate if it is dropped.

  41. Level Polish - We make the Grabber enable physics and detach the Actor from the Trigger. We then make the Mover move back to the starting position. This allows us to make the final puzzle in our level.

  42. Crypt Raider: Wrap-Up - We overview the learning takeaways from the section and see how we could take our project further.

Jump in and leave feedback.

I’m currently on the VInterpConstantTo lesson and I’ve just noticed that I no longer get any autocomplete or suggestions in Visual Studio Code. I’ve tried restarting but it still does not work. Any advice?

Edit:
I seem to have fixed the problem by closing Visual Studio Code, the doing the following steps from within Unreal Engine:

Tools>Refresh Visual Studio Code Project
Tools>Open Visual Studio Code

2 Likes

Not a big deal. But the FMath::VInterpConstantTo video still shows the UE 4 docs. You can switch it to UE 5 on the top left dropdown.

Thanks, that solved for me too. :+1:

No problem!
Another quirk I’ve come across is Visual Studio Code complaining about includes now and then. Usually repeating these steps or rebuilding from within Visual Studio Code solves it

Ugh I eventually gave up on VSCode and switched to Rider. It’s only free for 30 days and then it costs a few bucks, but to me it’s worth it: much better dev experience and much better integration with UE5.

Aside from having to rebuild the grabber EVERY time I open the project. (Now I just Close UE and rebuild ever time) I have now run into this error:

Summary

Accepted Live coding shortcut
---------- Creating patch ----------
Running C:\Epic\UE_5.0\Engine\Binaries\DotNET\UnrealBuildTool\UnrealBuildTool.exe -Target=“CryptRaiderEditor Win64 Development -Project=”“C:/Users/ColdN/OneDrive/Documents/Unreal Projects/CryptRaider/CryptRaider.uproject”"" -LiveCoding -LiveCodingModules=“C:/Epic/UE_5.0/Engine/Intermediate/LiveCodingModules.txt” -LiveCodingManifest=“C:/Epic/UE_5.0/Engine/Intermediate/LiveCoding.json” -WaitMutex -LiveCodingLimit=100
Log file: C:\Users\ColdN\AppData\Local\UnrealBuildTool\Log.txt
Invalidating makefile for CryptRaiderEditor (working set of source files changed)
Parsing headers for CryptRaiderEditor
Running UnrealHeaderTool “C:\Users\ColdN\OneDrive\Documents\Unreal Projects\CryptRaider\CryptRaider.uproject” “C:\Users\ColdN\OneDrive\Documents\Unreal Projects\CryptRaider\Intermediate\Build\Win64\CryptRaiderEditor\Development\CryptRaiderEditor.uhtmanifest” -LogCmds=“loginit warning, logexit warning, logdatabase error” -Unattended -WarningsAsErrors -abslog=“C:\Users\ColdN\AppData\Local\UnrealBuildTool\Log_UHT.txt” -installed
Reflection code generated for CryptRaiderEditor in 1.8325098 seconds
Building CryptRaiderEditor…
Using Visual Studio 2022 14.31.31106 toolchain (C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.31.31103) and Windows 10.0.19041.0 SDK (C:\Program Files (x86)\Windows Kits\10).
[Adaptive Build] Excluded from CryptRaider unity file: CryptRaider.cpp, Grab.cpp, Grabber.cpp, Mover.cpp, TriggerComponent.cpp
Determining max actions to execute in parallel (6 physical cores, 12 logical cores)
Executing up to 6 processes, one per physical core
Building 2 actions with 2 processes…
[1/2] Compile Mover.gen.cpp
[2/2] Compile Mover.cpp
Total time in Parallel executor: 0.56 seconds
Total execution time: 3.89 seconds
File C:\Users\ColdN\OneDrive\Documents\Unreal Projects\CryptRaider\Intermediate\Build\Win64\UnrealEditor\Development\CryptRaider\CryptRaider.cpp.obj was modified or is new
File C:\Users\ColdN\OneDrive\Documents\Unreal Projects\CryptRaider\Intermediate\Build\Win64\UnrealEditor\Development\CryptRaider\Grab.cpp.obj was modified or is new
File C:\Users\ColdN\OneDrive\Documents\Unreal Projects\CryptRaider\Intermediate\Build\Win64\UnrealEditor\Development\CryptRaider\Grabber.cpp.obj was modified or is new
File C:\Users\ColdN\OneDrive\Documents\Unreal Projects\CryptRaider\Intermediate\Build\Win64\UnrealEditor\Development\CryptRaider\Mover.cpp.obj was modified or is new
File C:\Users\ColdN\OneDrive\Documents\Unreal Projects\CryptRaider\Intermediate\Build\Win64\UnrealEditor\Development\CryptRaider\TriggerComponent.cpp.obj was modified or is new
File C:\Users\ColdN\OneDrive\Documents\Unreal Projects\CryptRaider\Intermediate\Build\Win64\UnrealEditor\Development\CryptRaider\CryptRaider.init.gen.cpp.obj was modified or is new
File C:\Users\ColdN\OneDrive\Documents\Unreal Projects\CryptRaider\Intermediate\Build\Win64\UnrealEditor\Development\CryptRaider\Grab.gen.cpp.obj was modified or is new
File C:\Users\ColdN\OneDrive\Documents\Unreal Projects\CryptRaider\Intermediate\Build\Win64\UnrealEditor\Development\CryptRaider\Grabber.gen.cpp.obj was modified or is new
File C:\Users\ColdN\OneDrive\Documents\Unreal Projects\CryptRaider\Intermediate\Build\Win64\UnrealEditor\Development\CryptRaider\Mover.gen.cpp.obj was modified or is new
File C:\Users\ColdN\OneDrive\Documents\Unreal Projects\CryptRaider\Intermediate\Build\Win64\UnrealEditor\Development\CryptRaider\TriggerComponent.gen.cpp.obj was modified or is new
Building patch from 10 file(s) for Live coding module C:\Users\ColdN\OneDrive\Documents\Unreal Projects\CryptRaider\Binaries\Win64\UnrealEditor-CryptRaider.dll
Creating library C:\Users\ColdN\OneDrive\Documents\Unreal Projects\CryptRaider\Binaries\Win64\UnrealEditor-CryptRaider.patch_0.lib and object C:\Users\ColdN\OneDrive\Documents\Unreal Projects\CryptRaider\Binaries\Win64\UnrealEditor-CryptRaider.patch_0.exp
Mover.gen.cpp.obj : error LNK2011: precompiled object not linked in; image may not run
C:\Users\ColdN\OneDrive\Documents\Unreal Projects\CryptRaider\Binaries\Win64\UnrealEditor-CryptRaider.patch_0.exe : fatal error LNK1120: 1 unresolved externals
Failed to link patch (0.000s) (Exit code: 0x460)
---------- Finished (0.000s) ----------

[EDIT] This compiled FINE in Visual Studio 2022. This is a probably VSCode problem.

Not sure if it’s VSCode (which is rubbish!) but this all fell apart as soon as I was trying to get the GetActorNameOrLabel it was giving an error saying it wasn;t part of the AActor class. All the includes had red lines under them. I rebuilt the project in VSCode and UE5 in teh tools menu, but now LiveCoding fails every time.

Why are we using VSCode? This seems utterly rubbish, it’s the only thing I have had any issues with through this entire course so far!

My guess is because VS Code is intended for Linux users but also works on Windows (obviously) as well as Mac, so the instructors cover a wider audience by using it. Some people also prefer the more ‘stripped-down’ look and feel of VS Code as compared to alternatives.

As I mentioned in a different thread, I strongly recommend using VS 2019 or 2022 Community Edition if you are on Windows. Much better integration with UE5 (and UE4 for that matter) in my opinion and if anyone taking the course intends to work in the industry, most studios are using VS 2019 or 2022 Pro, including Epic themselves.

1 Like

Agreed, having used VSStudio2022 all evening, not a single issue at all. VSCode is not worth using.

Yeah, if you’re on Windows and you aren’t comfortable with configuring VS Code or dealing with its quirks, VS 2019 or 2022 is the way to go. Another student that was also having trouble with VS Code reported that she was able to get the project up and running on VS 2022 without issue.

As some general feedback, your tutorials are fine in the editor, but when you are doing code you go way too fast - it is impossible to listen, take in, think, and type at once…it’s a pause, play for two seconds, pause, play for two seconds nightmare.

Also, the constant the C code one way then changing it all to another way (moving it to seperate functions etc) is very confusing, I would stick to one or the other.

On the “Overlap Events” module you seem to have skipped where you set it up to print “Hello” to the screen?

Just a different opinion on the speed of your lectures, I find the lectures to be the perfect speed for me. I watched the UE4 version of this lecture, before diving into this one, and I felt the pace was painfully slow with long lingering on screens. The only experience with coding I have is basic python knowledge and I felt like I was watching UE4 for dummies which means it was extreme thorough. I had to watch it on 8x or sometimes 16x speed.

I have yet to do any adjustment to playback speed this time around and if anything, I’d actually rather prefer slowing down playback than speeding up. I am loving this series of lectures for UE5 and feel that I am understanding the C++ better this time around that I didn’t understand in the UE4 lectures. I am excited to dive into the others when I finish and appreciate you putting in the time to make these so fun and interesting.

After creating the level and creating ceilings to block out light bleed, I am still getting this weird light bleed from my Crypt_Walls on the sides and floor. I’ve checked the heights of the walls and floors and ceilings. The weird part is that this is only happening on the side of my corridor that the sun is hitting directly, I tested after moving the sun direction. I’ve also tried overlapping two walls and still get the same issue. The issues also only happens when standing at an angle from far away and upon getting closer it disappears. Any ideas what it could be?


You’ll want to use the SM_Edge_Stones (or the trim stones) mesh to block the bottom seam between the floor and the walls. The floor and wall meshes don’t form perfect connections because of the way their tiling material works.

It also just looks better, in my opinion.

@Technicolor Thank you for your suggestion, however it didn’t seem to solve the issue.



I tried a different default material separate from Medieval Pack and it still produced the same issue. I also tried it with the dungeon_wall, overlapping floor, and overlapping walls but still no luck.

I put a bandaid on this issue by creating a extra walls behind those problem walls to block out light from directly hitting those walls.

Bit of an odd one…in teh Actor tags section it was working fine, except when I created the variable to control the tag…it stopped working. Some playing later and I discovered that using ULOG to print out the number of hit objects always returned 0…so it look slike my collission detection randomly turned itself off for no reason. Has anyone else had that? Also, the acceptableactortag catagory for the trigger has vanished.

Restarting Unreal fixed it, but my C code had reverted to a MUCH earlier version, and the statue waking was gone. How odd.

I had trouble with the TArray one where it was printing the name of the door Actor I had it on. When I move the Trigger off the door so its not touching anything then it worked fine. I assume because the door was in the array[0] spot but it was confusing me for a bit.

Having an issue.

Unreal crashed on me and upon restarting has errors everywhere. I have fixed most, however the raycasting is totally broken now and I cannot figure out why. When I click now, it casts forward but always at an abolute fixed height, it doesn’t seem to take up and down rotation into account. I have compared my code to the project resources and it is identical. I don;t really want to have to repeat the entire course…anyone got any ideas?