facebook twitter hatena line email

Unity/SpriteAtlas/Addressable

提供: 初心者エンジニアの簡易メモ
2024年11月12日 (火) 10:29時点におけるAdmin (トーク | 投稿記録)による版 (サンプルコード)

(差分) ←前の版 | 最新版 (差分) | 次の版→ (差分)
移動: 案内検索

SpriteAtlasファイルの設定

AllowRotationとTightPackingのチェックを外す。

SpriteAtlasファイルをAddressableへ

  1. SpriteAtlasファイルのAddressableにチェックを入れて、Addressableのパスを追加する
  2. SpriteAtlasファイルのIncludeInBuildを外す。(AddressableがRemote設定の場合のみ)

Addressableのパス例

Assets/SpriteAtlas/IconSpriteAtlas.spriteatlas

画像名例

favorite_18px

サンプルコード

SpriteAtlasの画像内のアイコンをAddressableで取ってきて、Imageに貼り付けるサンプルコード

using System.Collections;
using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.ResourceManagement.AsyncOperations;
using UnityEngine.U2D;
using UnityEngine.UI;

public class SpriteAtlasScene : MonoBehaviour
{
    AsyncOperationHandle<SpriteAtlas> handle;
    [SerializeField] Image image;

    IEnumerator Start()
    {
        yield return StartCoroutine(LoadSpriteAtlasIcon());
        yield return StartCoroutine(BindSprite());
    }

    IEnumerator LoadSpriteAtlasIcon()
    {
        handle = Addressables.LoadAssetAsync<SpriteAtlas>("Assets/SpriteAtlas/IconSpriteAtlas.spriteatlas");
        //await handle.Task;
        yield return handle;
        if (handle.Status == AsyncOperationStatus.Succeeded)
        {
            Debug.Log("success");
            // atlasAction.Invoke(handle.Result);
        }
    }
    IEnumerator BindSprite()
    {
        SpriteAtlas spriteAtlas = handle.Result;
        Debug.Log("spriteAtlas.name=" + spriteAtlas.name);
        if (spriteAtlas.name == "IconSpriteAtlas")
        {
            Sprite sprite = spriteAtlas.GetSprite("favorite_18px");
            image.sprite = sprite;
        }
        yield return null;
    }
}

参考

https://kondeneenen.com/spriteatlas_for_aas/