版本: 2022.3
语言: 英语
分发方法
解决不同的精灵图集场景

延迟绑定

延迟绑定是在运行时通过 精灵图集API 加载或交换精灵图集的过程,精灵图集由几个较小的纹理组成的纹理。也称为纹理图集、图像精灵、精灵表或打包纹理。更多信息
查阅 术语表
。这在图集在启动期间不可用时是必要的,例如,当从 AssetBundles 加载资源时。您可以根据特定标准选择绑定不同的精灵图集,例如,加载高或低分辨率的精灵二维图形对象。如果您习惯在3D环境中工作,那么精灵实际上是标准的纹理,但在开发过程中会有一些特殊的技巧,用于组合和管理精灵纹理以提高效率和方便。更多信息
查阅 术语表
图集以提高性能和效率。

在您的项目中将精灵打包到精灵图集中后,您可以选择是否在发布的构建中包含精灵图集。要排除精灵图集,请清除精灵图集属性中的 包含在构建中。如果您不包含精灵图集,则在运行时不会加载精灵图集,并且引用打包到图集中的纹理的精灵将会空白,直到您使用延迟绑定来加载图集。请注意,这也意味着Unity编辑器不会自动加载精灵图集,并且当您进入播放模式时,您的精灵将会显示空白。

有关使用精灵图集和延迟绑定的不同方法和场景的附加示例可供从2D Common软件包的Samples标签下载。

使用SpriteAtlasManager.atlasRequested 加载精灵图集

atlasRequested是一个回调,它会告诉您当请求的精灵不在构建中时。您需要手动使用延迟绑定加载精灵图集,并将精灵发送到Unity编辑器。

以下示例演示了如何设置回调以使用延迟绑定从资产包加载精灵图集”。请注意,此脚本用于加载和绑定已存在于构建或项目中的精灵图集。

void OnEnable()
{
    SpriteAtlasManager.atlasRequested += RequestAtlas;
}
void OnDisable()
{
    SpriteAtlasManager.atlasRequested -= RequestAtlas;
}
void RequestAtlas(string tag, System.Action callback)
{
    if (spriteAtlas == null)
    {
        StartCoroutine(LoadFromStreammingAsset(callback));
    }
    else
    {
        callback(spriteAtlas);
    }
}

IEnumerator LoadFromStreammingAsset(System.Action callback)
{
    string path = Application.streamingAssetsPath + "/" + bundleName;
    print(path);
    AssetBundleCreateRequest bundleLoadRequest = AssetBundle.LoadFromFileAsync(Application.streamingAssetsPath + "/" + bundleName);
    yield return bundleLoadRequest;
    bundle = bundleLoadRequest.assetBundle;
    if (bundle == null)
    {
        Debug.Log("Failed to load AssetBundle!");
        yield break;
    }
    SpriteAtlas spriteAtlas = bundle.LoadAsset(bundleName);
    callback(spriteAtlas);
}

使用GetSprites在运行时检索精灵内容

如果精灵图集打包的精灵不在当前构建或项目中,请使用GetSprites按以下步骤在运行时创建与精灵图集绑定的精灵。

  1. 创建一个自定义组件,该组件将SpriteAtlas作为公共变量。
  2. Sprite Atlas分配给该属性。
  3. 进入编辑器的播放模式
  4. 访问变量并调用GetSprites以检索所选图集中打包的精灵数组。

其他资源

分发方法
解决不同的精灵图集场景