7개 섹션  220개의 강의  총 길이: 31시간 32분

Introduction and Setup 10개의 강의  47분

  • Where To Find Lecture Resources 
  • Meet The GameDev.tv Community 
  • Compilers & VS Community
  • Install Prerequisites On MacOS 
  • Build Unreal From Source (Linux)
  • Antivirus Warnings 
  • Install Unreal Engine 4.22
  • Also Install Visual Studio Code 
  • Want to Focus on Blueprint? 
  • Section Wrap-up

 

Triple X - Write Pure C++ 19개의 강의  2시간 5분

  • Introducing Triple X & Gavin
  • Triple X Game Design Doc 
  • The Structure Of C++ By Example
  • Your First Program 
  • Saving Files
  • A note about red underlines
  • Hello, World!
  • Variables 
  • const & Assigning Values 
  • Statements & Comments 
  • Triple X Mid-section Quiz 5개의 질문
  • MSVC Compilation Warnings [Windows Only] 
  • Naming & Self Documenting Code 
  • Getting User Input 
  • Using if and else in C++ 
  • Functions 
  • Returning Data From Functions 
  • Triple X Mid-section Quiz 5개의 질문
  • Function Parameters 
  • Comparing Values 
  • Generating Random Number Ranges 
  • Triple X End Of Section Quiz 3개의 질문

 

Bulls & Cows 55개의 강의  6시간 54분

  • Hi I'm Mike 
  • Introduction To Bull Cow Game 
  • Non-English characters 
  • Importing Bull Cow Game 
  • Terminal Actor: Non-English Characters Unsupported 
  • The Game Module X Could Not Be Loaded 
  • Helping Us Help You 
  • A Look Around Unrea 
  • Controlling The Viewport 
  • Editing Actors In Our Level 
  • Adding Actors To The Level 
  • Editing the Landscape 
  • Mid-section Quiz 4개의 질문
  • Setting Up VS Code In Unreal 
    Editor Preferences의 Source Code에서 어떤 코드 에디터를 사용할지 설정할 수 있음.

  • Actors And Components 
  • Using The In Game Terminal 
  • Unreal's Types - FString 
  • The TEXT Macro 
  • Mid-section Quiz 4개의 질문
  • Bull Cow Basic Game Loop 

  • Accessing Player Input
  • Coding The Basic Game Loop
  • Member Variables 
  • Solving Slow Compile Times
  • The Full Game Loop
  • Pseudo Code

  • Indentation
  • Mid-section Quiz 3개의 질문
  • Creating Our First Function

  • Finding And Replacing In VS Code 
  • The C++ Dot Operator 
  • Formatting FStrings 

  • Booleans 
  • Pre vs Post Increment / Decrement
  • Parameters And Arguments
  • Early Returns 
  • Mid-section Quiz 5개의 질문
  • Structure Of An FString 

  • Const Member Functions
  • Looping In C++
  • Checking Characters Part 1 
  • Checking Characters Part 2
  • TArray Of Hidden Words
  • Loading Words At Runtime
  • Advanced Cursor Usage In VSCode
  • TArray Functions .Num() 
  • Logical Operators 
  • TArray Functions Adding And Removing
  • Range-Based For Loop
  • Mid-section Quiz 4개의 질문
  • A Quick Look At Memory
  • Introduction To References 
  • Random And The UE4 Docs
  • Out Of The Frying Pan
  • Loading Words With A Predicate
  • Out Parameters 
  • Break Out Of A Loop
  • Structs 
  • Bull Cow Extra Credit 
  • Bull Cow Wrap Up

 

Building Escape 47개의 강의  8시간 46분

 

Welcome To Building Escape
Building Escape End Goal
Setting Up The Building Escape Project
Pointer Primer
Unreal’s Classes and Components
Deleting A Class
Mid-section Quiz 3개의 질문
Logging To The Output Log
Project Settings: Default Startup Level


Accessing An Object’s Name

UE_LOG(LogTemp, Warning, TEXT("%s"), *GetOwner()->GetName());


Getting An Actor’s Transform
Mid-section Quiz 3개의 질문
Importing Custom Meshes
Using BSP For Basic Building Blocks
BSP Challenge
Basic Lighting
Mid-section Quiz 4개의 질문
Transforming Material Textures


