VRChat 非公式日本語ドキュメント

画像読み込みの例

Udonを使用すると、インターネット上の画像を読み込み、UI要素やワールド内のオブジェクトのテクスチャとして表示することができます。以下のサンプルワールドでは、このシステムの仕組みと、GitHubを使って画像やキャプションをホストする方法を解説しています。

サンプルワールド

サンプルプロジェクトをダウンロードするか、GitHubリポジトリにアクセスしてクローンを作成してください。

このシーンには、画像と対応するキャプションを自動的に切り替えて表示するフォトフレームが含まれています。画像とキャプションはどちらもGitHub Pages上で無料でホストされており、上記のGitHubリポジトリにも含まれています。

シーンファイル: Assets/_Project/Gallery

ワールドでPrefabを使用する

このPrefabを使用するには、プロジェクトに追加し、画像とキャプションのURLを設定する必要があります。

このリポジトリは、無料ホスティングのために GitHub Pages に公開する設定になっています。画像やキャプションはどこにホストしても構いませんが、無料で設定が簡単であり、画像やキャプションをワールドと同じリポジトリで管理できるため、GitHub Pagesの使用を推奨します。別の場所でホストする場合は、ステップ4に進んでください。

  1. サンプルリポジトリをFork して、自身のGitHubアカウントにコピーを作成します。

  2. 「Web」ディレクトリ内の画像とキャプションを編集します。index.html ページはブラウザ上で画像とキャプションをテストするためのサンプルですので、無視または削除して構いません。Prefabを使いやすくするために、ファイル名を 1.jpg のままにするか、あるいはリネームしてPrefab側のURLを更新してください。

tip

「Web」ディレクトリ内のファイルを編集すると、Webサイトが再公開されます。ファイル名が同じ(画像が 1.jpg, 2.jpg など)であれば、ワールド内のURLは自動的に新しく公開されたファイルを参照します。再公開は 同梱されているGitHub Action を通じて自動的に行われます。

  1. リポジトリを自分のコンピュータにクローンします。

  2. Creator Companion を使用して、プロジェクトにSDK 3.2.3以降、ClientSim、および UdonSharp が導入されていることを確認してください。

  3. Prefab Unitypackage をプロジェクトにインポートします。

  4. SlideshowFrame プレハブをシーンにドラッグ&ドロップします。

  5. シーン内の SlideshowFrame を選択し、Inspectorを表示します。

  6. SlideshowFrame コンポーネントで、Image Urls 配列のサイズを読み込みたい画像の数に合わせ、URLを実際の画像URLに更新します。GitHub Pagesを使用している場合、URLの形式は https://<your-github-username>.github.io/<your-repo-name>/1.jpg となります。

  7. String Url をキャプション用URLに合わせて更新します。GitHub Pagesを使用している場合、URLの形式は https://<your-github-username>.github.io/<your-repo-name>/captions.csv となります。

動作テスト

GitHubを使用して画像とキャプションをホストしている場合は、変更をコミットしてGitHubにプッシュしてください。これによりGitHub Actionが実行され、ファイルがGitHub Pagesに公開されます。

  1. UnityでPlay Modeに入ります。
  2. 画像とキャプションが自動的に読み込まれるはずです。読み込まれない場合は、Consoleにエラーが出ていないか確認してください。
  3. Build and Test を実行し、VRChat上でも正しく動作することを確認します。その際、設定で「Untrusted URLs」を有効にする必要がある場合があります。

重要なGameObject

シーン内で確認すべき最も重要なオブジェクトは、TheFrameSlideshowFrame です。

image

TheFrame

TheFrameは、いくつかの重要な要素を持つGameObjectです。

SlideshowFrame

SlideshowFrame UdonBehaviour には、Webサーバーから画像やキャプションをダウンロードするためのすべてのロジックが含まれています。

image

これには以下の公開変数が含まれます。

このスクリプトの基本的なロジックの流れは以下の通りです。

画像ダウンローダーの作成

ImageDownload スクリプトを使用した画像のダウンロード

SDKには、簡単に画像をダウンロードするためのスクリプトが含まれています。

  1. シーン内に新しい GameObject を作成します。
  2. UdonBehaviour コンポーネントを追加します。
  3. プログラムソースとして ImageDownload を選択します。
  4. ダウンロードしたテクスチャを適用するマテリアルを選択します。
  5. (任意)TextureInfo をカスタマイズして、ダウンロードされるテクスチャの設定を変更します。

VRCImageDownloader 用の独自スクリプトの作成

独自の Udon Graph スクリプトで VRCImageDownloader を使用できます。

  1. Constructor ノードを使用して、新しい VRCImageDownloader オブジェクトを作成します。
  2. 新しく作成した VRCImageDownloader を変数として保存します。(これは必須です。)
  3. VRCImageDownloader インスタンスで DownloadImage 関数を実行します。
  4. (任意)OnImageLoadSuccess または OnImageLoadError イベントが発生するまで待機します。

スクリプトの基本的なロジックフローは以下の通りです。

  1. Start 時、すべての画像をダウンロードするために再利用する VRCImageDownloader を構築します。テクスチャを保持しておくために、これらを維持することが重要です。
// It's important to store the VRCImageDownloader as a variable, to stop it from being garbage collected!
_imageDownloader = new VRCImageDownloader();
  1. String Url からキャプションや文字列をダウンロードします。

文字列のダウンロードに成功したら、行ごとに分割して個別の文字列にし、それらを _captions 配列に保存します。ダウンロードに失敗した場合は、エラーメッセージをログに出力します。

An example of how to use image loading in the Udon Graph. The Udon Graph can't use newline characters directly, so an integer conversion to a character is used instead.

  1. 次の画像を読み込みます。_loadedIndex をインクリメントして現在の位置を把握し、先ほど保存したダウンローダーで DownloadImage() を呼び出します。

画像のダウンロードに成功したら、その参照を保存し、Renderer に読み込みます。失敗した場合は、エラーメッセージをログに出力します。

  1. SlideDurationSeconds だけ遅延させて、次の画像を読み込む関数を再度呼び出します。_loadedIndex は各読み込み呼び出し中にインクリメントされ、配列内の最後のURLに到達すると最初に戻ります。

各画像に2回目以降にアクセスした際は、初回ダウンロードに失敗していない限り、新しく読み込むのではなく、保存された Texture2D の参照から表示されます。

ソースコード

SlideshowFrame.cs on GitHub で完全なソースコードを確認してください。

既知の問題

Udon

ドメインやファイルの制限を含む、Image Loading システムの詳細については、メインの Image Loading ドキュメントページを参照してください。

最終更新: