Web Player テンプレートの使用
Webplayer リリースチャネル

Web Player のストリーミング

Web Player Streaming は、 Web 上での素晴らしいゲーム体験をエンドユーザーに提供するために重要です。プログレスバーが伸びるまで待たせる事なく、ユーザーがほとんど瞬間的にコンテンツを確認して、可能な限り早くゲームを開始できるようにする、というのがその考えの根底にあります。これは、容易に達成できるので、その実現方法について説明していきます。

ポータルのための調整

本項では、主にオンラインゲームポータルのパブリッシュについて説明します。ストリーミングはあらゆる種類のコンテンツに便利で、その他多くのシチュエーションに簡単に適用できます。

オンラインゲームポータルは、最大 1MB のデータがダウンロードされた後に、何らかゲームが実際プレイできるようになる事を期待します。これを達成できない場合、ポータルがコンテンツを受け入れる可能性は低くなります。ユーザーの視点から言うと、ゲームは素早く開始する必要があります。そうでないと、時間が無駄だと感じたユーザーはウィンドウを閉じてしまうかもしれません。

128 キロビットのケーブル接続では、毎秒 16KB または毎分 1MB をダウンロードできます。これはオンラインポイントが対象としている帯域幅の低い側です。

ゲームは以下の内容をストリームするよう、最適に設定されます。

  1. 50 KB は、ロゴとメニューを表示します (4 秒)
  2. 320 KB で、ユーザーにちょっとしたチュートリアルレベルを遊ばせるか、メニューでいくらか面白いインタラクションを行わせます (20 秒)
  3. 800 KB で、ユーザーに最初の小さいレベルを遊ばせます (50 秒)
  4. 1–5 MB 内でゲーム全体のダウンロードを終了します (1–5 分)

忘れてはならないキーポイントは、遅い接続環境にあるユーザーの待ち時間を基準に考える、ということです。絶対にプレイヤーを待たせてはいけません。

Web Player が現在、10MB でも慌てないでください。これを最適化するのは気が遠くなるように思えますが、極めて簡単にこの方法によりゲームを構築できます。上記の各手ステップは個別のシーンと考えてください。ゲームを作成したら、すでに難しい部分は終了しました。このローディングコンセプト周辺でシーンを構築するのは非常に簡単です。

ビルド後またはビルド中に、コンソールログを開くと (コンソールウィンドウ ( Desktop Platforms ) の Open Editor LogHelp -> Open Editor console log メニュー OSX )、個々のシーンファイルのサイズを確認できます。コンソールは以下の内容を表示します。


        * 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.


このゲームは、さらにもう少し最適化を使用できます! 詳細については、ファイルサイズの削減 を参照してください。

最も重要なステップ

  1. 最初にメニューをロードします。アニメート化されたロゴを表示することで、意識されることなく時間が経過し、ダウンロードをさらに進めることができます。

