2026/10/21 Project CB - 볼링공과 상호작용의 네트워크화

    안녕하십니까 쳇바퀴 스튜디오입니다. 2026년 10월 21일 개발일지를 작성하겠습니다. 지난 개발일지 이후 볼링공 및 상호작용 행동이 모든 클라이언트에서 동기화되도록 했습니다. 영상으로 보여드리겠습니다.

 

   영상은 클라이언트 시점에서 촬영된 영상입니다. 클라이언트가 공을 집고 떨어뜨리고 왔다갔다하며, 결국에는 공을 투척했습니다. 이 일련의 상황에서 클라이언트의 입력이 서버에 전송되어, 서버가 입력에 따라 볼링공을 이동시키고, 이동된 볼링공의 위치가 Network Transform과 같은 코드를 통해서 클라이언트에게 다시 동기화 되는 작업이 진행되었습니다.

   하지만 영상에서 확인할 수 있듯이, 볼링공이 굉장히 부자연스럽습니다. 고정적인 위치에 있는 것이 아니라, 볼링공의 위치가 굉장히 불안정하며 정상적인 작동처럼 보이지 않습니다. 이 뿐만 아니라, 영상 후반부에서 관찰하셨을 수도 있듯이, 볼링 핀들이 넘어진 후에 정리되지 않는 모습입니다. 다음 개발일지에서는 이러한 문제들을 수정하도록 하겠습니다. 감사합니다.

 

 

 

    공식적인 개발일지는 전부 보고드렸습니다만, 그럼에도 불구하고 현재 상황을 기록하고 싶은 점이 있어 사족을 붙입니다. 대주제는 호스트와 클라이언트에서 플레이어의 역할을 어떻게 구분하는가입니다. 네트워크 개발 돌입 처음에는 모든 플레이어가 완벽히 동일한 객체였습니다. 

 

모든 캐릭터 오브젝트의 계층구조

 

    그렇게 잘 작동하는 것을 확인한 후, Owner가 아닌 캐릭터 오브젝트들에 필요 없는 기능들을 제거하기로 했습니다. 예를 들어 카메라 오브젝트와 상호작용 가능한 도구들에 외곽선이 표시되는 기능등들을 제거했습니다. 결국 서버와 클라이언트 모두 Owner가 아닌 캐릭터 오브젝트들을 비주얼적인 기능만 가지게 만들었습니다.

Owner의 유무에 따라 구별된 오브젝트들의 계층구조

 

    하지만 이 구조는 문제가 있었습니다. 그 문제는 서버임에도 오너가 아닌 오브젝트들은 기능적인 부분을 전혀 가지고 있지 않았기 때문에 습득한 오브젝트를 Hold Anchor에 따라 장착하게 한듯한 포지션 설정을 할 수가 없었기 때문입니다. 즉, 실제 게임 기능을 구현해줘야할 서버가 함수를 보유한 오브젝트를 환경내에 보유하지 않았습니다. 따라서 서버 내에서 실행해야하는 게임 규칙을 서버 내에서 실행할 수 없었습니다. 습득한 볼링공을 HoldAnchor위치에 고정시키는 작업을 서버 내에서 실행하기 위해서 다음과 같은 계층구조를 가지도록 변경했습니다.

Holding 기능의 필요성으로 변경된 계층구조

 

   결과적으로 첫 영상과 같은 기능을 구현할 수 있었습니다. 멀티플레이기능을 처음 구현해보지만 이런저런 시행착오들을 거치며 개발 중입니다. "서버는 모든 게임 규칙의 책임을 지고, 클라이언트들은 결과를 복제한다."는 규칙에 따라 오브젝트의 차이를 [오너인지, 오너가 아닌지]에서 [호스트인지, 아닌지]로 구분하는 법도 고민중이고, 부자연스러운 볼링공 문제를 해결하기 위해 필요한 기능들은 어디에 추가해야할지를 고민중입니다. 이러한 점들을 계속 고민해가며, 완벽하진 않더라도 납득할만한 멀티플레이환경을 구축하기 위해 계속 노력해보겠습니다. 감사합니다.

댓글

이 블로그의 인기 게시물

12/24/2025 개발일지

12/13/2025 개발일지

1/14/2026 개발일지