Web Player Streaming

Desktop

웹 플레이어 스트리밍은 엔드 유저에게 멋진 웹 게임 체험을 제공하는데 대단히 중요합니다. 웹 게임의 아이디어는 플레이어를 진행 바를 보며 기다리게 하기 보다는 최대한 신속하게 게임을 시작할 수 있게 하고 사용자의 콘텐츠를 거의 즉시 볼 수 있게 해 주는 데 있습니다. 이것은 아주 가능한 이야기이며, 이제부터 그 방법을 설명 하겠습니다.

포탈에 조율하기(Tuning for Portals)

이 섹션에서는 게임 포탈에 출시하는 것에 초점을 맞추겠습니다. 스트리밍은 모든 콘텐츠에 유용하며 이는 다른 많은 상황에도 적용될 수 있습니다. 온라인 게임 포탈에서 플레이어는 1MB 정도의 데이터만 다운 받으면 어떤 형태의 게임이 시작 하리라고 예상을 합니다. 이런 형태의 게임을 제공하지 않으면 포탈에서 사용자의 게임을 받아 줄 가능성은 매우 희박합니다. 플레이어의 입장에서는 게임이 빨리 시작하기를 원합니다. 아니면 플레이어는 시간을 낭비하고 창을 닫을 가능성도 있습니다. 128킬로 비트의 케이블 접속에서 사용자는 초당 16KB 혹은 분당 1MB의 데이터를 다운받을 수 있습니다. 이것은 온라인 포탈이 타깃으로 하는 낮은 사양의 대역폭입니다. 이 게임은 아래와 같은 스트림에서 설정 될 경우 최적이 될 것입니다:

  1. 50KB(4 초)로 로고와 메뉴 디스플레이에
  2. KB로 사용자가 작은 연습 레벨의 게임을 하거나 혹은 메뉴에서 뭔가 재미있는 상호작용을 할 수 있게 해 줍니다(20초)
  3. 800 KB(50초)로 사용하여 초기의 작은 레벨의 게임을 하게 해 줍니다(50초)
  4. 1-5 MB 이내에 전체 게임을 다운 로드 받을 수 있게 해 줍니다(1~5분)

항상 기억해야 할 중요한 포인트는 낮은 접속 속도에서 기다리는 플레이어 입니다. 플레이어를 절대로 기다리게 하지 마십시오.

이제, 사용자의 웹 플레이어가 현재 10MB이라도 실망하지 마십시오. 이를 최적화 하는 것은 어려운 일처럼 보이겠지만 조금만 노력을 기울이면 사용자의 게임을 이런 방법으로 구성하는 작업은 일반적으로 아주 쉽게 이루어 질 수 있습니다. 위의 각 단계를 일종의 개별 장면(scene)으로 생각해 보십시오. 사용자가 게임을 만들었다면, 이미 어려운 부분은 완료를 한 것입니다. 일부 장면을 이러한 로딩 개념으로 재구성 하는 것은 이에 비교하면 식은 죽 먹기에 해당 합니다!

콘솔 로그를 열면 (Console window(Desktop Platforms)안에 Open Editor Log 버튼; 메뉴 OSX안에 Help → Open Editor console log), 각 개별 장면 파일의 크기를 볼 수 있습니다:

***Player size statistics***
Level 0 'Main Menu' uses 95.0 KB compressed.
Level 1 'Character Builder' uses 111.5 KB compressed.
Level 2 'Level 1' uses 592.0 KB compressed.
Level 3 'Level 2' uses 2.2 MB compressed.
Level 4 'Level 3' uses 2.3 MB compressed.
Total compressed size 5.3 MB. Total decompressed size 9.9 MB.

게임은 좀 더 최적화를 실행 할 수 있습니다! 더 자세한 정보를 보려면reducing file size page을 참조하십시오.

가장 중요 단계들

#메뉴를 우선 로딩 하십시오. 동영상화 된 메뉴를 보여주는 것도 시간이 지나는 것을 인식하지 못하게 하는 좋은 방법이므로 다운 로딩이 더 진행 될 수 있게 해 줍니다.

  1. 초기 레벨을 짧게 하고 에셋을 많이 사용하지 마십시오. 이렇게 하면, 초기 레벨이 재빨리 로딩 되게 할 수 있고, 플레이어가 이 게임이 1,2분 집중하는 동안 백그라운드에서 모든 에셋의 다운로드를 완료할 수 있습니다. 왜 연습 레벨의 게임을 두어 사용자가 게임 컨트롤을 배우게 하지 않느냐고요? 고해상도의 텍스처나 오브젝트를 로딩하거나 모든 적들이 초기레벨에 있을 이유가 없습니다. 가장 폴리의 수가 (poly-count)가 낮은 것을 사용하십시오. 그렇다 해도 사용자는 웹 플레이어의 입장을 항상 염두에 두고 사용자 게임을 디자인 하여야 한다는 것을 의미합니다.

