続きで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でお試しください。
コメント