본문 바로가기

전체 글

(228)
저주 및 몬스터 네트워크 동기화 프로젝트 중 저주 및 몬스터 동기화에 대한 로직을 정리.    저주 적용 및 옮기기, 몬스터 행동 및 Possess 동기화  * 현재 프로젝트 내에서 설계한 스팀 세션을 생성 및 참여 했을 때에도 저주와 몬스터에 대한 네트워크 동기화에 문제가 없음을 확인     저주 1. 사람 플레이어들에게 랜덤하게 적용.2. 플레이어가 죽거나 괴물이 되면 다시 랜덤하게 플레이어에게 적용3. 저주 적용 상태의 플레이어는 다른 사람에게 저주 넘기기 가능4. 저주가 걸린 로컬 플레이어에게만 개별적인 임시 UI 보이기 위의 4가지 부분에서 네트워크 동기화 성공 저주 적용 시점과 옮기기까지 과정1. 저주 객체를 GameState 에서 관리했다. GameState 는 각 pc 별로 1씩 존재 가능하기 때문.GameState 에서..
UE5 JsonObject 와 JsonUtilities 를 이용한 파싱 Json 형태의 파일을 언리얼에서 사용하기 위해 파싱 하는 방법일단 Json 파일 자체를 가져오는건 다음에 하고 지금은 가상 데이터를 JsonObject 형태로 받고 다시 FString 에 넣겠다.  DataToJson 의 예제 4가지멤버를 하나씩 셋팅한다.FJsonObjectConverter 를 사용해서 한 번에 처리한다.여러개의 데이터를 하나씩 셋팅한다.FJsonObjectConverter 를 사용해서 여러 데이터를 처리한다. 1. 멤버를 하나씩 셋팅특징 : 원하는 멤버만 셋팅하고 싶다면 이 방식을 사용하면 좋다. 먼저 원하는 데이터를 구조체로 레이아웃 설정을 해준다. 구조체에 가상의 데이터를 생성한다. 이제 JsonObejct 를 생성하고 데이터를 JObj 에 셋팅한다.이때, Array 계열의 멤버..
Unreal Network - Possess 동기화 & Spectator Pawn 언리얼에서 PlayerController 의 Possess 는 서버에서 호출되면서 언리얼 엔진의 리플리케이션 시스템이 적용되어 있어 playercontroller 와 Pawn 의 변경 내용을 자동으로 동기화한다.   1. 사망 시 애니메이션에서 노티파이로 OnDie 실행. 죽은 클라이언트의 Mesh 를 숨기면서 DieProcess() 실행2. MainUI 의 Retry 버튼을 활성화 3. Retry 버튼을 누르면 관찰자 모드를 실행 4. ServerRPC 로 서버에서 Possess 를 진행 즉, 사망한 객체는 서버에게 Possess 스위칭을 요청한다.여기서 사망한 객체의 소유자 (playercontroller) 가 서버에게 Possess 신청하는 것이고 Possess 와 같은 함수는 리플리케이션이 보장되..
Unreal Network - Pistol, Fire, Dead 동기화 RPC 를 사용한 네트워크 동기화 권총 부착 or 해제를 서버 - 클라이언트's 동기화  1. F키를 눌러 TakePistol 호출 시 ServerRPC 로 서버에 요청2. ServerRPC 함수에서 총을 가지고 있지 않다면 가장 가깝게 있는 권총을 선택3. 안가지고 있으면 가장 가까운 권총을 서버에서 Multicast Attach 실행. 모든 클라에게 해당 캐릭터의 총 장착을 동기화가지고 있으면 현재 권총을 서버에서 Multicast Detach 실행. 모든 클라에게 해당 캐릭터의 총 해제를 동기화  총 쏘기 및 재장전 동기화 1. 라인 트레이스로 Hit 결과 값을 ServerRPC_Fire 에게 전달하면서 서버에게 Fire 동기화 요청2. 서버에서 MulticastRPC_Fire 로 모든 클라이언트에..
Reliable 와 TCP 프로토콜의 차이점 Reliable 와 TCP 둘 다 신뢰성을 보장하지만 실제 동작하는 계층과 방식에 확연한 차이가 있다. 먼저 Reliable 과 RPC 같은 경우 애플리케이션 계층에서 동작한다. 이러한 Reliable 은 RPC의 호출에 대한 신뢰성을 보장한다. 즉, 패킷의 손실을 잠지 및 재전송 시도를 하는 TCP와 비슷한 역할을 수행한다. 다만, Reliable 은 게임 로직 수준에서의 함수 등의 호출 성공 여부를 보장하는 것까지가 역할이다. 다시 말하면 Reliable 의 신뢰성 보장은 프로세스 내에서 그 중에서도 객체나 함수 호출에 대한 신뢰성 보장이다. TCP는 전송 계층에서 사용되는 프로토콜로 전송 여부를 3핸드세이킹 방식으로 연결 확인 후 통신하도록 만든다.이때, 패킷 손실, 순서가 바뀌는 문제도 자동으로 ..
TCP/UDP 프로토콜 TCP (Transmission Control Protocol)TCP 는 네트워크 통신에서 연결 지향적이면서 신뢰성을 보장하는 프로토콜이다. OSI 7계층 기준으로 전송 계층에서 사용하는 프로토콜이다.  3-way handshake 방식을 이용한 연결 성립 방식 3-way handshake3-way handshake 는 TCP 의 연결 과정에서 사용하는 절차이다. 송신자와 수신자가 데이터 전송을 시작 전에 서로가 연결되어 있는지 확인하는 과정이다. TCP의 연결 지향적 프로토콜의 신뢰성을 보장한다.1.  SYN 클라 -> 서버로 연결 요청클라가 서버에 TCP 연결을 요청하는 패킷을 보내는 것.SYN 플래그가 있어 연결 요청임을 알 수 있다. 플래그에는 시퀀스 번호를 포함한다.2. SYN-ACK서버 -> ..
네트워크 ( OSI 7 계층, TCP/IP 4 계층 프로토콜 ) 네트워크 란?컴퓨터 혹은 기타 기기들이 리소스를 공유하거나 데이터를 주고 받기 위해 유선 혹은 무선으로 연결된 통신 체계 네트워크의 대표적인 기능들애플리케이션 목적에 맞는 통신 방법 제공신뢰할 수 있는 데이터 전송 방법 제공네트워크 간의 최적의 통신 경로 결정목적지로 데이터 전송노드 사이의 데이터 전송 네트워크 프로토콜통신 기능이 제대로 동작하기 위해 통신 참여자들 사이에 약속된 통신 규약위의 네트워크 기능과 역할이 많아 하나의 프로토콜로 정의하기 어렵다.**모듈화** 를 통해 기능 별로 분리해서 관리한다. OSI model( 7 layers )네트워크가 수행하는 역할(기능) 별로 계층적 구조를 가지게 만들어 범용적인 네트워크 구조를 만드는 것.*TCP/IP* 스택 ( 4 layer )은 인터넷에 특화된..
24-11-22 네트워크 큐브 생성 동기화 각각의 플레이어들이 큐브를 생성하고 이것을 동기화하자 만든 클래스의 가장 중요 부분 : 게임 모드에서 상태 변경 >> 서버에서만 변경되는것, 변경된 변수의 동기화가 별도로 필요  큐브 생성 및 동기화 로직 서버에서 멀티캐스트를 호출하는 형식이다.  ChangeTurn 이 실행되는데 이 함수를 게임모드가 가지고 있다.  그런데 게임모드는 서버만 가지고 있기 때문에 CanMakeCube 라는 bool 변수는 서버에서만 변경되는 것.모든 클라가 이 변경점을 알 수 있도록 동기화 되어야한다.   변수를 동기화해서 변수 값이 업데이트 될 때 마다 동기화가 모든 클라에게서 동기화가 진행된다.