#게임 초기에 모든 음악이 필요할 이유가 없습니다. 음악을 외부에 두고WWW 클래스를 통해 로딩하시기 바랍니다. 유니티는 고품질의 codec, Ogg Vorbis의 오디오를 압축합니다. 그러나 압축이 되었을 때에도, 오디오는 많은 공간을 차지하고, 사용자가 3MB 내에 맞추어야 할 경우 5분 분량의 음악이 있다면 이 세상 어떠한 압축 기술도 사용자를 도와 줄 수가 없습니다. 모종의 희생이 필요합니다. 짧은 트랙의 음악을 룹으로 반복하며 추가로 음악을 다운 받을 수 있습니다. 플레이가 첫 레벨에 접속 했을 때 추가 음악을 로딩하십시오.

  1. 해당 들여오기 설정(Import Settings)을 사용하여 사용자의 텍스처를 최적화 하십시오. 음악을 외부화 하고 나면, 텍스처가 게임의 90% 이상을 손쉽게 차지하게 됩니다. 일반적인 텍스처 사이즈는 웹 배치에는 너무 거대합니다. 작은 브라우저 윈도우에서는 경우에 따라서는 대형 텍스처라도 시각적 만족을 전혀 추가해 주지 못합니다. 사용자의 텍스처 사이즈가 필요한 만큼만 커져야 하며 (여기서 더 희생을 준비하여야 합니다). 텍스처 해상도를 반감하면 실제 텍스처 사이즈는 4분의 1이 됩니다. 그리고 물론 모든 텍스처는 DXT로 압축이 되어야 합니다.

#일반적으로 사용자 웹 플레이어의 크기를 줄이십시오. 유니티가 파일 사이즈를 최적화 하는데 사용할 수 있는 유틸리티 프로그램에 대하여 설명하는 매뉴얼 페이지가 here에 있습니다. 비록 유니티가 최첨단의 LZMA-기반 압축기술을 사용하여 게임 데이터를 보통 비압축 데이터의 반에서 1/3의 사이까지 압축해 주지만, 사용자는 할 수 있는 모든 것을 시도할 필요가 있습니다.

  1. T Resources.Load의 사용을 피하십시오. Resources.Load는 한편으로는 무척 편리할 수 있지만, 사용자가 Resources.Load을 사용하면 유니티가 언제 그것들이 처음 쓰일 지를 주문할 수 없을 것입니다. 왜냐하면 아무 스크립트나 그 Resource를 로딩하려고 시도할 수 있기 때문입니다. 사용자는 어떤 레벨에서 First Streamed Level With Resources 속성을 사용하여 Edit→Project Settings→Player에서 Resources.Load을 통하여 로딩될 수 있는 모든 에셋이 포함 될 지를 정할 수 있습니다. 사용자는 Resources.Load 에셋을 가능한 늦게 사용하거나 아주 사용을 하지 않아야 합니다.

스트리밍 웹 플레이어의 발행

유니티에서 스트리밍은 레벨을 기반으로 하고, 이것을 설정하는 손쉬운 작업 흐름이 있습니다. 내부적으로는, 유니티가 에셋을 추적하고 최적의 압축 데이터 파일로 정리하고, 그것을 사용하는 초기 장면(scene)에 배열하는 등의 굳은 일을 다 수행합니다. 사용자는 단순히 빌드설정(Build Settings)의 첫 레벨이 가능한 적은 수의 에셋을 사용하게만 하면 됩니다. 이것은 자연스럽게 "menu level"이 되지만 최상의 웹 체험을 위해서는 사용자는 첫 번째 실제 게임 레벨에 플레이어가 하는 게임이 작아야 함을 꼭 기억하여야 합니다.

유니티에서 스트리밍을 사용하려면 빌드설정(Build Settings)에서 Web Player Streamed을 선택하십시오. 그러면 해당 콘텐츠는 그 초기 레벨에 사용되어야 하는 모든 에셋이 로딩되자 마자 자동으로 실행 됩니다. 그 메뉴 레벨을 50-100 KB 정도 내로 유지하십시오. 해당 스트림은 가능한 한 빨리 로딩하려고 하고 그 자리에서 바로 압축해제 됩니다. 사용자가 빌드 동안/후에 Console을 보면 그 크기를 알 수 있습니다.

사용자는 레벨 별로 스트림의 진행을 질의할 수 있으며, 한 레벨이 사용 가능해지면 로딩이 가능해 집니다. 진행 바를 디스플레이 하려면GetStreamProgressForLevel 사용하고, 모든 데이터가 사용 가능하여 특정 레벨이 로딩할 수 있는지 확인하려면CanStreamedLevelBeLoaded을 사용하십시오.

이런 형태의 스트리밍은 물론 직선형이며, 대부분의 경우 게임이 작동하는 방식과 일치합니다. 때로는 그것만으로는 충분하지 않습니다. 그러므로 유니티는 WWW 클래스를 사용하여 .unity3d file 하나를 수동으로 로딩 할 수 있는 API 들을 사용자에게 제공합니다. 비디오와 오디오도 역시 스트리밍 될 수 있으며, 해당 무비가 먼저 다운로드 되지 않고도 거의 즉시 재생될 수 있습니다. 마지막으로 테스처들도WWW 클래스를 통하여 쉽게 다운 받을 수 있고, 사용자 게임에서 필요한 여타의 모든 텍스트나 바이너리 데이터의 경우도 그러합니다.

역링크