TestingGrounds
Udemy Hunger Games inspired game
1 Testing Grounds Introduction
6 First Person Character Overview
8 The Third Person Character
- Add a third person character to the scene
- Caution about tidying files at this stage
- Add a navmesh, and check it’s continuous.
9 Introducing AI Behaviour Trees
- Setup a Blueprint AI controller class
- Behaviour Trees controll AI execution flow
- Blackboards hold AI instance data
- How to associate a behaviour tree with an AI
- Testing that our behavior tree is running.
10 Introducing AI Blackboard Data
- Blackboard data is like member variables in code
- Using blackboard data to set patrol points
- Practice setting blackboard values in Blueprint
- Test simple AI patrol behaviour.
11 Target Points and Patrol Routes
- Add a variable to the NPC’s blueprint
- How to make a variable an array in blueprint
- Introducing Target Point actors
- Using target points to specify patrol routes.
12 Using Any Actor for Waypoints
- Actors are more general than target points
- How to select an actor from another actor
- Getting the AI Controller to set Blackboard data
- Testing our characters go to a set waypoint.
13 Options for Grouping Actors
- Use layers (usually used for visibility)
- Use groups as a simple multi-select tool
- Use tags, can be flexible but easy to forget
- Use a parent Empty Actor, or a Folder
- Group on game object (e.g. array on NPC)
- The key is to know the pros and cons.
14 Blueprint Behaviour Tree Tasks
- How to use Blackboard Key Selector variables
- Creating new Tasks in Behaviour Trees
- Pseudocode programming in Blueprint
- How to use the Execute AI node
- How to use the Finish Execute node.
15 Modular Arithmetic & Cycles
16 Performance Profiling 101
- The first rule of performance: “profile first”
- Access profiler from Window > Developer Tools
- Choose Session Front End
- Select your running game session
- Chose Profiler tab, and hit Data Preview
- Search for your function and double-click.
17 C++ AI Behaviour Tree Tasks
- Add “AIModule” and “GameplayTasks” to build
- Inherit C++ class from UBTTaskNode
- Override ExecuteTask()
- Return EBTNodeResult::Succeeded;
- Don’t try and extend in Blueprint
- Use Blueprint XOR C++ for a given task.
18 Reading Blackboard Data in C++
- Expose a blackboard key selector in C++
- #include “BehaviorTree/BlackboardComponent.h”
- OwnerComp.GetBlackboardComponent()
- Use GetValueAsInt() etc to get the value
- You can now access blackboard data in C++.
19 The Consequences of Inheritance
- We have coupled our AI ChoseNextWaypoint task to the Third Person Character.
- We have also specialised our Blueprint class with a variable, PatrolPoints.
- These dependencies are undesirable, but we will proceed with our conversion.
20 Converting Blueprint to C++
- OwnerComp.GetAIOwner() to get AI Controller
- If you’re casting, you’re probably coupling
- Use .Num() to get number of elements in TArray
- Use TODO for reminders, to help you FOCUS
- FOCUS = Follow One Course Until Successful.
21 Composition over Inheritance
- We created PatrollingGuard by inheritance
- How about if we want a patrolling tank?
- Another option is to use an actor component
- This is an age-old debate
- Let’s get some real-world experience of the two
- Convert to a component model.
21b Talking Head: What We've Covered So Far
- What we've covered recently
- What's coming up.
22 How to Delete a C++ Class
- Yes it should be easier than this, tell Epic!
- How to remove CPP files from browser in Unreal
- The process for deleting C++ classes.
23 Instanced Materials
- Also called Material Instances
- These allow modification with little overhead
- How to create an instanced material.
24 Introducing AI Perception
- Use AI Perception, it’s newer than Pawn Sensing
- How to add AI Perception to your controller
- Use the apostrophe key ‘ to enable AI debug
- Remember Shift + F1, F8, F11 etc.
25 OnTargetPerceptionUpdated Event
- Use the On Target Perception Updated event
- This reports the actor sensed
- And the class of the sense (e.g. sight, hearing)
- How to setup perception events.
26 AI Hearing Perception in Unreal
- Hearing is a sense that compliments sight
- How to set up AI Perception hearing sense
- How to get hearing perception to trigger
- Making your actor create a noise.
27 The Animation Starter Pack
- The skeleton comprises the bones
- Over the skeleton lays a skeletal mesh
- Each vertex of the mesh connects to bone(s)
- The animation tells the bones how to move
- The bones tell the mesh how to move
- The Animation BP controls the animations.
28 Changing a Character’s Animation
- How to change a mesh’s animation class
- Matching the animation’s mesh to…
- … the mesh selected on the character
- You can apply instance changes to blueprint
- However be careful what you take with you
- Solving “can’t save… graph is linked” error.
29 Customising a Character Blueprint
- You can start with a off-the-shelf blueprint
- We can then add our reusable components
- Another way of getting our desired character.
30 Sub Behaviour Trees
- Behaviour trees can get complex
- We want to keep a consistent level of abstraction
- Behaviour trees can run “sub” trees
- This helps us organise our project.
31 Talking Head - Introducing Sam
- Congratulations on getting this far in the course.
- Recapping the AI work we have done so far.
- Introducing the new instructor for the section: Sam.
31b Talking Head - Refactoring Superpowers
- Why refactoring is so important.
- Refactor skills give you the edge.
- What’s coming up in the next lectures.
32 Simplifying Our Project
- Deleting and Moving folders.
- Ensuring deletion on the file-system.
- Good file structure for Unreal.
- Viewing the dependencies of an object.
- How and when to fix redirectors.
33 Renaming & Moving CPP
- Renaming CPP files.
- How to deal with renaming blueprint parents.
- Refactor class names in CPP.
- Updating .generated.h files.
34 Solution: Renaming & Moving CPP
- Repeating the renaming process.
- Finishing our refactor.
- Fixing CDO Constructor errors.
35 Holding a Gun with Skeletal Sockets
- Reading existing source code for hints.
- Creating a socket on a skeletal mesh.
- Parenting a gun to that socket.
- Removing unused assets.
35b Understanding Animation Blueprints
- The major components.
- How to preview animations.
- Definition of an animation and pose.
- Understanding the AnimGraph.
- Playing a custom animation.
36 Creating Animation State Machines
- Why state machines?
- What are state machines?
- What’s inside a UE4 state?
- How to add transitions.
- Adding a shooting state.
37 Movement Blend Spaces
- What is a blend space?
- How to create a movement blend space.
- Examining the existing Jog blend space.
- Replicating for Ironsights.
38 Offset Animations
- Creating an offset animation.
- Applying an offset to a base.
- Conditional blend nodes.
39 Aiming Blend Spaces Offsets
- Aim offset assets.
- 1D vs 2D Aim offsets.
- Editing an existing animation sequence.
40 Rotating with SetFocalPoint()
- Revising Behaviour Tree tasks.
- Making our character face us.
- Using AIController’s SetFocalPoint()
41 Character Movement vs Rotation
- More code reading.
- Jumping between files in Visual Studio.
- Difference between movement and rotation.
- Mapping out complex systems.
42 Control Rotation for Aim
- Getting the control rotation.
- Focus Actor vs Focal Point
- Splitting rotators and setting pitch.
- Controlling Animation BP properties.
43 Behaviour Tree Decorators
- Creating a decorator.
- Sequence vs Select nodes.
- Aborting decorators early.
- Clearing blackboard keys from blueprint.
- Patrolling, agro and following.
44 Behaviour Tree Services
- Using decorators vs services.
- Creating a service.
- Deeper into behaviour tree states.
- How to implement suspicion.
- Giving our character breathing space.
- Comparing BP Validity and NULL.
45 Tweaking AI Behaviour
- Preventing Behaviour Tree flicker.
- Creating mutually exclusive states.
46 Debugging AI Behaviour
- Viewing behaviour while playing.
- Using tags on Actors.
- Revising interrupting tasks.
- Adding in multiple actors.
47 Refactoring to a Gun Actor
- Create a Gun actor.
- Move the firing code over.
- Revising refactoring.
48 Attaching Actors to Components
- Revise spawning child actors.
- Attaching actors to sub-components.
- Attachment rule to sockets.
49 Configuring the Gun
- Playing montage animations.
- Connecting to actors in code.
- Finishing our refactor.
50 Moving Files from LFS to Git
- The pros and cons of LFS.
- How to move files from LFS.
- Tracking folder instead of extensions.
- Where tracking happens.
51 To LFS or Not to LFS?
- The pros and cons of LFS.
- Organising your project for clarity.
- How to deal with .umap assets.
52 Child Actor Components
- Previewing the gun with the skeleton.
- Positioning the gun.
- Child actors with Blueprint.
- Using Child Actor Components.
52b Introduction to Inverse Kinematics
- Local vs component-space poses.
- Understanding bone-space.
- The principles of IK.
- End effectors and Joint targets.
- Mapping to the Two Bone IK node.
53 Inverse Kinematics with Animations
- Using the Two Bone IK node.
- Effectors vs Joint targets
54 Comparing Blueprints with Diffs
- Using UE4 built-in version control.
- Diffing blueprints.
- LFS vs Git assets in editor.
55 Boolean Blending for Aim States
- Boolean blending in Unreal.
- Setting variables in animation BP.
- Making the AI aim.
56 Adding Firing Animations
- When to use additive identities.
- Blending additive animations.
- Creating an additive firing animation.
- Controlling firing from the AI.
57 Animation Notify Events
- Synchronising sound and animation.
- Creating custom notify events.
- Hooking up our gun trigger to AI.
58 Taking Damage in Blueprint
- Applying damage from a projectile.
- Taking damage in a BP character.
- Detaching a controller from a Pawn.
59 Death Animations and Refactors
- Revision of BP refactoring.
- Making our Animation BP clean.
- Death animations on the AI.
60 Switching 1st and 3rd Person
- Swapping out a 1st to 3rd person character.
- Wrapping rotations.
61 Owner Invisible Meshes
- Own See vs Owner no see meshes.
- Why 1st person Meshes.
- Hooking up Fire input in TPCharacter.
62 Separating Firing from Gun Meshes
- Why we need two gun meshes.
- Creating Blueprint components.
- Scene components vs Actor components.
- Camera rotation with control rotation.
63 Aiming Our 1st Person Camera
- Local vs Global rotation.
- UE4 optimizations for unpossesed characters.
64 Architecture of Infinite Runners
- Using the Arrow component.
- How to architect an infinite runner.
- Overview of how we want our levels to work.
65 Spawning Terrain in the GameMode
- GameMode BP vs Level BP
- Creating a blueprint GameMode
- How to spawn tiled terrain.
- Using a blueprint for-loop.
66 Level Gating for Testing Grounds
- Why we need level gating.
- Our approach to gating.
- Enabling/disabling collisions.
67 Swapping Materials in Blueprint
- Creating material instances.
- Exposing material parameters.
- Swapping materials in blueprint.
- Adding affordance to our barriers.
68 Garbage Collecting Previous Tiles
- When to delete previous tiles.
- How to get hold of the Game Mode.
- Spawning new tiles when needed.
- Keeping the minimal tiles in memory.
69 Merging Our TP and FP Files
- Fix camera glitch while strafing.
- Merge the NPC and Player folders.
- Revise redirectors.
- Revise folder movement and deletion.
70 Hit vs Overlap Events
- Debug a projectile spawn issue.
- Overview the collision system.
- Understand hit and overlap notifications.
- Review different Collision Presets
71 Dynamically Calculating NavMesh
- NavMesh and procedural terrain.
- Dynamic NavMesh generation.
- When LFS shouldn’t be used.
72 Keep It Simple Stupid
- Make the player tough for testing.
- Deeply understand the AI system.
- When is code too complex to debug?
- Write high level pseudo code.
73 Parallel Behaviour Tree Tasks
- Parallel actions in Behaviour Trees.
- Pseudocode-lead refactoring.
- Aborting lower priority with decorators.
- Organising conditional Behaviour Trees.
74 Custom BT Tasks and Decorators
- Implementing a conditional decorator.
- Custom task nodes.
- Clean up when task node is aborted.
75 External Build Data in 4.14+
- Updating to 4.15.0
- Storing build data outside of .umaps.
76 Physical Gun Architecture
- Renaming to style guide
- Problems of our existing architecture
- Improved gun-centric architecture
- Challenge: reinstating the gun actor.
77 Converting a Character BP to C++
- Creating and reparenting a character
- Challenge: Converting the component hierarchy
- Reviewing my Mannequin.cpp
78 Who’s Pulled the Trigger?
- Reviewing the architecture
- Revision: binding input in C++
- Challenge
- Remove firing from Animation BP
- Control trigger from AI
79 Cooldown Nodes & Gameplay Tags
- How cooldown nodes work.
- Adding gameplay tags.
- Challenge: Let the AI Cooldown
- Randomised burst of fire.
- Separated into sub-behaviour trees.
80 Animation Montages and Slots
- What is an animation slot?
- How to blend by root bone.
- "Caching" a pose.
- Challenge: Create and Play Firing Montage
81 Reattaching the Gun
- Attach gun to correct mesh if player
- Reattach gun when player dies
- Challenge: Play Two Montages
82 Procedural Level Generation
- Importing asset pack.
- Introduction to procedural terrain.
- Creating ground mesh from BSP.
- Challenge: creating spawnable props.
83 Generating Random Numbers
- Create a Tile C++ class.
- Expose a UFunction to spawn actors.
- Functions to generate random data.
- Challenge: generate a random spawn point.
84 Spawning Actors in the Tile
- Spawn an actor.
- Randomise the number of actors.
- Challenge: place the actors correctly.
85 Sphere Casting in C++
- What is a Sweep?
- How to Sphere Cast in C++.
- Challenge: visualise the cast.
86 Configure Custom Trace Channels
- Creating a Trace Channel.
- Where to configure presets.
- Challenge: make it trace green.
87 Spawning into Free Space
- Writing an actor spawning algorithm.
- Challenge: generate empty space.
- Converting from local to global positions.
88 Randomising Rotation & Scale
- Adding randomised rotation.
- Challenge: add randomised scale.
- Tweaking the spawn radii.
89 Flyweight Pattern for Foliage
- Flyweight pattern for rendering
- Adding LOD for foliage.
- Challenge: spawn grass instances.
- Reviewing my code.
- Configuring my component.
90 Choosing Waypoint with EQS
- Outline of EQS.
- Enabling EQS.
- Creating and testing queries.
- CHALLENGE: Create a Waypoint Query.
91 Find Actors of Type from C++
- Overviewing the navigation issue.
- Getting hold of existing objects.
- CHALLENGE: Finding NavMeshBoundsVolumes
92 Plumbing an Actor Pool Setup
- Actor Pool architecture.
- Creating the Actor Pool Component.
- CHALLENGE: Plumb the Pool.
93 Using the Pool API
- Using the Checkout API
- Overview of object lifecycle
- CHALLENGE: Return to Pool
- Populate the initial pool.
94 Using TArray for Pools
- Implementing checkout.
- Challenge: Implement return and add.
95 Rebuilding Navigation Meshes
- Rebuilding the Navigation.
- Offset the NavMeshBoundsVolumes.
- CHALLENGE: Spawn on destroy.
96 Structs to Simplify Function Args
- The AI spawning problem.
- Combining parameters as structs.
- CHALLENGE: SpawnPosition Generator Function.
97 Spawning AI from C++
- How to spawn AI.
- PlaceAIPawns definition.
- CHALLENGE: spawn AI in the world.
98 Keeping Score
- Adding a GameMode Score.
- CHALLENGE: Notify on Tile Conquered
98b Understanding Function Templates
- What is a template.
- When would you use one?
- What is the syntax for functions.
98c Template Specialization
- When copy and paste isn’t enough.
- How to handle tricky types.
98d Fixing Double Spawning
- Fixing out spawn issue.
- When static polymorphism isn't enough.
- How to use templates in classes.
- Caveats to using templates in C++
99 Using the HUD Class
- Extending the HUD class
- Why use the HUD class
- CHALLENGE: Create the scoring UI
100 Post Processing for Tunnel Vision
- Adding PostProcessing Effects
- CHALLENGE: Ease in on Damage
101 Recruiting Play Testers
- Sharing your game
- CHALLENGE: Recruit Some Testers
- Changing the lighting
- Firing lasers
- Improving score UI
- Shorter blackout effect
102 Smooth Blending the Camera
- Making death easier
- How the camera works
- Overview of SetViewTargetWithBlend
- CHALLENGE: Smooth Blend the Camera
103 Possessing and the View Target
- Unpossing with View Targets
- Auto managed View Targets
- CHALLENGE: Manually Manage the View Target
104 The Calm Before The Storm
- Peace before the storm
- CHALLENGE 1: Fix the crashing issue
- CHALLENGE 2: Make the Actors spawn
- Parametrise the enemy count
- BONUS: Fixing multiple camera transitions
XXX Testing Grounds Wrap-up
- WELL DONE, over 50h of content
- You've got a great understanding of Unreal
- Your C++ knowledge is transferrable
- Improve with: more weapons, pick-ups, progression
- Please share screenshots / 20s video with community.