Rotating An Actor With Code
Object Collision
Using Linear Interpolation
Mid-section Quiz 4개의 질문
Relative Vs Absolute
Exposing Parameters To The Editor
Assets Naming Conventions
Framerate Independent Using DeltaTime
Trigger Volumes
Using Collision Volumes
Mid-section Quiz 5개의 질문
Protecting From A Null Pointer
Getting The Player To Open The Door
Getting The Door To Close
Using GetTimeSeconds()
Designer Friendly Components
Grabbing System Overview
Modifying The Default Pawn Actor
Inherit Game Mode Blueprint
Getting Player Viewpoint
Using DrawDebugLine
Line Tracing AKA Ray-Casting
Mid-section Quiz 9개의 질문
LineTraceSingleByObjectType()
Using FindComponentByClass()
Introducing Input Binding
Accessors & Memory Layout
Reducing Code in “Hot Loops”
Using Physics Handles
Refactoring Rules
Iteration Through Valid Actors
Pointer Protection Process?
SFX & Audio Clips
Building Escape Final Challenge
Building Escape Wrap Up

 

 

Toon Tanks 33개의 강의 • 4시간 41분

Prepare For Faster Content
Section Intro - Toon Tanks
Project Intro
Pawn Class Creation
Creating Components
Deriving Blueprint Classes
Access Modifiers
Creating Child C++ Classes
Pawn Movement Input
Exposing Variables
Pawn Turret
Find Distance Between
Virtual Functions
Calling Override Functions
Creating Actor Classes
Spawning Actors
Using Dynamic Delegates
Creating GameMode classes
Creating a Health Component
Adding Health Functionality
GameMode - ActorDied
Creating Widget Blueprints
End Game Widget
GameMode Blueprint
Debugging our Health Component
Player Controllers

	if (PlayerControllerRef)
	{
		PlayerControllerRef->SetPlayerEnabledState(false);

		FTimerHandle PlayerEnableHandle;
		FTimerDelegate PlayerEnableDelgate = FTimerDelegate::CreateUObject(PlayerControllerRef, &APlayerControllerBase::SetPlayerEnabledState, true);

		GetWorld()->GetTimerManager().SetTimer(PlayerEnableHandle, PlayerEnableDelgate, StartDelay, false);

	}

PawnTank Destruction

void APawnTank::HandleDestruction()
{
	Super::HandleDestruction();

	bIsPlayerAlive = false;

	SetActorHiddenInGame(true);
	SetActorTickEnabled(false);

}


Spawning Particles
Particle Components
Playing Sound Effects
Creating Camera Shake
Implementing Camera Shake
Wrap-up And Challenges

 

Simple Shooter 54개의 강의  8시간 19분

Section Intro: Simple Shooter
Project Setup
Pawns vs Characters in C++
Character Movement Functions
Controller Aiming
Third Person Camera Spring Arm
Skeletal Animations 101
Editing Collision Meshes
Animation Blueprints 101
2D Blend Spaces
Connecting Animation To Gameplay
Inverse Transforming Vectors
Calculating Animation Speeds

애니메이션으로 속도 계산하기

Footspeed = (y_finish - y_start)  / (t_finish - t_start)

한쪽 발바닥이 땅에 닿은 시점과 떨어지는 시점을 기준으로 한다.


Gun Actors
Spawning Actors At Runtime
Attaching To Meshes Via Sockets

런타임시 게임을 멈춰놓고 오프셋을 맞추면 편하게 맞출 수 있다


Shooting Architecture
Spawning Particle Effects
Player View Point

	FVector Location;
	FRotator Rotation;
	OwnerController->GetPlayerViewPoint(Location, Rotation);

	DrawDebugCamera(GetWorld(), Location, Rotation, 90, 2.f, FColor::Red, true);

뷰포트의 위치에 디버그용 카메라를 그리는 모습



Line Tracing By Channel

Impact Effects
Dealing Damage To Actors
Virtual Methods In C++
Overriding TakeDamage
Blending Animations By Booleans
Blueprint Pure Nodes
Create and Setup an AI controller
AI Aiming
Nav Mesh And AI Movement
Checking AI Line Of Sight

//BeginPlay()
	APawn* PlayerPawn = UGameplayStatics::GetPlayerPawn(GetWorld(), 0);
	SetFocus(PlayerPawn);
	AcceptanceRadius = 300.f;
   
//Tick
	if (LineOfSightTo(PlayerPawn))
	{
		MoveToActor(PlayerPawn, AcceptanceRadius);
		SetFocus(PlayerPawn);
	}
	else
	{
		ClearFocus(EAIFocusPriority::Gameplay);
		StopMovement();
	}

LineOfSight와 Focus를 이용한 간단한 A.I


BehaviorTrees And Blackboards
Setting Blackboard Keys In C++
Behavior Tree Tasks And Sequences

 

