1 minute read

팀프로젝트 네트워크기능 추가

각 플레이어의 virtual camera가 각 플레이어를 따라가도록 플레이어 생성시 Start에서 cinmeMachine에 카메라를 할당해줬다.
애니메이션을 Photon view로 연동시켰고, 각 플레이어를 따로 조종하게 하는 기능도 완성 되었다.
포톤의 Photon view 기능의 편리성으로 transform과 rigidebody를 연동해주면 소유권을 잘 관리하여 모두 해결할 수 있었다.
그 다음 아이템을 마스터가 생성하고 이게 소모될 경우 해당 함수를 RPC로 플레이어들에게 같이 실행하도록 하였다.
아직 랭킹시스템을 위한 게임 점수계산, 게임 종료 함수를 담당하신 분이 솔로 테스팅이 끝나면 이를 네트워크로 연동하게 도와드리고, UI를 담당하시던 분이 전체적으로 Scene 이동을 담당하시는데 다 되시면 완료될 것 같다.
이번 팀 프로젝트는 전체적으로 네트워크를 맡고나니 초반 기본 연결과 시작을 만들고나서는 다른 분들의 데이터가 플레이어간 연동이 되게 도와드리는 일이 대부분이었다.

이번 프로젝트에서 네트워크를 맡으며 다양한 네트워크 데이터 교환을 다 도와주다보니 구조를 어떻게 짜야할지 또 배웠다.
일단 객체별로 이동, 효과 발동, 공격 등 스스로가 변해야하는 행동은 왠만하면 객체 내에 코드에서 수정하는게 좋다.
그래야 포톤 네트워크 기준으로 데이터 교환할 때 Photon view와 RPC 같은 요소를 써서 처리하기 좋다.
그래서 stateMachine에서는 이 객체들에 달려있는 코드에 함수를 실행시키고 StateMachine 스스로가 직접 객체들을 조종하게 두거나 하여 외부 코드에서 각 객체를 최종 수정하게 두지는 않아야 할 것 같다.
또한 컨트롤만 각 플레이어에게 권한을 넘겨주고, 실제 객체의 권한 자체를 넘겨주면 안된다.
물론 넘겨줘도 게임에 따라 문제가 없을 수도 있는데, rigidbody같은 것을 활용하여 물리충돌을 구현하거나 할 때 이런식으로 하면 매번 소유권을 넘겨주고 뺏고 하는 등 귀찮은 일이 발생한다.
그럴바에 처음부터 input을 줄 수 있는 권한만 주고, 실제 객체들은 해당 input을 받아서 마스터에서 처리해서 플레이어들에게 뿌려주는게 좋을 것 같다.