StackCareersEventRECRUITポケコロツインのアセット破損対策について2023年5月16日お疲れ様です。ポケコロツインクライアントエンジニアのSです。今回はUnityアセットの管理周りについて書きたいと思います。(本記事はAdressableを使用しないことを想定しています)アセット破損状態チェックアセットバンドルのファイルサイズが大きい場合、ネットワーク環境によって途中でダウンロードが停止することがあります。そのネットワーク環境の影響で、ファイルが破損する可能性があります。完全に破損ファイルになる1の場合はロードしてもクラッシュにならないですが、表示面だけはおかしくなります。2のケースでは、AssetBundleのLoadFromFileAsyncを使用し、Try-Catchの中に入れてもアプリがクラッシュしてしまいます。どのような対策にしましたか?まずは、アセットロード前にアセットが破損するかどうかチェックを入れてみました。AssetBundleの状態チェックなどのAPIがないため、ロードせずにアセットが破損するかどうかのチェックができなさそうです。LoadFromFileAsyncなどにCRCという値を渡せばファイルが保存されるかどうかのチェックができるようになります。そのLoadFromFileAsyncをTry-catchの間に入れると、catchでファイルがnullか等をチェックする事が可能となるため、色々対策できるようになります。一度ファイルをダウンロードし直すなど。Check)というものです。要するに、誤り検出符号の一種ということです。CRCの値は、アセットバンドルをビルドしたときにBuildPipeline.GetCRCForAssetBundleという関数から取得できます。ファイルをロードする際にそのCRCを用いることで、アセット破損の状況を感知することができますので、ぜひ試してみてください。アセットファイルの検知そもそも、1つのアセットバンドルのファイルサイズは大きくしたくないですね。いうことで、今回はS3にアップされたファイルのサイズを感知し、一定のサイズを超えるファイルがアップロードされたときにSlackに通知する仕組みを作ってみたいと思います。今回は、S3のLambda機能を使ってみました。新しいLambda関数を作りましょう作成後、トリガーを設定します。こんな感じで設定しました。バケットのなかでも特にこのフォルダーだけ!とかありましたら指定します。上記のように設定すれば、「Test/TestFolder2」にファイルがアップされるたびにLambdaの関数が呼ばれるようになります。関数のセットアップが終われば、関数の部分を見ていきましょう。アップされたファイルサイズを取得する方法について書きます。デフォルトの関数で下記のようなものが用意されるかと思います。{};次に、event.Recordsでobjectのサイズを取得します。下記のコードはファイルサイズが5MB以上かどうかチェックするコードです。});};そして、Slackに追加する方法ですが、まずは希望のチャンネルにWebhookというアプリを追加する必要があります。webhookを設定後、APIのURLが発行されると思いますので、そのリンクを使って希望のSlackチャンネルにメッセージを送信します。});};上記のコードで5MB以上のファイルが特定のバケットにアップされたら通知がきます。Slackの絵文字などいろいろメッセージをカスタマイズできますので是非試してみてください。1つのファイルのサイズをできるだけ小さくするということです。ココネでは一緒に働く仲間を募集中です。ご興味のある方は、ぜひこちらの採用特設サイトをご覧ください。22Category技術TagAsset管理Unity一緒に働くエンジニアを募集していますココネのエンジニア採用はこちら感性をカタチに。株式会社%d人のブロガーが「いいね」をつけました。