2025/03/31 - 서버 용어 개념정리 -

초보 게임개발자·2025년 3월 31일

UnrealEngine

목록 보기
17/19

1. IslocalController

설명:

현재 Controller가 로컬(즉, 플레이어가 직접 조종하는 클라이언트) 에서 실행 중인지 확인하는 함수.

주로 PlayerController에서 사용됨.

로컬 플레이어가 조종하는 컨트롤러인지 판단하는 용도로 사용.

사용 예시:

UI 관련 코드에서 자기 자신의 UI만 업데이트할 때

입력 처리가 로컬 클라이언트에서만 실행되도록 제한할 때

if (IsLocalController())
{
    // 로컬 플레이어에게만 UI 표시
    ShowHUD();
}

2. IslocalControlled

설명:

자신이 직접 조종하는 캐릭터인지 확인하는 함수.

Autonomous Proxy와 비슷하지만, 더 범용적으로 사용됨.

PlayerController뿐만 아니라, AI 컨트롤러인지도 확인할 수 있음.

사용 예시:

카메라 움직임, UI, 입력 처리

if (IsLocallyControlled())
{
    // 내가 조종하는 캐릭터일 때만 UI 표시
    ShowHUD();
}

3. HasAuthority

설명:

현재 객체가 서버에서 실행되고 있는지 확인하는 함수.

true이면 서버에서 실행 중, false이면 클라이언트에서 실행 중.

오직 서버만 수행해야 하는 로직을 작성할 때 사용됨.

사용 예시:

데미지 처리 (서버에서만 실행)

오브젝트 스폰 / 삭제 (서버에서만 가능)

레플리케이션을 위한 데이터 변경

if (HasAuthority())
{
    Health -= Damage; // 체력 감소는 서버에서만 실행
}

4. Authority

설명:

HasAuthority()와 같은 개념이지만, Role == ROLE_Authority로 표현될 때도 있음.

언리얼 엔진 5에서는 대부분 HasAuthority()로 대체되었음.

Authority는 서버에서 실행 중임을 의미함.

사용 예시:

HasAuthority()와 동일

if (GetLocalRole() == ROLE_Authority)
{
    // 서버에서만 실행
}

5. Autonmous Proxy

설명:

클라이언트에서 자신이 조종하는 캐릭터(소유한 객체) 가 Autonomous Proxy 상태가 됨.

즉, 로컬 플레이어가 직접 컨트롤하는 네트워크 객체를 의미.

사용 예시:

입력을 받아 서버로 전송할 때 (Server RPC 호출)

자신의 캐릭터에 대한 빠른 피드백(예: 애니메이션 적용)

if (GetLocalRole() == ROLE_AutonomousProxy)
{
    // 로컬 플레이어의 캐릭터가 직접 조작 중
}

6. Simulated Proxy

설명:

Simulated Proxy는 네트워크에서 복제된 객체(주로 캐릭터) 를 의미함.

서버에서 컨트롤되지 않는 클라이언트의 캐릭터는 Simulated Proxy로 동작함.

Simulated Proxy는 자체적인 로직을 실행하지 않고, 서버의 데이터를 따라감.

주로 다른 플레이어의 캐릭터를 표시할 때 사용됨.

사용 예시:

멀티플레이어 게임에서 다른 플레이어들의 캐릭터를 표시할 때.

Tick()에서 로컬 캐릭터는 움직이지만, Simulated Proxy는 서버의 위치만 반영.

네트워크에서 복제된 캐릭터가 부드럽게 움직이도록 보간(Interpolation) 처리.

if (GetLocalRole() == ROLE_SimulatedProxy)
{
    // 서버에서 받은 데이터를 기반으로 동작
}

7. Possess

설명:

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);
}

8. NetMode

설명:

현재 실행 중인 인스턴스가 서버인지, 클라이언트인지, 독립 실행형인지 확인하는 변수.

NetMode의 값:

NM_Standalone → 싱글 플레이어

NM_ListenServer → 호스트가 클라이언트도 겸하는 서버

NM_DedicatedServer → 클라이언트 없이 순수한 서버

NM_Client → 일반 클라이언트

사용 예시:

서버/클라이언트 전용 기능을 구분할 때

서버에서만 특정 기능을 실행할 때

if (GetNetMode() == NM_DedicatedServer)
{
    // 이 코드는 순수 서버에서만 실행됨
}

9. NetDriver

설명:

언리얼 엔진에서 네트워크 통신을 담당하는 핵심 시스템.

NetDriver는 서버/클라이언트 간의 데이터 송수신을 관리함.

주로 서버의 네트워크 상태를 확인하거나 디버깅할 때 사용됨.

사용 예시:

멀티플레이어 서버를 직접 제어할 때

접속된 클라이언트 리스트 확인

if (GetNetDriver())
{
    // 네트워크가 활성화됨
}

10. NetConnection

설명:

클라이언트와 서버 사이의 네트워크 연결을 나타내는 객체.

패킷을 주고받을 때 사용됨.

사용 예시:

플레이어가 접속을 끊었을 때(Disconnect)

패킷 지연을 감지할 때

if (PlayerController->NetConnection)
{
    // 클라이언트와 연결된 상태
}
profile
기록은 기억을 지배한다!

0개의 댓글