Unfortunately we can't accept Pull Requests as they will not end up in the course.
- Welcome, fresh start, new energy
- Did you go back and modify Building Escape?
- Most ambitious section yet
- Bookmark the live Google Slides
- Comment on the slides, especially typos
- Come say hi at community.gamedev.tv
- The concept of the game
- The rules of the game
- Some of the asset requirements for the game
- Identify possible technical challenges.
- The distinction between Git vs GitHub
- Use Unreal’s toolbar & SourceTree
- Enable Git Large File Support (LFS)
- Setup on GitHub (no readme.md or initial commit)
- Push to GitHub and share
- Warning: may take a while on slow broadband.
- Limitations of Unreal’s connection to GitHub
- How to reset to previous commit to combine
- Presenting your public GitHub page well
- Using Markdown to enrich formatting.
- Upgrading my project to Unreal 4.13
- An overview of the scene
- How the First Person Character is composed
- Adding a spiral staircase.
- Add a third person character to the scene
- Caution about tidying files at this stage
- Add a navmesh, and check it’s continuous.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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++.
- 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.
- 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.
- 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.
- What we've covered recently
- What's coming up.
- Yes it should be easier than this, tell Epic!
- How to remove CPP files from browser in Unreal
- The process for deleting C++ classes.
- Also called Material Instances
- These allow modification with little overhead
- How to create an instanced material.
- 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.
- 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.
- 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.
- 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.
- 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.
- You can start with a off-the-shelf blueprint
- We can then add our reusable components
- Another way of getting our desired character.
- 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.
- 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.
- Why refactoring is so important.
- Refactor skills give you the edge.
- What’s coming up in the next lectures.
- 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.
- Renaming CPP files.
- How to deal with renaming blueprint parents.
- Refactor class names in CPP.
- Updating .generated.h files.
- Repeating the renaming process.
- Finishing our refactor.
- Fixing CDO Constructor errors.
- Reading existing source code for hints.
- Creating a socket on a skeletal mesh.
- Parenting a gun to that socket.
- Removing unused assets.
- The major components.
- How to preview animations.
- Definition of an animation and pose.
- Understanding the AnimGraph.
- Playing a custom animation.
- Why state machines?
- What are state machines?
- What’s inside a UE4 state?
- How to add transitions.
- Adding a shooting state.
- What is a blend space?
- How to create a movement blend space.
- Examining the existing Jog blend space.
- Replicating for Ironsights.
- Creating an offset animation.
- Applying an offset to a base.
- Conditional blend nodes.
- Aim offset assets.
- 1D vs 2D Aim offsets.
- Editing an existing animation sequence.
- Revising Behaviour Tree tasks.
- Making our character face us.
- Using AIController’s SetFocalPoint()
- More code reading.
- Jumping between files in Visual Studio.
- Difference between movement and rotation.
- Mapping out complex systems.
- Getting the control rotation.
- Focus Actor vs Focal Point
- Splitting rotators and setting pitch.
- Controlling Animation BP properties.
- Creating a decorator.
- Sequence vs Select nodes.
- Aborting decorators early.
- Clearing blackboard keys from blueprint.
- Patrolling, agro and following.
- 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.
- Preventing Behaviour Tree flicker.
- Creating mutually exclusive states.
- Viewing behaviour while playing.
- Using tags on Actors.
- Revising interrupting tasks.
- Adding in multiple actors.
- Create a Gun actor.
- Move the firing code over.
- Revising refactoring.
- Revise spawning child actors.
- Attaching actors to sub-components.
- Attachment rule to sockets.
- Playing montage animations.
- Connecting to actors in code.
- Finishing our refactor.
- The pros and cons of LFS.
- How to move files from LFS.
- Tracking folder instead of extensions.
- Where tracking happens.
- The pros and cons of LFS.
- Organising your project for clarity.
- How to deal with .umap assets.
- Previewing the gun with the skeleton.
- Positioning the gun.
- Child actors with Blueprint.
- Using Child Actor Components.
- Local vs component-space poses.
- Understanding bone-space.
- The principles of IK.
- End effectors and Joint targets.
- Mapping to the Two Bone IK node.
- Using the Two Bone IK node.
- Effectors vs Joint targets
- Using UE4 built-in version control.
- Diffing blueprints.
- LFS vs Git assets in editor.
- Boolean blending in Unreal.
- Setting variables in animation BP.
- Making the AI aim.
- When to use additive identities.
- Blending additive animations.
- Creating an additive firing animation.
- Controlling firing from the AI.
- Synchronising sound and animation.
- Creating custom notify events.
- Hooking up our gun trigger to AI.
- Applying damage from a projectile.
- Taking damage in a BP character.
- Detaching a controller from a Pawn.
- Revision of BP refactoring.
- Making our Animation BP clean.
- Death animations on the AI.
- Swapping out a 1st to 3rd person character.
- Wrapping rotations.
- Own See vs Owner no see meshes.
- Why 1st person Meshes.
- Hooking up Fire input in TPCharacter.
- Why we need two gun meshes.
- Creating Blueprint components.
- Scene components vs Actor components.
- Camera rotation with control rotation.
- Local vs Global rotation.
- UE4 optimizations for unpossesed characters.
- Using the Arrow component.
- How to architect an infinite runner.
- Overview of how we want our levels to work.
- GameMode BP vs Level BP
- Creating a blueprint GameMode
- How to spawn tiled terrain.
- Using a blueprint for-loop.
- Why we need level gating.
- Our approach to gating.
- Enabling/disabling collisions.
- Creating material instances.
- Exposing material parameters.
- Swapping materials in blueprint.
- Adding affordance to our barriers.
- When to delete previous tiles.
- How to get hold of the Game Mode.
- Spawning new tiles when needed.
- Keeping the minimal tiles in memory.
- Fix camera glitch while strafing.
- Merge the NPC and Player folders.
- Revise redirectors.
- Revise folder movement and deletion.
- Debug a projectile spawn issue.
- Overview the collision system.
- Understand hit and overlap notifications.
- Review different Collision Presets
- NavMesh and procedural terrain.
- Dynamic NavMesh generation.
- When LFS shouldn’t be used.
- Make the player tough for testing.
- Deeply understand the AI system.
- When is code too complex to debug?
- Write high level pseudo code.
- Parallel actions in Behaviour Trees.
- Pseudocode-lead refactoring.
- Aborting lower priority with decorators.
- Organising conditional Behaviour Trees.
- Implementing a conditional decorator.
- Custom task nodes.
- Clean up when task node is aborted.
- Updating to 4.15.0
- Storing build data outside of .umaps.
- Renaming to style guide
- Problems of our existing architecture
- Improved gun-centric architecture
- Challenge: reinstating the gun actor.
- Creating and reparenting a character
- Challenge: Converting the component hierarchy
- Reviewing my Mannequin.cpp
- Reviewing the architecture
- Revision: binding input in C++
- Challenge
- Remove firing from Animation BP
- Control trigger from AI
- How cooldown nodes work.
- Adding gameplay tags.
- Challenge: Let the AI Cooldown
- Randomised burst of fire.
- Separated into sub-behaviour trees.
- What is an animation slot?
- How to blend by root bone.
- "Caching" a pose.
- Challenge: Create and Play Firing Montage
- Attach gun to correct mesh if player
- Reattach gun when player dies
- Challenge: Play Two Montages
- Importing asset pack.
- Introduction to procedural terrain.
- Creating ground mesh from BSP.
- Challenge: creating spawnable props.
- Create a Tile C++ class.
- Expose a UFunction to spawn actors.
- Functions to generate random data.
- Challenge: generate a random spawn point.
- Spawn an actor.
- Randomise the number of actors.
- Challenge: place the actors correctly.
- What is a Sweep?
- How to Sphere Cast in C++.
- Challenge: visualise the cast.
- Creating a Trace Channel.
- Where to configure presets.
- Challenge: make it trace green.
- Writing an actor spawning algorithm.
- Challenge: generate empty space.
- Converting from local to global positions.
- Adding randomised rotation.
- Challenge: add randomised scale.
- Tweaking the spawn radii.
- Flyweight pattern for rendering
- Adding LOD for foliage.
- Challenge: spawn grass instances.
- Reviewing my code.
- Configuring my component.
- Outline of EQS.
- Enabling EQS.
- Creating and testing queries.
- CHALLENGE: Create a Waypoint Query.
- Overviewing the navigation issue.
- Getting hold of existing objects.
- CHALLENGE: Finding NavMeshBoundsVolumes
- Actor Pool architecture.
- Creating the Actor Pool Component.
- CHALLENGE: Plumb the Pool.
- Using the Checkout API
- Overview of object lifecycle
- CHALLENGE: Return to Pool
- Populate the initial pool.
- Implementing checkout.
- Challenge: Implement return and add.
- Rebuilding the Navigation.
- Offset the NavMeshBoundsVolumes.
- CHALLENGE: Spawn on destroy.
- The AI spawning problem.
- Combining parameters as structs.
- CHALLENGE: SpawnPosition Generator Function.
- How to spawn AI.
- PlaceAIPawns definition.
- CHALLENGE: spawn AI in the world.
- Adding a GameMode Score.
- CHALLENGE: Notify on Tile Conquered
- What is a template.
- When would you use one?
- What is the syntax for functions.
- When copy and paste isn’t enough.
- How to handle tricky types.
- Fixing out spawn issue.
- When static polymorphism isn't enough.
- How to use templates in classes.
- Caveats to using templates in C++
- Extending the HUD class
- Why use the HUD class
- CHALLENGE: Create the scoring UI
- Adding PostProcessing Effects
- CHALLENGE: Ease in on Damage
- Sharing your game
- CHALLENGE: Recruit Some Testers
- Changing the lighting
- Firing lasers
- Improving score UI
- Shorter blackout effect
- Making death easier
- How the camera works
- Overview of SetViewTargetWithBlend
- CHALLENGE: Smooth Blend the Camera
- Unpossing with View Targets
- Auto managed View Targets
- CHALLENGE: Manually Manage the View Target
- 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
- 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.