진짜 ㅈ같은 과정이었다.
리플리케이트 안쓰고, 데이터 매니저를 서버와 클라에서 각각 개별로 보관하면서
이벤트 발생할때만 서버의 데이터를 클라에 동기화 시키는 방법을 찾아야 했는데.
강의에서 들은 내용은 딱히 필요가 없었고
지피티 갈구면서 해결함.
서버에서만 생성할때 필요한것
비긴 플레이
get all actor of class (controller) -> 배열로 저장
Spawn Data Manager
이렇게 만들어야 할때, 분기문을 이렇게 짜야 했음.
begin play
if(has authority == true)
{
if(is local controller == true)
{
//서버
get all actor of class (controller) -> 배열로 저장
Spawn Data Manager
}
}
else
{
if(is local controller == true)
{
//클라
get all actor of class (controller) -> 배열로 저장
Spawn Data Manager
}
}
첫 분기문, has authority == 참 일시 서버, 거짓일시 클라
이후 공통 로컬 컨트롤러 참
딱 이것만 하면 일단 서버 클라 분리가 됨.
RPC 할때는
서버에서 클라로 전파할때
for(controller)
if ( index != 0 )
{
RPC_소유한 클라로 전파
}
이렇게 해주면 됨.
index 가 0이 아닐때만 해야하는건, 0은 서버이기 때문.
진짜 여기서 막히면 걍 때려 칠라 했는데 다행히 해결.
이 방식은 리플리케이트를 쓰지 않는거라, 보통 방식이랑은 안맞을건데
일단 이벤트 전파 방식은 알아냈기에....좀 후련해졌음.
이제 rpc떡칠할 시간이야
바라던 바다!!!
나도 멀티 만들고 싶은데 글 봐도 모르겠네...
서버에만 이벤트 진행, 클라에만 이벤트 진행을 나누는 방법인데. 함수 2개가 필요함. has authority랑 is local controller 이 함수들은 불리언을 반환하는데. 로컬 컨트롤러는 둘다 참 이어야 하고. 오소리티가 참일때는 서버에서만 실행. 거짓일때는 클라에서만 실행됨. 이벤트 분리 방법만 기록한거고, 리플리케이트는 또 다름.
서버에서 클라에 rpc 전달할때는 클라의 컨트롤러 레퍼런스가 필요함. 그 레퍼런스를 get all actor of class로 받음. 배열이라서 0번 인덱스는 서버. 0번 이외는 클라임. 그래서 0이 아닐때만 rpc실행하면 됨.
UI 구현이라는 또다른 시련이 펼쳐지는데... - dc App