설명:
현재 Controller가 로컬(즉, 플레이어가 직접 조종하는 클라이언트) 에서 실행 중인지 확인하는 함수.
주로 PlayerController에서 사용됨.
로컬 플레이어가 조종하는 컨트롤러인지 판단하는 용도로 사용.
사용 예시:
UI 관련 코드에서 자기 자신의 UI만 업데이트할 때
입력 처리가 로컬 클라이언트에서만 실행되도록 제한할 때
if (IsLocalController())
{
// 로컬 플레이어에게만 UI 표시
ShowHUD();
}
설명:
자신이 직접 조종하는 캐릭터인지 확인하는 함수.
Autonomous Proxy와 비슷하지만, 더 범용적으로 사용됨.
PlayerController뿐만 아니라, AI 컨트롤러인지도 확인할 수 있음.
사용 예시:
카메라 움직임, UI, 입력 처리
if (IsLocallyControlled())
{
// 내가 조종하는 캐릭터일 때만 UI 표시
ShowHUD();
}
설명:
현재 객체가 서버에서 실행되고 있는지 확인하는 함수.
true이면 서버에서 실행 중, false이면 클라이언트에서 실행 중.
오직 서버만 수행해야 하는 로직을 작성할 때 사용됨.
사용 예시:
데미지 처리 (서버에서만 실행)
오브젝트 스폰 / 삭제 (서버에서만 가능)
레플리케이션을 위한 데이터 변경
if (HasAuthority())
{
Health -= Damage; // 체력 감소는 서버에서만 실행
}
설명:
HasAuthority()와 같은 개념이지만, Role == ROLE_Authority로 표현될 때도 있음.
언리얼 엔진 5에서는 대부분 HasAuthority()로 대체되었음.
Authority는 서버에서 실행 중임을 의미함.
사용 예시:
HasAuthority()와 동일
if (GetLocalRole() == ROLE_Authority)
{
// 서버에서만 실행
}
설명:
클라이언트에서 자신이 조종하는 캐릭터(소유한 객체) 가 Autonomous Proxy 상태가 됨.
즉, 로컬 플레이어가 직접 컨트롤하는 네트워크 객체를 의미.
사용 예시:
입력을 받아 서버로 전송할 때 (Server RPC 호출)
자신의 캐릭터에 대한 빠른 피드백(예: 애니메이션 적용)
if (GetLocalRole() == ROLE_AutonomousProxy)
{
// 로컬 플레이어의 캐릭터가 직접 조작 중
}
설명:
Simulated Proxy는 네트워크에서 복제된 객체(주로 캐릭터) 를 의미함.
서버에서 컨트롤되지 않는 클라이언트의 캐릭터는 Simulated Proxy로 동작함.
Simulated Proxy는 자체적인 로직을 실행하지 않고, 서버의 데이터를 따라감.
주로 다른 플레이어의 캐릭터를 표시할 때 사용됨.
사용 예시:
멀티플레이어 게임에서 다른 플레이어들의 캐릭터를 표시할 때.
Tick()에서 로컬 캐릭터는 움직이지만, Simulated Proxy는 서버의 위치만 반영.
네트워크에서 복제된 캐릭터가 부드럽게 움직이도록 보간(Interpolation) 처리.
if (GetLocalRole() == ROLE_SimulatedProxy)
{
// 서버에서 받은 데이터를 기반으로 동작
}
설명:
Possess() 함수는 Controller가 Pawn(캐릭터)을 소유(컨트롤)할 때 사용됨.
APlayerController 또는 AAIController가 특정 APawn을 제어할 때 호출됨.
주로 플레이어가 새로운 캐릭터를 조종할 때 사용됨.
사용 예시:
플레이어가 새로운 캐릭터로 전환할 때 (Respawn, 캐릭터 변경 등)
AI가 새로운 Pawn을 제어할 때 (Bot AI)
멀티플레이어 게임에서 서버가 플레이어의 캐릭터를 할당할 때
void AMyPlayerController::Respawn()
{
// 새로운 캐릭터를 생성
AMyCharacter* NewCharacter = GetWorld()->SpawnActor<AMyCharacter>(CharacterClass, SpawnLocation, SpawnRotation);
// 새로운 캐릭터를 Possess (조종)
Possess(NewCharacter);
}
설명:
현재 실행 중인 인스턴스가 서버인지, 클라이언트인지, 독립 실행형인지 확인하는 변수.
NetMode의 값:
NM_Standalone → 싱글 플레이어
NM_ListenServer → 호스트가 클라이언트도 겸하는 서버
NM_DedicatedServer → 클라이언트 없이 순수한 서버
NM_Client → 일반 클라이언트
사용 예시:
서버/클라이언트 전용 기능을 구분할 때
서버에서만 특정 기능을 실행할 때
if (GetNetMode() == NM_DedicatedServer)
{
// 이 코드는 순수 서버에서만 실행됨
}
설명:
언리얼 엔진에서 네트워크 통신을 담당하는 핵심 시스템.
NetDriver는 서버/클라이언트 간의 데이터 송수신을 관리함.
주로 서버의 네트워크 상태를 확인하거나 디버깅할 때 사용됨.
사용 예시:
멀티플레이어 서버를 직접 제어할 때
접속된 클라이언트 리스트 확인
if (GetNetDriver())
{
// 네트워크가 활성화됨
}
설명:
클라이언트와 서버 사이의 네트워크 연결을 나타내는 객체.
패킷을 주고받을 때 사용됨.
사용 예시:
플레이어가 접속을 끊었을 때(Disconnect)
패킷 지연을 감지할 때
if (PlayerController->NetConnection)
{
// 클라이언트와 연결된 상태
}