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

Addressable Asset Systemをベースとした社内用アセット基盤【CAGC2024】

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
Avatar for CyberAgent CyberAgent PRO
March 08, 2024
1.3k

Addressable Asset Systemをベースとした社内用アセット基盤【CAGC2024】

Addressable Asset System (以下、Addressables) をベースに開発した新しいアセット基盤について発表します。
これまで使用していた独自基盤からどういった経緯で新しい基盤を開発するに至ったのか、Addressablesをベースにするにあたって心がけたこと、追加した機能やバックエンド、更に利便性を向上させるサポートライブラリについて具体的に解説します。

https://cagc.cyberagent.co.jp/2024/session/index.html?id=Qy7sJgTV

Copyright © CyberAgent, Inc.

Avatar for CyberAgent

CyberAgent PRO

March 08, 2024
Tweet

More Decks by CyberAgent

Transcript

  1.  経緯 8 • 改修は続けているがコストは徐々に増大 ◦ Addressable Asset Systemの登場に伴って取り残されやすくなった • 高い自由度の反面、習熟が必要でトラブルもたびたび起きていた

    • ビルドフローやセキュリティ面など利用者側の追加実装が必須だった  ▶ Unityの更新に追随しやすく、利用しやすく、ワークフローをカバー    した新しい基盤『Addressable OCTO』を作ろう
  2.  Addressable Asset Systemとは? 10 • 任意の文字列 (アドレス) を割り当ててアセットをロードできる • ResourcesとAssetBundle、LocalとRemoteを透過的に扱うことができる

    • 依存関係解決、参照カウント管理を自動で行ってくれる • ローカルホスティング機能、アセットバンドルをビルドせずロードする機能など開発向 け機能がある  ▶ 独自実装で頑張っていたことを大抵やってくれる公式パッケージ
  3.  方針案 13   ① Addressable Asset Systemの外付け拡張  パッケージが拡張に対してあまり開いていなかった   ② Addressable Asset

    System自体を改造  Unityの更新を取り込みやすいように partial キーワードを活用して改造する public static partial class Addressables { // 公式のコード } public static partial class Addressables { // 独自の追加コード } Addressables.cs Addressables_Octo.cs
  4.  暗号化 25   Addressable Asset Systemはアセットもカタログも暗号化非対応   IPタイトルの増加でセキュリティの重要度も向上 【要望】 •

    アセットの抽出、解析対策がしたい • 複数のロジックを使い分けることで強度を上げたい • 利用者側でロジックを追加したい
  5.  暗号化 27   AssetBundle.LoadFromStreamを使ってロードしながら復号   LoadFromFile: 暗号化していると使えない   LoadFromMemory: 復号したバイト列を渡せば使えるがメモリ消費大       ⚠

    Streamにはいくつかの制約があり、特にCanSeek=trueが求められる。 C#標準のCryptoStreamはCanSeek=falseなので ランダムアクセス可能な暗号ロジックおよび、それを使用するStreamの実装が必要。
  6.  Address Definition Generator 39   アセットアドレスを定数や関数としてコード生成する misc public const string misc

    = “misc”; bg_0001 bg_0002 bg_0003 public static string GetBackground(string backgroundId) { return $”bg_{backgroundId}”; }