Upgrade to Pro — share decks privately, control downloads, hide ads and more …

全社総会における「REALITY Spaces」の活用と、Addressableを用いたコンテンツ配信技術について

gree_tech
October 13, 2023

全社総会における「REALITY Spaces」の活用と、Addressableを用いたコンテンツ配信技術について

GREE Tech Conference 2023で発表された資料です。
https://techcon.gree.jp/2023/session/TrackC-1

gree_tech

October 13, 2023
Tweet

More Decks by gree_tech

Other Decks in Technology

Transcript

  1. 横内 優作 自己紹介 • 経歴 ◦ 前職はモバイルゲームの開発エンジニア。 2020年グリーグループにジョイン。 ◦ toB向けの事業部でエンジニアとして

    UnityをはじめReactやCocosCreatorな どを利用した案件を複数担当。 ◦ 現在はエンジニアマネージャーと案件の開 発責任者を兼任。 2
  2. REALITY Spacesとは • XRcloud社の社内ソリューション ◦ 法人向けに空間の提供 • 1つのアプリで複数の空間にアクセス ◦ Win/Mac/Android/iOS

    • 空間内でのコミュニケーション ◦ テキストチャット/ボイスチャット /エモート • ライブ動画再生や画面共有機能など 6
  3. REALITY Spacesのシステム構成 • Unity ◦ クライアントアプリ ◦ リアルタイムサーバー ▪ GCE

    • Go ◦ APIサーバー ▪ CloudRun 8 前年の発表: メタバースにおけるリアルタイム通信入門
  4. クライアントアプリケーションの技術 • Unity ◦ リアルタイム通信全般 ▪ FishNet (OSS) ◦ ボイスチャット

    ▪ DissonanceVoiceChat (有料アセット) ◦ 動画再生 ▪ AVPro (有料アセット) ◦ コンテンツ配信 ▪ Addressable (Unity標準機能) 9
  5. Addressable Asset System とは “AssetBundleをより簡単に管理できる” • 動的なロード/アンロード ◦ アドレスによるアセットのロード ◦

    参照カウンタによるアンロード管理 • AssetBundleのビルド管理 ◦ Group/Label毎にパッキング • ロード方法の切替 ◦ Editorではビルドなしでsimulation ◦ リモートコンテンツとしての更新機能 Unity道場 より https://learning.unity3d.jp/2272/ 11
  6. 基本的なコンテンツ更新機能の利用法① • SettingsのRemote Catalogを有効化 ◦ アドレスとアセットのロードの場所を管理するカタロ グが更新可能になる • Groupの Build/LoadPathをRemoteに

    ◦ Can Change Post Releaseにすること • ProfileのRemoteLoadPathを 任意のサーバーのURLに変更する ◦ GCSとかであればパブリック公開に設定した bucketを指定し、そこにuploadすればOK https://storage.googleapis.com/(BUCKET_NAME)/(OBJECT_NAME) 12
  7. 基本的なコンテンツ更新機能の利用法② • まずはNew Buildを実行しBuildPathに出 力されたファイルをアップロードする ◦ RemoteLoadPathに対応するように置くこと • 実行ファイルをビルドして動作確認 •

    更新したいアセットを修正したらUpdate Buildを実行して再アップロード • 実行ファイルをビルドしないで起動して動作 確認 => 修正が反映される 13 BuildPath に出力されたフォルダを LoadPath のサーバーにアップロードする
  8. リリース/開発環境切替機能 環境ごとにProfileを切り替える • Profileは複数作成できる ◦ 左上のCreateから Profileを選択する ◦ それぞれのProfileでRemoteBuildPathと RemoteLoadPathを変更することで違う保存先とダウンロード先を指定できる

    • 最低3つは作成しておくのが吉 ◦ リリース環境と開発環境に加えて、安定板の開発環境を作成しておくとよい ▪ 後述の並行して別のルーム を作成するフローを考えた際、ベースになる開発環境が頻繁に 更新されると追従するのが難しい ▪ Prod / Stable / Devの3つを作成してして運用 15
  9. コンテンツ切替 機能 (1/3) Profileの切替だけの限界 • Profileの切替のみだとProfileの数しかコンテンツを切り替えられない ◦ 同時に複数のルーム作成を進行する場合、こまめなテストプレイがしにくい ▪ Stable/Dev環境にマージされるまで実機で検証ができない…

    • 開発ブランチ毎に違うコンテンツをビルドしてアップロード • 実行中にコンテンツのダウンロード先を切り替える 16  Prod環境  Stable環境  RoomA開発  RoomB開発 マージまで待つ? いちいちマージしないでもコンテ ンツビルドしたい
  10. ProfileのPATHの記法 前述の課題の解決のためコンテンツのダウンロード先を変更可能にしたい ⇒ Profileに記載したパスを柔軟に変更出来ればよい • [] でビルド時にStatic変数を埋め込む ◦ https://test.com/[HogeNameSpace.FugaClass.BooString]/ServerData/… のように記述すれば適用できる 初期設定でも使われているので見覚えがあるはず

    • {}で実行時にStatic変数を埋め込む ◦ []ではなく {}で囲んだ場合はアプリ実行時に変更できる ◦ Addressableの初期化後に変数を変更した場合は反映されないので注意 ▪ Addressable.Load** メソッドを使用しても自動で初期化されるので意図しない初期化に注 意する (Addressables.ResourceLocators.Count() が0以上になっているかどうかで初 期化が意図しないタイミングでしているかを調べておくと吉 ) 17
  11. コンテンツ切替 機能 (2/3) 切替をstatic変数を使うことで回避する • RemoteBuildPath には [] 内に記述してビルド時に解決する ◦

    Editor拡張でAddressableのビルド前にstatic変数に値を入れる ◦ 出力フォルダにそれぞれのブランチコンテンツのビルドが分かれて保存される ◦ ServerDataフォルダをそのままファイルサーバーにアップロードすれば OK   • RemoteLoadPath には {}内に記述実行時に解決する ◦ BuildPathで分けたフォルダを読み込めるように {}で記述する ◦ 実行時に変更できるので、デバッグコマンドで変更すれば読み替えられる • リリース環境でもABテストとかにも利用可能 18
  12. 別環境でのビルド&アップロード (1/3) • 複数のビルドマシンを使う場合や、故障などで移行することを考える必要 ◦ 故障したためUpdate Buildができずが配布できないとかがあってはいけない ◦ 別の環境でもUpdate Buildが引き継げるように最低限の情報をバージョン管理したい

           addressables_content_state.bin が鍵 • New Buildした際に生成されるこのファイルだけあれば良い ◦ BuildPathにあるコンテンツファイル自体はなくても Update Buildが作成可能 ◦ デフォルトだとAssets/AddressableAssetsDataフォルダに上書き保存してしまうので変更 ▪ 初期設定だと環境切替で Profileを変えると 前のを上書きして消してしまう ▪ ビルドしたコンテンツのフォルダにあれば Profile毎に保存されるので RemoteBuildPathに設定する 20
  13. 別環境でのビルド&アップロード (2/3) Updateビルドフロー 1. New Buildで生成されたaddressables_content_state.binファイルは バージョン管理などで保管する 2. UpdateBuildをする場合、binファイルがなければ(=New Build環境とは別の環

    境でビルドしている) 保管して置いたbinファイルを取得し、RemoteBuildPathで 指定したフォルダに移動する 3. Update Buildを実行する 4. 出力されたコンテンツをアップロードすればOK Group設定でBundleNamingModeをAppendHashToFileNameに しておくのがおススメ (変更があった場合hash値が変わるので、重複 しないファイルだけアップロードするとかがやり易い ) 21
  14. 今回の手法の総括 • Addressable Asset Systemはそのままでも工夫次第でぜんぜん使える • リリース環境のアセットに影響与えず開発環境の更新ができる • ブランチ切替機能で並行してルームの開発/確認ができる •

    ビルドサーバーの混雑を気にしないでローカル環境でビルドも可能 今後の課題 • 別プロジェクトのコンテンツカタログの読み込み ◦ リポジトリの肥大化を抑制する ◦ ルーム背景製作などを外部製作でできるように 23