온라인 게임 개발을 위해서는 처음부터 끝까지 네트워크를 다루어야 하고 SDK가 무엇을 제공하는지, API를 어떻게 호출하는지도 이해해야 합니다. 또한 자신이 만든 프로그램의 프로세스가 문제인지, 연결 SDK/API 설계의 문제인지, 게임 엔진의 문제인지, 아니면 프로그래밍 언어가 익숙하지 않아서 생기는 문제인지도 파악할 필요가 있습니다.
일반적으로 네트워크 개발할 때 네트워크 정보와 관련된 일부 디버깅 도구( Debug / Viewer / Log / Profile )가 필요합니다. 특히 Editor 또는 SDK에 내장된 도구가 필요하고 이로써 다른 소프트웨어를 설치하거나 시스템 환경의 너무 많은 소프트웨어 및 하드웨어 리소스를 소비할 필요가 없고 네트워크 디버깅 프로세스를 단순화하는데 좋습니다.
이를 위해 Photon Fusion SDK 자체에는 개발자가 다양한 온라인 게임 프로젝트에서 사용할 수 있는 툴이 내장되어 있고 Unity 에디터에서 Play로 실시간 네트워크 관련 상태 정보를 확인할 수 있을 뿐만 아니라 프로그램을 실행중 런타임 실행 중의 정보도 확인 가능합니다.
아직 Fusion SDK 개발자를 모르시는 경우 아래 링크를 참조하시기 바랍니다.
아래 내용은 다양한 방면에서 발생한 문제에 대한 해결 순서와 툴을 기록했습니다. 개발 중에 동일한 문제가 발생하면 참고하세요.
・・・
🙋 네트워크 접속 프로세스 또는 접속 시 문제를 판단 또는 디버깅하는 방법이 있나요?
(기본적인 접속 프로세스 로그 외에 참조할 접속 송신 데이터가 있나요?)
🙆Fusion SDK가 제공하는 DLL은 릴리스 버전과 디버깅 버전의 2가지 버전이 있습니다. 디폴트 설치에서는 릴리스 버전을 사용합니다. 이는 연결에 문제있는지의 상태를 보여주기 위해 필요한 컴파일 정보와 오류 정보를 제공하고, 빠른 실행과 파일 크기가 작다는 이점이 있습니다.
현재 네트워크 접속의 모든 상태 정보를 알고 싶을 경우 디버깅 모드로 전환할 수 있습니다. 디버깅 모드에서는 릴리스의 몇 배에 달하는 접속 상태 정보, 프로세스, 통계 등이 제공됩니다. 실행 속도는 느릴수 있지만 중점은 '디버깅'이기 때문에 퍼포먼스는 고려하지 않아도 됩니다.
Fusion SDK의 릴리스/디버깅 모드를 전환하는 방법은 다음과 같습니다.
Fusion->Toggle Debug Dlls 옵션을 메뉴에서 직접 찾아 눌러 실행합니다. 다음 그림을 참조하세요.
주의: 모드를 전환한 후 Unity의 일부 오래된 버전은 프로젝트를 닫았다가 다시 열어야 변경된 dll 링크를 다시 로드할 수 있습니다.
스위치 모드에 Toggle Debug Dlls를 누르면 콘솔 로그에 Fusion SDK에서 전송된 “Activated Fusion DBUG dlls” 메시지를 통해 전환이 완료되었음을 알 수 있습니다. 그리고 Debug Dll 모드에서 Release Dll 모드로 바꾸고 싶을 때 절차는 같고 콘솔로그에 ActivatedFusion RELEASE dlls라는 단어가 표시됩니다. 즉, Release Dll 모드로 변환되었습니다.
디버깅 모드로 전환한 후 Play 또는 실행 파일을 실행하면 콘솔 로그 창에서 자세한 연결, 데이터 전송, 이벤트 트리거, 시뮬레이션 프로세스 등의 데이터를 볼 수 있습니다..
🙋네트워크 접속환경을 시뮬레이션 할 수 있나요?
(예를 들어 ping이 150ms일때 게임 프로그램이 얼마나 안정적인지 테스트할 수 있나요? 또는 연결이 끊길 때 프로그램이 크래쉬 되는지 등)
🙆Debug Dll 모드에서 Fusion SDK에는 네트워크 상태 시뮬레이션 기능이 내장되어 있고 시뮬레이션하려는 네트워크 상태를 설정하여 특정 조건에서 게임이 계속 재생 가능/연결되어 있는지 테스트할 수 있습니다(잘 작동하는지 여부/ 얼마나 나쁜 네트워크 상태를 허용할 수 있는지 등).
사용법 : 다음과 같이 Network Project Config에서 Network Conditions를 펼친 후 Enabled를 체크합니다.
주의 : Network Project Config에 이 옵션이 표시되지 않으면 현재 DLL 모드가 릴리스 버전일 가능성이 높으므로 이전 질문을 참조하여 Fusion SDK를 Debug Dll 버전으로 전환하세요.
Delay (Latency) / Loss Chance / Additional Jitter / Additional Loss은 네트워크 프로그래밍에서 일반적으로 사용되는 전문적인 파라미터입니다. 필요에 따라 원하는 값을 설계할 수 있습니다. Fusion은 이 파라미터를 사용하여 네트워크 패킷을 일부 변경하여 시뮬레이션 합니다.
🙋유니티 에디터에서 여러 클라이언트를 실행할 수 있나요? 온라인으로 여러 클라이언트를 테스트하려면 어떻게 해야 할까요?
(예를 들어, 하나의 머신에서 호스트와 클라이언트를 동시에 테스트하고 싶을 때 테스트하기 위해서 여러개의 유니티 에디터를 열어야만 하나요? 이는 많은 시스템 리소스를 소비하며 컴퓨터가 다운될 수 있지 않아요?!)
🙆문제 없습니다. Fusion SDK는 같은 앱에서 여러 네트워크 피어를 실행할 수 있기 때문에 유니티 에디터를 열어 여러 네트워크 피어의 동작을 테스트할 수 있습니다. 순서는 다음과 같습니다.
1.Fusion 메뉴에서 Network Project Config를 클릭하면 Inspector에서 네트워크 프로젝트 구성 파일의 파라미터 설정을 확인할 수 있습니다.
2.설정 파일에서 Config 의 Peer Mode 가 Single 에서 Multiple로 변경된 후 Editor Play 이든 Build 에 의해 출력된 실행 파일이든지 여러 플레이어의 상황을 테스트하는데 사용할 수 있습니다.
싱글/멀티 모드 설정
Scene Settings -> Peer Mode는 나중에 Play/Build (테스트, 빌드) 중 실행 모드에 영향을 미치며 현재 다음과 같은 두 가지 옵션이 있습니다.
- Single : 하나의 프로그램 앱에서 하나의 연결 단자만 존재합니다(일반적인 기본 모드입니다).
- Multiple : 하나의 프로그램 앱에서 여러 개의 단자가 존재합니다(개발 및 테스트에 편리함).
이 방법( Multiple )은 하나의 App에서 여러 Fusion Runner를 실행할 수 있고 각 Runner는 서버 또는 호스트 또는 클라이언트로 존재할 수 있습니다. 여러 Runner를 실행할 경우 Runner 중 하나를 서버/호스트로 사용할 수 있고 다른 Runner는 클라이언트로 사용할 수 있습니다. 이로써 동일한 앱에서 여러 피어를 실행하는 상황을 달성할 수 있습니다. 예를 들면 다음과 같습니다.
- Server + Clients : 1개의 서버, 여러개 클라이언트
- Host + Clients: 1 호스트, 여러개 클라이언트
- Clients: 여러 클라이언트, 모두 클라이언트 신분
🙋 멀티 피어 모드에서 각 클라이언트의 디스플레이를 제어하거나 개별 입력 제어를 할 수 있나요?
(예를 들어, 호스트의 입력을 제어하고 싶지만 동시에 다른 클라이언트를 제어하고 싶지 않거나, 클라이언트를 제어하고 싶지만 다른 클라이언트가 내 키보드 입력을 수신하는 것을 원하지 않는 등..)
🙆♂️ 예, Fusion에는 각 피어(서버/호스트/클라이언트)의 표시를 개별적으로 제어하고 개별 플레이어 입력 컨트롤을 활성화 또는 비활성화하는 툴이 내장되어 있습니다.
방법은 아래와 같이 Fusion 메뉴에서 Windows -> Runner Visibility Controls를 선택하면 됩니다.
표시되는 [Runner Visibility Controls]창에서 호스트/클라이언트의 이름을 볼 수 있습니다.
각 행은 Fusion Runner이며 네트워크 실행 측 피어도 표시됩니다. 몇 가지 아이콘을 클릭하여 대응하는 기능을 활성화/비활성화 또는 장면 내의 오브젝트를 빠르게 선택할 수 있고 초기 기본값은 다음과 같습니다.
Unity Editor -> Play 실행, 1 호스트와 2 클라이언트 상황이 표시됩니다.
・피어 이름 (버튼) :
프로젝트 오브젝트 계층의 창에서 Peer가 위치한 Scene 개체를 빠르게 전환(선택)할 수 있습니다. 예를 들어, Host를 눌러 호스트를 나타내는 네트워크 오브젝트를 선택할 수 있습니다.
・눈 아이콘 :
화면에 해당 피어의 씬을 로드할 지 여부를 결정하여 표시합니다.
・컨트롤러 아이콘 :
피어가 플레이어의 입력 제어를 실행할 수 있는지 결정합니다.
예를 들어, 다음 그림에 나타내듯이 클라이언트 A의 화면만을 표시해 클라이언트 B를 제어하는 경우는 클라이언트 A의 눈 아이콘을 열어 클라이언트 B의 컨트롤러 아이콘을 활성화하면 됩니다.
클라이언트 A가 보는 화면을 제시하고 클라이언트 B 의 행동을 조작합니다.
댓글
댓글 0개
댓글을 남기려면 로그인하세요.