最初のレベルは短くし、多くのアセットを使用しないこと。このようにして、最初のレベルは素早くダウンロードでき、占有しているプレイヤーに 1,2 分プレイを続けさせることで、残っているアセットのすべてのダウンロードがバックグラウンドで完了するようにできます。ユーザーがゲームのコントロールを学ぶことができる程度のミニチュートリアルを用意してみてはどうでしょう。 ここでの高レステクスチャまたはオブジェクトのロード、最初のレベルですべての敵を配置する理由はありません。もっとも低いポリゴン数のものを使用します。そう、これは、Web Player でゲームをデザインする必要がある場合があるということです。

  1. ゲーム開始時にすべての音楽が利用できる理由はありません。音楽を外部に置き、WWW クラスを介してロードします。Unity は、高品質コーデック、Ogg Vorbis でオーディオを圧縮します。しかし、圧縮されても、オーディオは多くの容量を使用します。3MB に合わせる場合、5 分間の音楽の場合は、世界での圧縮はすべて時間を省きません。犠牲が必要です。さらに音楽がダウンロードされるまでループ再生できる非常に短いトラックをロードします。プレイヤーが最初のレベルでフックされた場合にのみより多くの音楽をロードします。

  2. インポート設定を使用してテクスチャを最適化します。音楽を外部に置いた後、テクスチャは簡単にゲームの 90% を使用します。通常のテクスチャのサイズは、Web での配備には大きすぎます。小さいブラウザーウィンドウ、大きいテクスチャは視覚的信頼性を増しません。必要な大きさしかないテクスチャを使用してください (ここでより多くの犠牲の準備ができました)。テクスチャ解像度を半分にすると、実際、テクスチャのサイズは 1/4 になります。当然、すべてのテクスチャは、DXT 圧縮する必要があります。

  3. 一般に Web Player のサイズを減らします。Unity が提供するファイルサイズの最適化のためのユーティリティ用のマニュアルページは、ファイルサイズの削減 です。Unity は、通常ゲームデータを圧縮されていないサイズの 1/2 から 1/3 の間に圧縮する最新の LZMA ベース圧縮を使用していますが、できることはすべて試す必要があります。

  4. Resources.Load を避けてみてください。Resources.Load は非常に便利ですが、Unity は、スクリプトがリソースをロードしようとするため、Resources.Load 使用時に、最初に使用されるタイミングでアセットを順序付けることはできません。「 `First Streamed Level With Resources 」プロパティーを使用して、Edit->Project Settings->Player で、Resources.Load を通じてロードできるすべてのアセットを含めるレベルを設定できます。明らかに、ゲームにできるだけ後で Resources.Load アセットを移動したいか、またはこの機能を使用したくないことでしょう。

ストリーミング Web Player のパブリッシュ

Unity でのストリーミングは、レベルベースで、これを設定するための簡単なワークフローがあります。内部では、Unity はアセットの追跡や圧縮データファイル内でのその最適な配置、使用する最初のシーンによる順序付けなどの汚い仕事をすべて行なっています。単純に、ビルド設定での最初のレベルが使用するアセットの数をできるだけ少なくする必要があります。これは、当然「メニューレベル」が目的ですが、よい Web 体験をのためには、プレイヤーがプレイしようとしている最初の実際のゲームレベルも小さくする必要があります。

Unity でストリーミングを使用するには、ビルド設定で Web Player Streamed を選択します。次に、最初のレベルによって使用されるすべてのアセットがロードされるとすぐに、コンテンツが自動で開始されます。メニューレベル を 50–100 KB ぐらいに維持してみてください。ストリームは可能な限り高速でロードし続けますが、一方でリアルタイムで解凍を行います。ビルド中/後にコンソールを見ると、どのくらいの大きさかが分かります。

レベル別にストリームの進捗を問い合わせることができ、レベルが利用可能になると、ロードできるようになります。進捗バーを表示するには、GetStreamProgressForLevel を使用し、特定のレベルをロードするのにすべてのデータが利用できるかをチェックするには、CanStreamedLevelBeLoaded を使用します。

このストリーミングの形式は当然線形で、これはほとんどの場合でのゲームがどのように機能するかに一致します。これでは不十分なことがあります。そのため、WWW クラスを使用して、.unity3d ファイルをロードできるよう、Unity では API も提供しています。ビデオやオーディオもストリーミングされ、動画を最初にダウンロードする必要なく、ほぼすぐに再生できます。最後に、テクスチャは、ゲームが依存しているかもしれないテクスチャまたはバイナリデータ同様、WWW クラスを介して簡単にダウンロードできます。

Web Player のストリーミング

ストリーミング Web Player により、シーン 0 がロードを終了するとすぐに、Web Player ゲームがプレイを開始できるようになります。10 のレベルのあるゲームの場合、レベル 1 のプレイを開始する前に、プレイヤーに待機させ、レベル 2 - 10 にすべてのアセットをダウンロードサせる意味はありません。ストリーミング Web Player のパブリッシュ時に、ダウンロードする必要のあるアセットが、表示される Scene ファイルの順に並べ替えられます。シーン 0 内のすべてのアセットのダウンロードが終了すると、Web Player はプレイを開始します。

簡単に言うと、ストリーミング Web Player により、プレイヤーはこれまでよりも速くゲームをプレイできます。

唯一心配すべきことは、ロードする前に、ロードしたい次のレベルのストリーミングが終了したか確認することです。

通常、非ストリームプレイヤーでは、次のコードを使用して、レベルをロードします。

Application.LoadLevel("levelName");


通常、ストリーミング Web Player では、最初にレベルのストリーミングが終了したかを確認する必要があります。これは、CanStreamedLevelBeLoaded() 関数を使用して行われます。これは次のように機能します。

var levelToLoad = 1;

function LoadNewLevel () {
    if (Application.CanStreamedLevelBeLoaded (levelToLoad)) {
        Application.LoadLevel (levelToLoad);
    }
}


ローディングバーやその他の表示に対して、プレイヤーにレベルのストリーミングの進捗を表示したい場合、GetStreamProgressForLevel() にアクセスして進捗を読み取ることができます。

オフライン WebPlayer の配置

Offline Deployment オプションが Web Player に対して有効になると、作成中、UnityObject.js ファイル (プレイヤーとホストページとを結びつけるのに使用されます) が、プレイヤーと平行して配置されます。これにより、ネットワークに接続していなくても、プレイヤーはローカルのスクリプトファイルで作業できます。通常、UnityObject.js は、最新バージョンが使用できる使用できるようにするため、Unity の Web サーバーからダウンロードされます。

Web Player テンプレートの使用
Webplayer リリースチャネル