【unity】AddressablesとAWSのS3+CloudFrontを使用してサーバからアセットをダウンロードできるようにする その2

続きでunity側でアセットをビルドそれをS3にアップロードしてCloudFrontのURLからダウンロードしてみます。

unityでAddressablesの設定

最初からサーバからダウンロードするための設定にする。Addressablesのインストールなどは省いて設定についてのメモ

Profiles

  • サーバからにするため「Custom」
  • リモートのロードパスをAWS CloudFrontのURLにするここは自分で設定したものにする

Group

  • Profileで設定したパスにするために「custom」「Remote」にする
  • せっかくなのでグループ名は「Server」にしている。

ビルド

とりあえずエディターでダウンロードして確認するための設定にしてビルドする。

適当に生成した猫の絵をビルドする

エディターでもダウンロード確認するために変更

ビルドする

S3にアップロード

Unity側で使用する

確認のためにこんな感じで読み込ませるようにしてみた。

using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.UI;

public class AddressablesS3CroudFront : MonoBehaviour
{
    [SerializeField] private RawImage m_RawImage;
    // Start is called before the first frame update
    async void Start()
    {
        var tex2D = await Addressables.LoadAssetAsync<Texture2D>("Assets/Scenes/AddressablesS3CroudFront/cat.png").Task;
        m_RawImage.texture = tex2D;
    }

    // Update is called once per frame
    void Update()
    {

    }
}

動作確認

エディターで実行してうまく読み込めるようになりました。

エラーが出る場合

RemoteProviderException : Unable to load asset bundle from : https://d35oy13rf60ifb.cloudfront.net/server_assets_all_d854368f257a0d732b7d1b5f8e522f68.bundle
UnityWebRequest result : ProtocolError : HTTP/1.1 403 Forbidden
ResponseCode : 403, Method : GET

このようなエラーが出る場合があります、この場合はs3のバケットポリシーに「s3:GetObject」を許可する必要があるかもしれません。パブリックアクセスを許可していてもポリシーで許可をしないといけないかもしれません。

  • Effect:Allow
  • Action:s3:GetObject

とりあえず、オブジェクト取得を許可する

おわりに

初めてながらサーバからアセットをダウンロードすることができました、商用アプリではセキュリティなど考えないといけないと思いますが、個人製作でサーバからダウンロードできるようになるとテンションが上がります。

こちらのリポジトリーにサンプルのシーンを入れています。

ちなみにs3やCloudFrontは削除しているので自身が設定したURLでお試しください。

コメント