게임 엔진

게임 엔진/[코드조선] 언리얼 데디서버

게임모드와 게임스테이트

GameMode게임모드는 전체적인 진행을 담당하는 액터로 서버와 비슷한 느낌이다 게임 모드를 서버의 접속과정과 함께 알아보자서버 컴퓨터에서 데디 서버 실행 파일을 실행하면Open Level 명령어와 Listen 명령어가 수행된다이때 열린 레벨의 월드 세팅에 게임모드에 대한 정보가 있다해당 게임모드를 생성하고 또 그 게임모드에 PlayerController, PlayerState, … 정보가 있다이러한 정보들을 가지고 각각 해당 액터들을 만들어낸다 게임 모드 액터는 Server에만 존재하고 복제도 되지 않기에각 클라 PC에는 게임모드 액터가 없으며 접근 시 nullptr이 반환된다그래서 게임모드에 접근하려면Server RPC 함수 내에서 접근하거나,서버에서 수행되는 함수 내에서 HasAuthority() ..

게임 엔진/[코드조선] 언리얼 데디서버

애니메이션 동기화

애니메이션 동기화애니메이션 동기화의 경우일반적으로 Owning Client에서 애니메이션을 선재생하고Server를 통해 NetMulticast로 모든 클라에서 애니메이션에 재생되도록 구현하는 방식이 일반적이다그리고 NetMulticast에서 Owning Client와 Server는 실행될 필요가 없다// SPlayerCharacter.h...class STUDYPROJECT_API ASPlayerCharacter : public ASCharacter{ ...public: ...private: ... UFUNCTION(Server, Unreliable) void PlayAttackMontage_Server(); UFUNCTION(NetMulticast, Unreliable) void PlayAttackM..

게임 엔진/[코드조선] 언리얼 데디서버

Replicated, ReplicatedUsing 키워드

Replicated 키워드액터의 bReplicates를 true로 하면해당 액터가 Server에서 모든 클라로 복제가 된다그런데 액터의 속성(멤버 변수)을 복제하고 싶은 경우에Replicated 키워드를 아래와 같이 작성하고UPROPERTY(Replicated, VisibleAnywhere, BlueprintReadOnly, Category = "ASLandMine", meta = (AllowPrivateAccess))uint8 bIsExploded : 1; GetLifetimeReplicatedProps 함수 내에서해당 속성을 DOREPLIFETIME을 통해 지정해줘야 한다virtual void GetLifetimeReplicatedProps(TArray& OutLifetimeProps) const o..

게임 엔진/[코드조선] 언리얼 데디서버

함수 내부에서의 구분

함수 내부에서의 구분BeginPlay(), Tick(), EndPlay()와 같은 이벤트 함수 혹은NetMulticast 함수는 Owning Client, Server, Other Client 모두에서 호출이 된다그렇기에 특정 PC에서 로직이 실행되도록 구현하기 위해서는 아래의 함수들을 활용해야 한다 - HasAuthority()서버인 경우에 true를 반환한다Listen 서버의 경우에는 true일 때, 서버 or 방장 클라이다Standalone 모드에서는 항상 true가 반환된다if (HasAuthority() == true){ // Server}else{ // Owning Client or Other Client} - IsLocallyControlled()현재 액터(ex. 폰)를 현재 클라이언트에서 ..

게임 엔진/[코드조선] 언리얼 데디서버

RPC 활용

Replicates 속성단순히 RPC 키워드를 작성해서 로직을 잘 작성하더라도복제를 원하는 액터의 Replicates 속성을 true로 바꿔줘야Server의 액터 상태가 클라들에도 복제가 된다ASLandMine::ASLandMine(){ ... bReplicates = true;} Server RPC의 실행 흐름 예시1. Owner Client에서 특정 키를 누름2. 해당 키를 누른 Owner Client의 캐릭터 클래스의 키 바인드 함수 호출3. 서버로 보내는 패킷에 Server RPC 함수의 정보도 Serialize 해서 전송4. 서버에서는 패킷을 Deserialize 후 Owner Client의 캐릭터 클래스 Server RPC 함수 수행5. 서버에서 특정 액터가 스폰6. 해당 액터의 bReplic..

게임 엔진/[코드조선] 언리얼 데디서버

RPC 키워드 사용법

RPC 키워드 사용법- RPC 키워드Server, Client, NetMulticast 키워드를 통해 수행될 위치를 정해줄 수 있다그리고 추가적으로 Reliable/Unreliable 키워드와 WithValidation 키워드를 이용해옵션을 설정할 수 있다 - Reliable기본값은 Unreliable이다RPC가 Remote Machine에서 확실히 실행되게하려면 Reliable을 작성해야한다이펙트나 사운드의 경우는 일부 씹혀도 되기 때문에 Unreliable을 작성하는 경우가 많다물리나 스폰의 경우에는 반드시 수행되어야 하기에 Reliable을 작성하는 것이 일반적이다 - WithValidationRPC는 패킷의 전달이 발생하게 된다이러한 과정을 만약 검증하지 않으면 위변조 가능성이 있다그래서 With..

게임 엔진/[코드조선] 언리얼 데디서버

RPC (Remote Procedure Call)

RPC 개념RPC 함수는 A라는 PC가 호출하고, B라는 PC에서 수행되어지도록 하는 함수이다총 경우의 수는 아래와 같다1. Owning Client (호출) → Owning Client (수행) (사실상 자기 자신)2. Server (호출) → Server (수행) (사실상 자기 자신)3. Owning Client (호출) → Server (수행)4. Server (호출) → Owning Client (수행)5. Server (호출) → 모든 곳 (수행) 위 경우의 수를 제외한 나머지 경우는 모두 불가능하다특히, Other Client에서의 호출은 어불성설이며 불가능하다 RPC 키워드- Owning Client (호출) → Server (수행)Server 키워드를 통해서 RPC를 할 수 있다 - Ser..

게임 엔진/[코드조선] 언리얼 데디서버

언리얼 멀티플레이 개념

멀티 플레이 환경 설정Number of Players를 통해 클라이언트 창 개수 (플레이어 수)를 설정할 수 있다Net Modes > Play as Client를 설정하면 데디케이티드 서버로 실행한다Editor Preferences > Play > Multiplayer Options 혹은위에 보이는 고급 세팅을 통해 멀티플레이어 관련 설정을 추가적으로 할 수 있다 Launch separate Server:체크를 하면, 서버 창이 따로 띄워진다체크하지 않으면, 에디터 화면이 클라이자 서버로 실행된다Play Net Mode:모드에 따라 리슨 서버, 데디 서버, … 등 설정할 수 있다Run Under One Process:체크를 하면, 같은 프로세스 내의 에셋을 공유하기 때문에확실한 멀티플레이 환경이라고 보기..

게임 엔진/[일지] 언리얼 (2)

2024.12.07 ~12.08

보호되어 있는 글입니다.

게임 엔진/[일지] 언리얼 (2)

2024.12.03 ~ 12.05

보호되어 있는 글입니다.