Make Unreal REAL.
article thumbnail
변수 리플리케이션

Unreal Engine 5 C++ Multiplayer Shooter 프로퍼티 리플리케이션 액터 프로퍼티 리플리케이션 방법에 대한 상세 정보입니다. docs.unrealengine.com 플레이어 캐릭터에서 현재 겹치고 있는 무기를 저장하도록 한다. UPROPERTY(Replicated) 매크로를 지정하면 서버에서 값이 변경될 때, 다른 클라이언트에 값이 복제(동기화)된다. 리플리케이션은 항상 서버 -> 클라이언트 단방향으로만 진행된다. 클라이언트에서 복제된 변수의 값을 바꾸는 것은 권장하지 않는다. 다음 번 서버가 변화를 감지하고 업데이트를 전송할 때까지 서버의 값과 달라지게 된다. 서버의 변수 값이 자주 변경되지 않는다면, 클라이언트가 보정을 받을 때까지 오랜 시간이 걸릴 수 있다. Replicat..

article thumbnail
무기 획득 위젯 띄우기

Unreal Engine 5 C++ Multiplayer Shooter 무기 위에 획득 위젯을 띄우기 위해 위젯 블루프린트를 생성한다. 무기 액터에 위젯 컴포넌트를 추가한다. 위젯 클래스를 지정하고 Screen 공간에 띄우며 Draw at Desired Size에 체크한다. 위젯 컴포넌트의 위치를 무기 위로 조정해준다. 무기 위에 획득 위젯이 잘 보인다. 플레이어 폰과 겹쳤을 때 획득 위젯을 띄우기 위해 OnComponentEndOverlap 델리게이트에 등록할 함수를 선언한다. 헤더를 추가한다. 겹침 확인 등의 중요한 처리를 서버에서만 하는 것이 좋기 때문에, HasAuthority()가 true인 경우에만 델리게이트에 함수를 등록한다. 처음에는 획득 위젯을 보이지 않도록 한다. 플레이어 액터와 겹쳤을..

article thumbnail
Weapon 클래스 생성

Unreal Engine 5 C++ Multiplayer Shooter 무기로 쓸 Weapon 액터를 생성한다. 무기의 상태를 나타내는 EweaponState 열거형을 정의한다. Base type을 uint8로 지정하고 마지막에 MAX를 정의해주면, MAX를 통해 열거형의 개수를 알 수 있다. UMETA(DisplayName = "Name") 매크로를 지정해주면, BP에서 해당 이름으로 열거형이 표시된다. 무기 메쉬를 보여주기 위한 Skeletal Mesh 컴포넌트와 겹침을 판별할 Sphere 컴포넌트를 선언한다. Tick 기능은 사용하지 않을 것이므로 꺼준다. 생성자에서 컴포넌트를 생성하고 충돌을 설정한다. 무기 메쉬는 폰은 무시하고 다른 것들과는 Block하도록 설정한다. Sphere는 기본적으로 모..

article thumbnail
Network Role

Unreal Engine 5 C++ Multiplayer Shooter 멀티 플레이어 게임에서 한 캐릭터의 역할(ENetRole)에는 총 3개가 있다. ROLE_AutonomousProxy 로컬 머신에서 조작중인 캐릭터 ROLE_Authority 서버에 존재하는 캐릭터 ROLE_SimulatedProxy 다른 클라이언트 머신에서 Replicated 된 캐릭터 ROLE_None 특별한 역할이 없다. 캐릭터 위에 역할을 표시할 위젯을 생성한다. 언리얼 엔진 5.1+ 버전부터는 OnLevelRemovedFromWorld() 함수 대신, NativeDestruct() 함수를 오버라이드 하도록 한다. 레벨을 이동할 때 뷰포트에서 위젯을 제거하도록 한다. 우선은 내 머신을 기준으로 하는 Local Network R..

article thumbnail
Seamless Travel

Unreal Engine 5 C++ Multiplayer Shooter Non-Seamless Travel 클라이언트는 레벨을 이동할 때, 연결이 끊어졌다가 다시 같은 서버에 연결된다. 연결이 끊겼다가 재연결되기 때문에, 서버 연결 문제나 최대 인원 수 초과 등으로 인해 재연결이 불가능할 수도 있다. 레벨을 처음 로드할 때 발생한다. 서버에 처음 연결할 때 발생한다. 멀티 플레이어 매치가 끝난 후 새로운 게임이 시작할 때 발생한다. Seamles Travel 레벨을 이동할 때 연결이 끊기지 않으므로 유저에게 매끄러운 경험을 제공할 수 있다. 재연결과 관련된 문제를 피할 수 있다. 사용하기 위해서는 Transition 레벨이 필요하다. 많은 메모리를 차지하는 레벨에 있을 때 그 레벨에 있는 상태에서 또 큰..

article thumbnail
애니메이션 적용

Unreal Engine 5 C++ Multiplayer Shooter NativeInitializeAnimation() 함수는 애님 인스턴스에서 BeginPlay() 함수와 같은 역할을 한다. NativeUpdateAnimation() 함수는 Tick() 함수와 같은 역할을 한다. UAnimInstance::TryGetPawnOwner() 함수를 통해 애님 인스턴스를 사용 중인 폰을 가져올 수 있다. Speed 변수는 Z축을 제외한 XY 속력을 기준으로 한다. UCharacterMovementComponent::GetCurrentAcceleration() 함수는 현재 가속도를 FVector 타입으로 반환한다. 방향 키를 누르는 동안에는 0이 아니고, 떼면 0이 된다. 애님 그래프는 다음과 같다. Jum..

검색 태그