【unity】windows環境でAWSのS3のような機能を持つminioをdockerのローカルで構築しaddressablesの機能を確認する その1

内容

一般的なモバイルゲームの場合

  • アプリ起動時アセットの更新があるかチェック
  • あった場合はダウンロード容量をダイアログで表示
  • OKが押されるとダウンロード
  • 特定のシーンでアセットバンドルをロード

といったフローがある。

addressablesの機能し実際に構築しようとするとサーバーが必要だったりするのでローカルにS3のような環境を用意し疑似的に通信を行うようにするしてみる。dockerminioを構築し実際にaddressablesでの処理を構築していく。

unity6を利用、docker、minioなどの基礎的な知識は省略

D:\unity_projects\unity\docker

内での作業を想定している

minioの構築

  • docker-compose.ymlを作成しdocker compose up -dで起動する。
# docker compose up -d
version: '3.9'
services:
    unity-minio:
        container_name: unity-minio-container
        image: minio/minio:latest
        ports:
            - "9000:9000"   # API ポート
            - "9001:9001"   # コンソール画面用ポート
        env_file:
            - .env
        command: server /data --console-address ":9001"
        volumes:
            - minio-data:/data
        restart: always
        healthcheck:
            test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
            interval: 1s
            timeout: 3s
            retries: 5
    minio-mc:
        image: minio/mc:latest
        depends_on:
            unity-minio:
                condition: service_healthy
        entrypoint: >
            /bin/sh -c "
            mc alias set $MC_ALIAS http://unity-minio:9000 $MINIO_ROOT_USER $MINIO_ROOT_PASSWORD;
            mc mb --ignore-existing $MC_ALIAS/$MINIO_BUCKET_NAME;
            mc anonymous set public $MC_ALIAS/$MINIO_BUCKET_NAME;
            "
        env_file:
            - .env
volumes:
  minio-data:

通常のままだとアクセスできないので匿名でも接続できるようにバケットをpublicにするようにしている。

.env(個人の環境で変更できる)

MINIO_ROOT_USER=minioadmin
MINIO_ROOT_PASSWORD=minioadmin
MC_ALIAS=local
MINIO_BUCKET_NAME=unity-local
  • 接続してdocker-compose.ymlで定義したminioadminで入る。

コンテナーが正しく起動できると

INFO: Formatting 1st pool, 1 set(s), 1 drives per set.

INFO: WARNING: Host local has more than 0 drives of set. A host failure will result in data becoming unavailable.

MinIO Object Storage Server

Copyright: 2015-2025 MinIO, Inc.

License: GNU AGPLv3 - https://www.gnu.org/licenses/agpl-3.0.html⁠

Version: RELEASE.2025-07-23T15-54-02Z (go1.24.5 linux/amd64)


API: http://172.18.0.2:9000⁠  http://127.0.0.1:9000⁠ 

WebUI: http://172.18.0.2:9001⁠ http://127.0.0.1:9001⁠  


Docs: https://docs.min.io⁠

WARN: Detected default credentials 'minioadmin:minioadmin', we recommend that you change these values with 'MINIO_ROOT_USER' and 'MINIO_ROOT_PASSWORD' environment variables
  • MINIO_ROOT_USER、MINIO_ROOT_PASSWORDで指定した値でログイン
http://127.0.0.1:9001/
  • unity-localのバケットが作成されており、アクセスがPUBLICになっている。

これでS3のような設定は完了、色々ファイルをアップしてaddressablesを利用してみる。

unityでの準備

  • addressablesのインストールをしておく
  • Groupを開くと初回の作成がされ、設定ファイルを作成しておく。

ローカルのテクスチャロード

  • イラスト屋から適当にダウンロードした画像をローカルで読み込む
  • とりあえず、PlayModeScriptはfastest(ビルドをしなくてよいため)
  • サンプルコード
using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.UI;

public class AddressableLoad : MonoBehaviour
{
    [SerializeField] private Image image;

    // Start is called once before the first execution of Update after the MonoBehaviour is created
    private async void Start()
    {
        var tex2D = await Addressables
            .LoadAssetAsync<Texture2D>("Assets/Scenes/Addressable/character_turtle_oyako_mago.png").Task;
        var sprite = Sprite.Create(
            tex2D,
            new Rect(0, 0, tex2D.width, tex2D.height),
            new Vector2(0.5f, 0.5f)
        );
        image.sprite = sprite;
    }

    // Update is called once per frame
    private void Update()
    {
    }
}
  • 実行すると読み込めていることを確認

サーバーから取得するためのAddressables Profilesの作成と切り替え設定

  • MinIO_RemoteのProfileを作成
  • LoadPathはdockerで構築したminIOのURL[BuildTarget]はビルドターゲットで自動で変わる
http://127.0.0.1:9000/unity-local/[BuildTarget]

おわり

一旦ローカルのダウンロードする準備はできたので次回本格的に更新データの容量、ダウンロード、アセットの利用を行ってみる。

コメント