본문 바로가기
반응형

전체 글70

5. Dedicated Server 네트워킹 - Sprint 기능 Replication 기존의 싱글플레이 게임 코드에서 데디케이티드 서버를 사용하는 멀티플레이 게임으로 구조를 변경중이다. 여러 머신에서 같은 플레이 화면을 보기 위해서는 Replication을 통한 동기화가 필요하다. 캐릭터의 입력,애니메이션 부터 동기화를 시작해보자. 일단 Sprint 기능부터 동기화 하려 한다. - Sprint 상태 동기화 Sprint키를 눌렀을 때 캐릭터의 bIsSprinting=true 가 되었다는 것을 다른 클라이언트들에게도 알려주기 위해 함수 리플리케이션을 통해 다른 클라이언트에 함수를 똑같이 실행시켜준다. - Character.h Replicated 속성을 사용하기 위해서는 GetLifetimeReplicatedProps() 함수에 Replicated할 속성값을 등록해줘야 한다. - Charact.. 2022. 7. 1.
[짤막 팁] UE4 클래스 생성 시 FObjectInitializer 사용법 UE4에서 FObjectInitializer 구조체를 이용해서 특정 맴버를 초기화 시키는 방법이 있다. (코드에서 해당 구조체로 검색해보면 여러가지 나온다.) 사용방법은 아래 두가지 방법중 하나를 이용하면 되므로 입맛대로 사용하자. 1. 클래스 생성자 매크로를 GENERATED_BODY() -> GENERATED_UCLASS_BODY() 로 변경하고 const FObjectInitializer& ObjectInitializer 가 있는 생성자를 구현하는 방법 // .h 파일 UCLASS() class XXXX_API ClassA : public APawn { GENERATED_UCLASS_BODY() // 언리얼에서 클래스를 생성하면 GENERATED_BODY()가 디폴트 // 기타 클래스 세팅... }.. 2022. 6. 30.
[짤막 팁] UE4의 벡터 정규화(Normalize) 점 A에서 점 B로 가는 벡터 = B벡터 - A벡터 (시작위치 A, 목적지 B 라면 목적지-시작위치) 일정한 속도로 이동하려면 이 벡터를 정규화(normalize) 해야 한다. == 크기를 1이 되게 만든다.(언리얼 단위는 cm로 취급됨) -> 틱 단위로 적절한 속도의 움직임을 만들기 위해 속도를 곱할 수 있다. - FVector의 정규화(Normalize) 함수 Normalize: 실제로 벡터 자체를 수정함. GetSafeNormal: 새로운 벡터를 생성. 정규화된 벡터는 보호된다. (언리얼에서의 Normal은 정규화된 벡터를 의미, 법선벡터 의미X) -> 벡터 자체를 수정하지 않는 것이 좋은 습관. 소스가 변형되면 버그 찾기 힘들다. -> 정확한 계산이 가능하다.(아주 작은 오차는 존재) GetUns.. 2022. 6. 25.
언리얼 멀티플레이어 리플리케이션의 핵심 개념 HasAuthority() : 서버인지 확인하는 함수 언리얼엔진 클라이언트-서버 모델은 서버가 권한을 갖고 있다. (그래서 서버인지 확인하는 함수명 HasAuthority()) 동기화는 항상 서버의 권한. 서버에 있는 값이 항상 정확한(신뢰할 수 있는) 값임. => authoritative 서버에서 값을 업데이트 해서 리플리케이트 할 변수들만(신뢰할 수 있는 값) 클라이언트들에게 보내는 방식. -> 만약 서버가 아닌 클라이언트에서 액터를 업데이트 시켰다면? => 클라이언트는 서버로 다시 값을 보내지 않는다. 서버가 유지하는 값이 항상 정확한 값이기 때문. 결국 서버는 값이 그대로임. 하지만 서버에서 값을 업데이트 한다면 클라이언트에서 업데이트 하는 값과 차이가 생기게 됨. 그래서 클라이언트에서는 액터가 .. 2022. 6. 24.
멀티플레이시 언리얼엔진 내부에서 일어나는 일 삼인칭 템플릿 프로젝트를 생성하고 에디터에서 Netmode를 Play as Listen Server로 하고 플레이어 수를 늘려 플레이 하면 각 클라이언트에서 캐릭터를 조종해서 다른 캐릭터가 움직이는걸 서로 볼 수 있다. 어떻게 가능할까? 언리얼엔진 내부에서 일어나는 일 1. 맵(월드)을 로딩한다. 2. 맵은 GameMode를 특정한다. (게임모드는 오버라이드 가능. 특정 월드를 위한 게임모드 만들어서 오버라이드 가능.) 3. 맵에 조인하려는 Player Controller를 얻는다. -> 두 플레이어를 배치한다면, 두 개의 플레이어 컨트롤러를 생성하고 맵에 조인시킨다. 4. 플레이어 컨트롤러는 게임모드에 Pawn을 스폰하도록 요청한다. -> GameMode : Pawn을 생성할 위치를 결정하는 클래스 5.. 2022. 6. 24.
반응형