欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 国际 > Addressable学习

Addressable学习

2025/1/30 9:17:22 来源:https://blog.csdn.net/mascon/article/details/145325929  浏览:    关键词:Addressable学习

AssetsBundle是Unity的资源管理机制,将资源打包到AssetsBundle资源包并提供接口能从ab包里面加载资源出来。有了这个机制以后,我们要做资源管理,还需要做:

  a: 根据项目需求,编写编辑器扩展,提供指定资源打入对应bundle包工具策略;

  b: 根据项目的需求,资源包的依赖,提供ab包资源加载与释放的策略;

  c: 根据项目版本管理,更新需求,提供ab包的更新与增量下载策略;

  d: 项目资源加密的策略;

上面出现了两个频繁的词汇”机制,策略”, 机制提供的功能給上层使用,策略是基于机制,来实现具体怎么用。AssetsBundle 属于底层的资源加载与管理的机制。而我们框架中做的编辑器扩展,资源管理是基于机制的使用策略

 

Unity引擎考虑到上面a, b, c, d等策略对普通开发者实现有难度,于是帮我们实现了Addressable,它基于AssetsBundle机制, 实现的上述a, b, c, d等功能的一整套资源管理策略。没有错,Addressable是基于AssetsBundle的

 

AssetsBundle 是机制,Addressable是具体实现的一种资源管理的策略,AssetsBundle做资源管理并没有过时。Addressable是一种资源管理策略,如果策略不满足你项目的需求,你也可以用原来自己开发的基于AssetsBundle的资源管理策略而不用Addressable。比如你对加密有自己特殊的要求,比如你觉得Addressable还没有之前项目扩展的资源管理策略符合项目需求,你就可以不使用Addressable。

using UnityEngine.AddressableAssets;
using DG.Tweening;public AssetReference baseCube;      Addressables.LoadAssetAsync<GameObject>("Assets/Prefabs/New Folder/Capsule.prefab").Completed += (handle) =>{GameObject prefab = handle.Result;GameObject boxObj = Instantiate(prefab);boxObj.transform.DOPath(new Vector3[] { Vector3.zero, -Vector3.one * 10, Vector3.zero }, 1f, PathType.CatmullRom);};//baseCube.InstantiateAsync().Completed += (handle) =>//{//    GameObject obxPrefabs = handle.Result;//    //GameObject cubObj = Instantiate(obxPrefabs);//    obxPrefabs.transform.DOPath(new Vector3[] { Vector3.zero, Vector3.one * 10, Vector3.zero }, 1f, PathType.CatmullRom);//};

学习自:Unity Addressable资源管理方案实战详解 - rain4414 - 博客园

跳过启动画面

#if !UNITY_EDITOR
using UnityEngine;
using UnityEngine.Rendering;
using UnityEngine.Scripting;[Preserve]
public class SkipUnityLogo
{[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSplashScreen)]private static void BeforeSplashScreen(){System.Threading.Tasks.Task.Run(() => {SplashScreen.Stop(SplashScreen.StopBehavior.StopImmediate);});}
}
#endifusing UnityEngine;
using UnityEngine.Rendering;public abstract class SkipSplashScreen
{[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSplashScreen)]private static void Skip(){System.Threading.Tasks.Task.Run(AsyncSkip);}private static void AsyncSkip(){SplashScreen.Stop(SplashScreen.StopBehavior.StopImmediate);}
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com