unity资源加载

unity资源加载

打包的资源

  • Android
    所有资源打包在 unityLibrary\src\main\assets\bin\Data\data.unity3d
    • 场景存放在 level[n]
    • 共享资源存放在 sharedassets[n].asset
    • Resources文件夹下的资源存放在 resources.asset
  • iOS
    • 场景存放在 Data\level[n]
    • 共享资源存放在 sharedassets[0].asset
    • Resources文件夹下的资源存放在 resources.asset

Resources.Load

  • 参考 Unity User Manual (2019.4 LTS)/Working in Unity/资源工作流程/Scripting with Assets/在运行时加载资源

  • 目的
    在游戏运行时根据需要动态加载资源,注意资源还是在安装包中

  • 原理
    根据creator推测其原理是unity内部对每个资源分配uid,打包时是用uid替换文件路径,
    如果文件在Resources下则会把uid和原始文件路径的映射关系保存在一个配置文件中,
    加载时先把路径映射成uid,再用uid加载文件

  • 资源配置
    在Project下的任意文件夹中创建的Resources文件夹,其下的文件如果被场景引用,将打包进sharedassets[level].assets
    否则所有Resources文件夹下的资源将被打包成resources.assets,
    因此不同目录下的Resources文件夹下的资源最好有不同的路径,以免冲突

  • 资源加载
    在运行时用Resources.Load动态加载,要用相对Resources的路径,且不带扩展名
    如:Assets/Resources/a/glass.png或Assets/MyResource/Resources/a/glass.png
    在运行时都是用Resources.Load(“a/glass”,typeof(Texture2D) as Texture2D来加载

  • 资源卸载
    Resources.UnloadAsset不会卸载资源,要用UnloadUnusedAssets

  • 查找脚本
    Resources.FindObjectsOfTypeAll

Streaming Assets

  • 目的
    直接使用原始文件,比如视频文件,有些播放器需要直接使用文件路径去访问

  • 原理
    位于 StreamingAssets 目录下的文件将不进行打包操作,以原始文件路径直接存储

  • 资源配置
    在Assets目录下建一目录StreamingAssets,把资源放到该目录下

  • 资源加载
    目标机器的StreamingAssets目录 Application.streamingAssetsPath 跟平台有关:

    • Editor 或 win Application.streamingAssetsPath = Application.dataPath + “/StreamingAssets”;
    • ios 平台 Application.streamingAssetsPath = Application.dataPath + “/Raw”
    • android 平台 Application.streamingAssetsPath = “jar:file://” + Application.dataPath + “!/assets”
      存储在压缩文件中,必须使用 UnityWebRequest 加载文件
    • webGL 平台没有权限访问
    • 其它平台直接使用:
          GameObject cam = GameObject.Find("Main Camera");
          videoPlayer = cam.AddComponent<UnityEngine.Video.VideoPlayer>();
          // Obtain the location of the video clip.
          videoPlayer.url = Path.Combine(Application.streamingAssetsPath, "SampleVideo_1280x720_5mb.mp4");
      

AssetBundle

  • 参考 Unity User Manual (2019.4 LTS)/Working in Unity/资源工作流程/AssetBundle

  • 目的
    把一些资源打包成一个文件,可以从外部进行加载,外部可以通过从网络下载的方式来实现更新

  • 资源配置
    参考 Unity User Manual (2019.4 LTS)/Working in Unity/资源工作流程/AssetBundle/AssetBundle 工作流程
    5.x版本对生成assetBundle进行一定的支持,在每个资源的属性窗口右下角 AssetBundle 栏有2个选项

    • 左边选择该资源所属分组(也就是包名),支持目录结构用"/"
    • 右边选择变体名称(也就是包的后缀名,不能是预留的txt rar等,需要才加不需要留空)
      包名和后缀名相同的资源会打在同一个包里,
    • 注意相同包名的要么都有后缀,要么都没有后缀,不能同时存在 aaa 和 aaa.abb
    • 注意如果文件夹设置包名,该文件夹下没设置包名的资源将被打进文件夹所在包名
  • 资源打包
    参考 Unity User Manual (2019.4 LTS)/Working in Unity/资源工作流程/AssetBundle/构建 AssetBundle

    • 资源分组后可以执行下面脚本将各资源分组打包并放入目标目录,目标目录是以工程路径(Assets的上一层)为相对目录

      	//	将这段代码放到  Assets/Editor/XXX.cs 中
      	//	通过 菜单Assets->Build AssetBundles 执行
      	[MenuItem("Assets/Build AssetBundles")]
      	static void BuildAllAssetBundles()
      	{
             
      		//	打包输出目录
      		string assetBundleDirectory = "Assets/AssetBundleOut";
      		if (!Directory.Exists(assetBundleDirectory))
      		{
             
      			Directory.CreateDirectory
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值