비헤이비어 트리와 블랙보드는 AI를 설정하는 툴이다.

컨트롤러에서 함수로 접근할 수 있다.

void AShooterAIController::BeginPlay()
{
	Super::BeginPlay();

	if (AIBehavior != nullptr)
	{
		RunBehaviorTree(AIBehavior);

		APawn* PlayerPawn = UGameplayStatics::GetPlayerPawn(GetWorld(), 0);

		GetBlackboardComponent()->SetValueAsVector(TEXT("PlayerLocation"), PlayerPawn->GetActorLocation());
		GetBlackboardComponent()->SetValueAsVector(TEXT("StartLocation"), GetPawn()->GetActorLocation());

	}
}

시퀸스는 차례대로 태스크를 실행한다.

 

BT Decorators And Selectors

데코레이터라는 조건식으로 흐름을 제어할 수 있다.

그 중 블랙보드는 블랙보드에 등록한 값이 설정(Set)되었는지를 관찰해서

Observer aborts에 따라 흐름을 결정한다.

Both로 하면 값이 참일 때 우측의 흐름을 자신에게 가져오고, 거짓일 때는 abort하고 우측의 흐름으로 넘어간다

 

여기서 Set이란 이전에 사용해본 블랙보드의 SetValueAsVector 등이고

ClearValue로 등록된 값을 지울 수 있다. 아마도 셋이나 맵의 일종으로 추측된다.

 


Custom BTTasks In C++

C++ BTTask를 만들 때 BTTask_BlackboardBase를 선택하면 Key 드롭다운을 사용할 수 있다.


Executing BTTasks

EBTNodeResult::Type UBTTask_ClearBlackboardValue::ExecuteTask(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory)
{
	Super::ExecuteTask(OwnerComp, NodeMemory);

	OwnerComp.GetBlackboardComponent()->ClearValue(GetSelectedBlackboardKey());

	return EBTNodeResult::Succeeded;
}

 


BTTasks That Use The Pawn

EBTNodeResult::Type UBTTask_Shoot::ExecuteTask(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory)
{
	Super::ExecuteTask(OwnerComp, NodeMemory);

	if (OwnerComp.GetAIOwner() == nullptr) return EBTNodeResult::Failed;

	AShooterCharacter* Pawn = Cast<AShooterCharacter>(OwnerComp.GetAIOwner()->GetPawn());

	if (Pawn)
	{
		Pawn->Shoot();
	}

	return EBTNodeResult::Succeeded;
}

 

BTServices In C++

 

BTService는 블랙보드와 관련된 정보를 업데이트해주는 역할을 한다.

주기를 설정할 수 있으므로 Tick의 부하를 줄여준다.

void UBTService_PlayerLocationIfSeen::TickNode(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory, float DeltaSeconds)
{
	Super::TickNode(OwnerComp, NodeMemory, DeltaSeconds);

	APawn* PlayerPawn = UGameplayStatics::GetPlayerPawn(GetWorld(), 0);
	if (PlayerPawn == nullptr || OwnerComp.GetAIOwner() == nullptr) return;


	if (OwnerComp.GetAIOwner()->LineOfSightTo(PlayerPawn))
	{
		OwnerComp.GetBlackboardComponent()->SetValueAsVector(GetSelectedBlackboardKey(), PlayerPawn->GetActorLocation());
	}
	else
	{
		OwnerComp.GetBlackboardComponent()->ClearValue(GetSelectedBlackboardKey());
	}
}


Ignoring Actors In Line Traces
Ending The Game
Setting Timers In C++
Displaying A Lose Screen
Iterating Over Actors

void AKillEmAllGameMode::EndGame(bool bIsPlayerWinner)
{
	for (AController* Controller : TActorRange<AController>(GetWorld()))
	{
		bool bIsWinner = Controller->IsPlayerController() == bIsPlayerWinner;
		Controller->GameHasEnded(Controller->GetPawn(), bIsWinner);
	}
}

TActorRange를 이용한 이터레이팅.


Calculating The Win Condition
Refactoring PullTrigger
Weapon Sound Effects
Randomized Sound Cues
Sound Spatialization

소리에 공간감을 주기 위해서 Spatialization을 사용할 수 있다.

Attenuation을 만들면 된다.


Crosshairs and HUDs
Health Bars
AimOffsets

AimOffset 을 애니메이션에 Add함으로써 위아래를 바라볼때의 애니메이션을 추가할 수 있다.


Animation State Machines
Complex State Machines
Wrap-up And Challenges