RPC ( Remote Procedure Call )
다른 주소 공간에서 함수나 프로시저를 호출하는 방법. 로컬 함수처럼 호출되지만, 실제로는 네트워크를 통해 다른 시스템에서 실행된다.
클라 -> 서버 ( Server RPC )
일반적으로 클라이언트가 서버에 요청을 보내고 서버는 해당 요청을 처리한 후 결과를 반환합니다.
만약 A , B , C 객체가 있고 A 가 Liten 서버를 만든다면
A 기준 A는 Invalid Connection, B 는 Valid Connection, C 는 Valid Connection
B 기준 A 는 Invalid Connection, B는 Valid Connection, C는 Invalid Connection
C 기준 A 는 Invalid Connection B는 Invalid Connection C 는 Valid Connection
이다. 이것은 A 클라는 본인이 서버 역할도 하니 본인과 연결할 필요가 없다는 뜻이고, 서버로서 B C 와 연결되었다는 것이다.
B, C 클라는 본인이 서버와 연결되었기에 자기 자신은 Conncetion 인 것이고 나머지 클라는 서버로부터 복제 받은게 전부이기에 Invaild Connection 으로 나오는 것이다.
그런데 PlayerController_n 을 보면 2,3번 클라가 자기자신을 _1 로 취급한다.
이것은 서버쪽에서의 디폴트폰 이 있고 이후에 클라는 자신만을 알기 때문이다.
클라는 Onwer 를 자기 자신만 으로만 알고 있다., 서버에서는 각 클라의 Onwer 를 확인 가능하다.
각 클라와 서버 별로 아웃라이너를 확인 가능하다.
서버와 클라의 권한 확인
ROLE_Authority : 클라이언트가 ROLE_Authority 라면 서버로서 다른 클라이언트까지 영향을 끼칠 수 있다.
ROLE_AutonomousProxy : 서버에 들어와 복제 생성된 클라이언트이지만 입력을 통해 움직임이 가능
ROLE_SimulatedProxy : 서버에 들어와 복제 생성된 클라이언트이고 입력을 받는것도 불가능
새로 생성된 클라와 서버 역할까지 하는 서버는 역할이 다르다.
ENetRole 을 이용해 서버인지 아닌지 확인하거나 찾은 클라이언트가 자기 자신인지 확인 할 때 사용할 수 있다.
각 클라이언트는 스스로를 확인 가능하다.
Owner 는 서버에서 동기화 해준다.
리플리케이트 변수는 서버에서 동기화를 해주어야한다.
동기화 함수인
GetLifetimeReplicatedProps
는 클라 혹은 서버 간의 연결 시에 각각에게 호출된다.
Replicate - 변수를 동기화 해주는 역할
서버 에서 원하는 변수를 리플리케이트 해주면 클라는 해당 변수와 동기화 된다.
권한을 가지는 서버에서만 액터를 회전 시켰기 때문에 클라에서는 액터의 회전을 감지 할 수 없다.
리플리케이트 되어져 있는 변수를 등록해주면 클라에서도 회전 값이 동기화 된다.
회전 값 변수만 동기화 된 것이기 때문에 별도의 코드로 액터의 회전을 동기화 해야한다.
요렇게 동기화 해준다.
다만, 아예 동기화 로직을 함수로 빼서 사용 가능하다.
동기화 로직을 함수로 빼서 사용
동기화 함수를 위와 같이 넣어준다.
이제 해당 함수에 동기화 로직을 넣어주면 리플리케이트 변수의 값이 변경 될 때 마다 해당 OnRep 함수가 호출된다.
'새싹 UE5' 카테고리의 다른 글
24-11-21 언리얼 네트워크 캐릭터 동기화 (1) | 2024.11.22 |
---|---|
24-11-20 언리얼 네트워크 - 색상 동기화와 RPC (0) | 2024.11.20 |
24-11-13 ( 네트워크 1일차 ) (0) | 2024.11.13 |
(카메라, Inventory, NPCShop, Widget, 트레이스 ) 3 (0) | 2024.10.11 |
09-26 (카메라, Inventory, NPCShop, Widget, 트레이스 ) 2 (0) | 2024.09.26 |