C#的xml序列化
1.类转xml
2.类转成二进制
序列化前提条件:自定义类、自定义属性加了序列化标签;
C#的xml序列化
1.类转xml
2.类转成二进制
序列化前提条件:自定义类、自定义属性加了序列化标签;
编辑器代码以及kuang:
UnityEditor.AssetDataBase.LoadAseetAtPath<GameObject>("");
参数是相对路径,Assets文件夹下的相对路径,需要后缀名.prefab。
unity资源加载方式:
1.手动拖到组件上
2.Resources.Load()
Resources文件夹有资源储存上限,比如2G,主要用来存放配置表。
3.AssetBundle
4.AssetDataBase.LoadAtPath
1. 程序集
自定义程序集
脚本编译生成对应的dll文件,在Library文件夹
Unity2018出现了Packages文件夹管理插件等。
2.如何使用功能
建立Assenbly_definition
覆盖本身的程序集;
程序集所属文件夹内文件及子文件夹,都属于该文件夹。
3. 程序集引用
自定义需要建立库的依赖,不能直接用using,需要手动建立依赖关系。
C#自带的程序集会默认引用所有程序集,不需要手动建立依赖。
1. 程序集
自定义程序集
脚本编译生成对应的dll文件,在Library文件夹
Unity2018出现了Packages文件夹管理插件等。
2.如何使用功能
建立Assenbly_definition
覆盖本身的程序集;
程序集所属文件夹内文件及子文件夹,都属于该文件夹。
1、通过Resources加载
GameObject obj = GameObject.Instantiate(Resources.Load("myPrefab") as GameObject);
2、在菜单栏添加菜单,程序集打包
using UnityEditor;
[MenuItem("Tools/打包")]
public static void Build()
{
BuildPipeline.BuildAssetBundles(Application.streamingAssetsPath, BuildAssetBundleOptions.ChunkBasedCompression, EditorUserBuildSettings.activeBuildTarget);
AssetDatabase.Refresh(); /*编辑器刷新*/
}
3、通过AssetBundle加载
AssetBundle assetBundle = AssetBundle.LoadFromFile(Application.streamingAssetsPath + "/myPreFabs");
GameObject gameObject = GameObject.Instantiate(assetBundle.LoadAsset<GameObject>("myPreFab1"));
4、AssetDatabase.LoadAssetAtPath方式加载
GameObject gameObject = GameObject.Instantiate(UnityEditor.AssetDatabase.LoadAssetAtPath<GameObject>("Assets/GameData/Prefabs/myPreFab1.prefab"));
万万没想到啊,居然是这样取消异步加载的,但是异步加载协程的那个AsyncLoadParam还存在,只是回调方法都不会执行了,也就是物体不会创建。但是AB包加载的情况它相关的预制体还是消耗掉了最多的内存= =。。。
注意:这节课所弄的引用计数在
public ResourceObj LoadResource(string path, ResourceObj resObj)
和 public bool ReleaseResource(ResourceObj resObj, bool destroyObj = false)
都会进行对引用次数的更改。
而这节课添加的4个方法,可以说是上面所说2个方法的一部分代码,仅仅只是为了提供给ObjectManager从对象池获取资源时添加引用计数,回收到对象池时减少引用次数的目的,如果抛开对象池这个东西,一直是用上面2个方法进行创建和回收的话,引用次数是按照正常思维那样子,谁使用了就会加1,谁不用就会-1.
我发现ObjectManager的对象池里面的每个对象都是参照着一个ResourceItem制造的,也就是ResourceObj的crc是一样的,其他都不一样,在第一次创建物体时,会去加载出这个ResourceItem并且存入ResourceManager的缓存池,而且会对resourceItem的m_Clear进行赋值为ResourceObj的m_bClear,那么注意是第一次才会进行赋值,第二次就会从缓存池取item,直接设置好resObj的item后会返回了,也就是说,这个参照物ResourceItem的m_Clear确定是在第一次创建的时候确定的,这种确定方法,确定OK么。。
Unity5.6 出现仅仅卸载AB包 而不去特地把clip置空的话 clip不会马上释放内存,必须要将audiosource的clip和 脚本引用了clip的地方全部置空才可以。
使用ScriptObject制作Asset配置表,一个List用于将单独资源打包,第二个list用于将文件内的资源进行打包放到一个包里面,需要指定AB名和文件目录路径都是绝对路径。