for循环体最后一句加上break就可以了,
思路就是从高到低选择,选不到就跳到下一个级别,选中了处理完就终止这次循环,重新开始
XXSX
ReleaseObject不放回池子里,也会减少引用计数,
具体在ResourceManager.Instance.ReleaseResource(resObj, destroyCache);这句代码中去减少的
XML序列化主要用 XmlSerializer
二进制序列化主要用 BinaryFormatter
直接看代码效率还高些,听老师讲太犯困了,没有图示啥的就不停地敲代码
实在没理解啊,好难
编辑器下资源回收需要置空所有引用
感觉成员变量多的不行了
总感觉成员变量重复了很多,哭了
程序集包含当前所在文件夹,以及当前文件夹的子文件夹
编辑器脚本可以引用运行时脚本,但是运行时脚本如果引用编辑器脚本,打包时会报错。
2018的Prefab模块被魔改了,老师的这种方式会出现断言错误,可以通过下面的方式进行加载
[MenuItem("离线数据/生成所有UI离线数据")]
public static void AllUICreate()
{
string[] allPath = AssetDatabase.FindAssets("t:Prefab", new[] { "Assets/GameData/Prefabs/UGUI" });
for (int i = 0; i < allPath.Length; i++)
{
//转明文路径
string path = AssetDatabase.GUIDToAssetPath(allPath[i]);
EditorUtility.DisplayProgressBar("生成所有UI离线数据", "Prefab:" + path, i * 1.0f / allPath.Length);
//1.新版获得对象
GameObject obj = PrefabUtility.LoadPrefabContents(path);
if (obj == null)
{
continue;
}
//调用修改数据的方法
CreateUIData(obj);
//2.新版本需要保存并释放引用
PrefabUtility.SaveAsPrefabAsset(obj, path);
PrefabUtility.UnloadPrefabContents(obj);
}
Debug.Log("所有UI离线数据生成成功");
EditorUtility.ClearProgressBar();
}
图片加载不出来可以用下面这种形式,就不用在方法里面传参数了;
private void OnLoadSpriteTest1(string path, object obj, object param1 = null, object param2 = null, object param3 = null)
{
if (obj != null)
{
Texture2D texture = obj as Texture2D;
Sprite sprite = Sprite.Create(texture, new Rect(0,0,texture.width,texture.height),new Vector2(1f,1f));
m_MainPanel.Test1.sprite = sprite;
Debug.Log("图片1已加载");
}
}
测试可以加载出来
CacheResource(path, ref item, crc, obj)
这里的ref 应不应该加? ResourItem类型 本事是引用类型,传的也是引用吧?
卸载的时候,是否要把 加载的依赖项 也卸载呢?
这里应该是有问题的
//t:prefab or t:Prefab 表示type:Prefab----- (t:TextAsset 表示文本类型),返回GUID
string[] allStr = AssetDatabase.FindAssets("t:prefab", abConfig.m_AllPrefabPath.ToArray());
foreach (var str in allStr)
{
Debug.Log(AssetDatabase.GUIDToAssetPath(str)); //通过GUID找到资源的全路径(带后缀)
}
GameObject obj = Instantiate(assetBundle.LoadAsset<GameObject>("Attack.prefab"));
GameObject obj2 = Instantiate(assetBundle.LoadAsset<GameObject>("Attack"));
后缀可加可不加,主要prefab中p小写
string[] resDependence = AssetDatabase.GetAssetBundleDependencies(abBase.ABName, true);
static void CreateConfig(Dictionary<string, string> validPathABNameDict)
{
AssetBundleConfig config = new AssetBundleConfig();
config.ABList = new List<ABBase>();
foreach (string path in validPathABNameDict.Keys)
{
ABBase abBase = new ABBase();
abBase.Path = path;
abBase.Crc = Crc32.GetCRC32(path);
abBase.ABName = validPathABNameDict[path];
abBase.AssetName = path.Remove(0, path.LastIndexOf("/") + 1);
abBase.ABDependence = new List<string>();
string[] resDependence = AssetDatabase.GetAssetBundleDependencies(abBase.ABName, true);
foreach (string de in resDependence)
{
//Debug.LogFormat($"AB包:{abBase.ABName} ------ 依赖{de}");
abBase.ABDependence.Add(de);
}
config.ABList.Add(abBase);
}
//写入XML
.
.
.
//写入二进制
.
.
.