본 기사는 2025년 3월 14일에 공개된 From Development to Release: Nthusia’s Final Dev Diary 을 번역했습니다.
Team Nthusia와 함께하는 Dev Diaries의 마지막 항목에 오신 것을 환영합니다! 이 블로그에서는 Photon을 사용하는 경험과 개발 과정에서의 배운 점들을 공유합니다. 1부와 2부에서 이미 많은 단계를 다루었으며, 이제 이 샘플을 출시하기 전에 마지막 작업을 끝내고 있습니다.
아이템 기반의 통화 시스템으로 전환하여 인벤토리 관리가 어떻게 개선되었는지에 대해 이야기하고, 다른 아이템처럼 돈도 쉽게 드롭하고 공유할 수 있도록 했습니다. 또한, 대화 구현을 개선하여 모든 것을 하드코딩하지 않고도 더 쉽게 설정할 수 있게 만들었습니다. 여기에 컨트롤러 지원 추가, 릴리스 전 프로젝트 정리, 그리고 효과적인 문서화의 중요성에 대해서도 다루어 보겠습니다.
이로써 Team Nthusia와의 여정을 마무리하겠습니다. 이러한 통찰이 멀티플레이어 게임을 만드는 다른 개발자들에게 도움이 되길 바랍니다. 그럼 시작해 볼까요!
인벤토리 관리 및 개선
이런 게임에서는 아이템과 화폐를 공유하는 것이 가능한 한 쉬워야 합니다. 공유 세계 시뮬레이션에서는 거래와 선물이 필요합니다. 친구와 호박을 교환하거나 이웃에게 동전을 주는 모습을 상상해 보세요. 이런 경험이 더해지면 게임의 재미와 몰입감이 더욱 높아집니다.
돈을 화폐로 추가한 후, 이를 아이템처럼 다루는 것이 합리적이었습니다. 이렇게 하면 플레이어들이 다른 아이템과 마찬가지로 돈도 쉽게 공유할 수 있습니다. 이미 아이템을 드롭하고 공유할 수 있는 시스템이 있었기 때문에, 전환 과정이 간편했습니다. 덕분에 Nthusia는 돈을 처리하기 위한 별도의 시스템을 만들 필요가 없었고, 전체 프로세스도 더욱 간소화되었습니다.
아이템 기반의 화폐로 전환하면서, 플레이어는 여러 아이템을 한 번에 추가하거나 제거할 수 있게 되었습니다. 이를 지원하기 위해 Nthusia는 인벤토리 슬롯과 스택 용량을 고려했습니다. 장비 처리는 중간 장비 클래스를 도입함으로써 더욱 효율적으로 이루어졌습니다. 추상 속성을 직접 구현하는 대신, 타입 제네릭을 사용하여 암묵적으로 구현했습니다.
이를 통해 새로운 장비 도입 프로세스가 더욱 간소화됩니다.
사용자 친화적인 대화 구현
이제 친구와 아이템을 거래할 수 있으니, 실제 플레이어가 없이도 세상이 생동감 있게 느껴질 것입니다. 세상은 다양한 캐릭터들 덕분에 더욱 활기차게 느껴지고, NPC(비플레이어 캐릭터)는 그 분위기를 조성하는 데 중요한 역할을 합니다.
먼저, 대화 기능은 NPC 클래스에 구현되어야 합니다. DialogueHandler 컴포넌트는 제대로 작동하기 위해 대화 입력을 받아야 합니다. 이 입력은 인스펙터에서 적절한 응답 옵션과 함께 추가할 수 있습니다.
예전에는 모든 대화가 제대로 된 시스템을 설정하기 위해 하드코딩되어야 했습니다. 하지만 이제는 대화가 구조화되어 코드에서는 응답 동작만 처리하면 됩니다. 나머지 부분은 인스펙터에서 쉽게 관리할 수 있습니다.
- Dialogue: 말하는 사람의 이름과 모든 대화 내용을 배열(DialogueBlock[])에 저장합니다.
- DialogueBlock: 하나의 '페이지'에 해당하는 대화를 저장하고, 사용자가 선택할 수 있는 대화 선택지(DialogueOption[])도 포함합니다.
- DialogueOption: 사용자가 대화에 응답하여 선택할 수 있는 옵션을 나타냅니다. UI에 표시될 텍스트와 선택 시 호출될 델리게이트를 저장합니다.
- DialogueState: DialogueHandler의 내부 메모리로, 현재 활성화된 대화와 대화가 끝났을 때 수행할 액션을 저장합니다(샘플에서는 사용되지 않지만 일반적으로 유용합니다). 또한 대화 진행 상황과 타이밍을 추적하기 위한 변수를 포함하며, blockIndex, isLineEnded, timer를 저장합니다. 여기서 timer는 현재 대화 블록이 표시되기 시작한 게임 시간을 나타냅니다.
위에서 언급한 모든 구현 옵션은 대화의 '런타임' 표현과 이에 관련된 직렬화 가능한 객체를 나타냅니다. 인스펙터에서 대화를 설정하려면 사용자가 DialogueObject 필드나 속성을 정의해야 합니다. 이후 GetDialogue()를 호출하면 DialogueObject가 사용을 위한 런타임 버전을 생성합니다.
컨트롤러 지원하기
게임 샘플을 더욱 쉽게 접근할 수 있도록 Nthusia는 컨트롤러 지원을 추가했습니다. Fusion Karts와 Food Fusion처럼, 컨트롤러는 아날로그 스틱 게임플레이와 잘 어울립니다.
지원 추가 과정은 간단하고 쉬우며, Unity의 Input Manager에서 기본 입력을 확장하고 조정하여 쉽게 사용할 수 있습니다.
설정으로 이동하려면 Edit > Project Settings > Input Manager를 선택하면 됩니다.
다음은 게임에서 동작에 키 또는 조이스틱 버튼을 할당하는 예입니다. 지정된 이름은 'Inventory'이며, 주 버튼은 'q', 대체 버튼은 joystick button 3입니다.
다음 이미지는 'joystick button 3'가 Xbox 컨트롤러에서 Y 버튼이라는 것을 보여줍니다. 기본 Unity Input 시스템을 사용해 컨트롤을 설정할 때, 이런 참고 이미지는 매우 유용합니다!
Source: For Life Games
https://discussions.unity.com/t/xbox-one-controller-mapping-solved/187077
샘플에서 주의할 점이 하나 있습니다: 컨트롤러 구현은 걷거나 사물과 상호작용하는 기본 게임 플레이 루프에 잘 작동합니다. 하지만 인벤토리와 플레이어 커스터마이징 화면은 마우스와 키보드에 최적화되어 있습니다.
샘플에 제공된 InputBehaviour.cs 클래스에서는 위에서 언급한 입력을 문자열로 참조합니다. 그래서 'q'를 누르거나 joystick button 3을 누르면 Inventory 동작이 호출됩니다.
샘플 완성 및 출시
모든 준비가 끝났으니, 이제 샘플을 마무리하고 출시를 위한 다듬기를 할 시간입니다. 완료 전에 Nthusia는 프로젝트를 철저히 검토합니다. 사용하지 않는 코드를 정리하고, 필요 없는 자산을 제거하며, 남은 작업들을 정리하고 최종 테스트를 진행합니다. 또한 핵심 기능이 잘 문서화되어 있는지도 확인합니다.
모델, 텍스처, 애니메이션을 포함한 아트 에셋이 다듬어집니다. 이 중 일부는 임시용이거나 진행 중인 상태였습니다. 코드 내 문서와 별도의 문서가 잘 갖춰져 있으면 샘플을 유지 관리하는 사용자와 엔지니어 모두에게 도움이 됩니다.
Nthusia는 우리 개발자들과 꾸준히 소통을 유지했습니다. 덕분에 모든 것이 의도한 대로 잘 작동했습니다. 버그나 불명확한 문서, 엉성한 코드는 일반적인 상황이 아니라 예외적인 경우였습니다.
출시 전에 또 다른 중요한 단계는 다양한 플랫폼에서의 테스트입니다. 널리 배포할 때는 각 플랫폼의 기대치와 요구 사항을 고려해야 합니다. 에디터에서 잘 작동한다고 해서 빌드에서도 문제가 없다는 의미는 아닙니다.
멀티스레딩과 특정 셰이더 기법에서 발생하는 일반적인 문제는 플랫폼에 따라 지원이 달라질 수 있습니다. 모든 것이 정리되고 테스트가 완료되면, 프로젝트가 우리에게 인계됩니다.
샘플의 출시는 전적으로 저희 쪽에서 처리합니다. 그러나 모든 요구 사항이 충족되도록 개발자들과 협력합니다. 이를 통해 최상의 품질을 보장할 수 있습니다.
Nthusia가 전하는 조언과 팁
마지막으로, 게임 샘플이나 파트너십 개발에 관심 있는 분들을 위해 Nthusia가 조언을 나눌 수 있는 기회를 제공하고자 합니다.
"본인의 기술 수준이나 익숙함에 상관없이, 문서화는 여러분의 큰 도움이 됩니다! 샘플을 개발하면서 우리는 자주 Fusion 문서를 열어 두고 필요할 때마다 매뉴얼을 참고합니다.
이번 샘플에서는 NetworkTRSP를 사용자 정의로 구현했는데, 참조할 수 있는 문서가 많지 않았습니다. 하지만 우리는 코드 안으로 깊이 들어가는 것을 두려워하지 않았고, 활용할 수 있는 몇 가지 필수 메서드를 발견했습니다. 그 중에서는 NetworkTRSP의 정적 메서드인 Teleport와 Render가 기본 구현을 제공해 주었습니다. 이를 찾아낸 후에는 나머지 구현이 훨씬 수월해졌습니다. 우리의 사례에서는 이동 로직의 대부분이 NavMesh.SamplePosition에서 지원되었기 때문입니다.
즉, 하고 싶은 말은: 자신을 제한하지 말고 필요 없는 것을 새롭게 만들어내려 하지 말라는 것입니다. 여러분이 만들거나 시도하고 싶은 것의 대부분은 이미 존재합니다. 단지 점을 연결하고 열린 마음을 가지면 됩니다. Photons의 문서화는 수년간의 노력으로 만들어졌으며, 100개 이상의 샘플이 포함되어 있습니다. 따라서 문제를 해결할 방법이나 앞으로 나아갈 방향을 찾는 것은 시간과 인내가 필요할 뿐입니다."
이 개발 일지를 따라와 주신 모든 분들께 감사드립니다! 여러분에게 유용한 정보가 되었기를 바랍니다. Nthusia와 우리가 멀티플레이어 개발자를 어떻게 지원하는지 더 알아보시려면, 저희 Discord에 가입하시거나 직접 연락해 주세요.
성공적인 멀티플레이어 게임을 직접 만들 준비가 되셨나요? Photon의 Fusion과 Quantum을 사용하면 최첨단 멀티플레이어 기능을 프로젝트에 통합하는 것이 그 어느 때보다 쉬워졌습니다. 업계에서 가장 진보된 도구는 물론, 포괄적인 지원과 다운로드 가능한 샘플, 그리고 자세한 설명서까지, 시작하는 데 필요한 모든 것을 제공합니다.
오늘 첫 발을 내딛어 보세요! Fusion을 다운로드하거나 Quantum 을 다운로드하고 빌드를 시작해 보세요! 더 심층적인 도움이 필요하다면 Gaming Circle에 가입하시면 좋습니다. 여기서 개발자들과 직접 소통하며, 여정 내내 전문가의 안내를 받을 수 있습니다.
지금 여기서 멀티플레이어 성공 스토리가 시작됩니다!
Discord, YouTube, BlueSky, X, LinkedIn에서 저희와 함께하세요. 여러분이 어떤 작품을 만들지 기대하고 있습니다!
댓글
댓글 0개
댓글을 남기려면 로그인하세요.