lyh916

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

框架使用AB包的方式来加载资源,这样意味着如果资源出现了变更,那么就要重新打包,这样才能加载出最新的资源。为了加快开发效率,可以使用AssetDatabase的形式来加载资源

 

0.

如下,用两种方式去加载cube

 1 using UnityEngine;
 2 using UnityEditor;
 3 
 4 public class TestAB : MonoBehaviour
 5 {
 6     public bool isAssetBundle = true;
 7 
 8     void Start()
 9     {
10         if (isAssetBundle)
11         {
12             AssetBundle cubeAB = AssetBundle.LoadFromFile("Assets/StreamingAssets/cube");
13             GameObject go = null;
14             if (cubeAB != null)
15             {
16                 go = Instantiate(cubeAB.LoadAsset<GameObject>("cube"));
17                 go.transform.localScale = Vector3.one * 2;
18             }
19         }
20         else
21         {
22 #if UNITY_EDITOR
23             GameObject cubeAsset = AssetDatabase.LoadAssetAtPath<GameObject>("Assets/Prefab/Cube.prefab");
24             GameObject go = Instantiate(cubeAsset);
25             go.transform.localScale = Vector3.one * 10;
26 #endif
27         }
28     }
29 }

 

1.

统一加载路径

使用AB包时,路径为:Assets/StreamingAssets/cube,而且还需要提供资源名:cube

使用AssetDatabase时,路径为:Assets/Prefab/Cube.prefab,注意需要提供后缀

首先,打包时一般以文件夹为单位,因此这里需要对Prefab文件夹进行打包,Cube.prefab即为Prefab包内的资源。

然后,对于AssetDatabase,其路径是没有大小写敏感的,需要提供后缀。

 1 using UnityEngine;
 2 using UnityEditor;
 3 using System;
 4 using UObject = UnityEngine.Object;
 5 
 6 public class TestAB : MonoBehaviour
 7 {
 8     public bool isAssetBundle = true;
 9 
10     void Start()
11     {
12         Load("Prefab/Cube.prefab", (obj) => {
13             GameObject go = Instantiate(obj) as GameObject;
14             go.transform.localScale = Vector3.one * 5;
15         });
16     }
17 
18     //path:Assets下的路径
19     private void Load(string path, Action<UObject> cb)
20     {
21         if (isAssetBundle)
22         {
23             path = "Assets/StreamingAssets/" + path;
24             path = path.Substring(0, path.LastIndexOf("."));
25             string assetBundleName = path.Substring(0, path.LastIndexOf("/"));
26             string assetName = path.Substring(path.LastIndexOf("/") + 1);
27             Debug.LogWarning(assetBundleName);
28             Debug.LogWarning(assetName);
29 
30             AssetBundle assetBundle = AssetBundle.LoadFromFile(assetBundleName);
31             if (assetBundle != null)
32             {
33                 UObject asset = assetBundle.LoadAsset<UObject>(assetName);
34                 if (cb != null && asset != null)
35                 {
36                     cb(asset);
37                 }
38             }
39         }
40         else
41         {
42 #if UNITY_EDITOR
43             path = "Assets/" + path;
44             UObject asset = AssetDatabase.LoadAssetAtPath<UObject>(path);
45             if (cb != null && asset != null)
46             {
47                 cb(asset);
48             }
49 #endif
50         }
51     }
52 }

 

2.

修改框架源码

ResourceManager.cs

Packager.cs

 

3.

调用

posted on 2019-07-07 23:42  艰苦奋斗中  阅读(287)  评论(0编辑  收藏  举报