제 2장 발사체
저번 1일차에서는 움직임 동기화를 하는 방법을 공부했다.
이번 2일차에서는 발사체를 서로 동기화 하는 방법에 대해서 공부해 볼 것이다.
우선 발사체는 서버용과 클라이언트용이 따로 따로 존재한다
단. 충돌은 서버에서 처리한다.
발사체를 만드는 과정은 다음과 같다.
| 가. 클라이언트 발사버튼을 누르면 클라이언트에서 더미 발사체를 만들어냅니다. 나. 그리고 RPC를 보내서 서버가 발사를 하도록 요청합니다. 나. 서버는 RPC를 받아 해당 요청이 올바르다고 판단되면(쿨타임, 방향, 조건 등등) 서버는 실제 발사체를 생성해서 발사합니다. 다. 서버는 모든 접속한 클라이언트들에게 해당 탱크에서 더미 발사체를 만들어내라고 명령합니다. 마. 이 명령을 받은 클라이언트들은 더미 발사체를 생성해서 발사하게 됩니다. |
우선 발사체를 만들기 전 Rpc에 대해서 설명을 해보려고 한다.
RPC는 리모트 프로시져 콜의 약자로
다른 호스트에서 실행되고 있는 이 인스턴스에 있는 메서드를 호출해주는 역할을 한다.
[ServerRpc]
요약. 클라가 실행하면 서버에 요청이 들어가서 서버가 실행한다.
클래스 안에 메서드를 호출하는 것처럼 클라이언트에서 서버로 정보를 보내는 기능이다.
이거를 쓰고 메서드를 써야 정보 보내기가 가능하고 클라이언트에 의해서만 호출이 될 수 있다.
(메서드 위에 [ServerRpc] 속성추가 작성 시 사용 가능)
클라이언트는 'NetworkObject'에서 서버 RPC를 호출할 수 있다. 똑같이 호스트에서 서버 RPC 호출이 가능하다.

[ClientRpc]
클래스 안에 메서드를 호출하는 것처럼 서버는 ClientRPC를 호출하여 모든 클라이언트에서 실행이 가능하다.
메서드를 쓰고 그 위에 속성으로 [ClientRpc] 작성하면 선언할 수 있다. 호출할 때에는 [ClientRpc] 속성으로 표시하고 ClientRpc메서드 접미사를 사용해야 한다
(메서드뒤에 ClientRpc를 붙이고 호출한다. 그렇지 않으면 오류 뜸)

위 설명처럼 RPC를 잘 이용하여 서버에서 발사체의 충돌과 발사체의 이동을 동기화 할 수 있다.
끝.