《代码大全》
好处:提高阅读效率,提升心情
《代码大全》
好处:提高阅读效率,提升心情
正常模式下的 同步加载逻辑
模拟模式下的 异步加载逻辑
1 上节课的小尾巴,把mManifest删掉,换成Resdatat.get依赖项
2.要解决的问题
模拟模式下的异步加载
正常模式下的同步加载
正常模式下的异步加载
更改:AssetData
为AB包加载切换逻辑
1 把ABres加载步骤放到 resdata
封装一下把加载min放到Resmgr中
2 Resdata中的依赖加载项也改一下
屏幕空间之屏幕映射
--------------------------
从Z轴方向看
(-1, 1) ( 1, 1)
┌────────────┐
│ │
│ ( 0, 0) │
│ │
└────────────┘
(-1,-1) ( 1,-1)
转换到屏幕(以Unity屏幕为例)
( w, h)
┌──────────────────┐
│ │
└──────────────────┘
( 0, 0)
x = ( (w/2)x + w/2 )
y = ( (h/2)y + h/2 )
z 深度缓存
裁剪空间完成之后的坐标
┌ Xclip ┐
│ Yclip │
│ Zclip │
└ Wclip ┘
整个屏幕空间的公式应为
Xscreen = (W Xclip) / 2Wclip + W/2
Yscreen = (H Yclip) / 2Wclip + H/2
屏幕空间之齐次除法
--------------------------
屏幕空间
1. 齐次除法 / 透视除法
2. 屏幕映射
剪裁 透视
┌ x(cot(FOV/2)/Aspect) ┐
│ y(cot(FOV/2)) │
│ -z((f+n)/(f-n)) - (2fn/(f-n)) │
└ -z ┘
openGL | Dx
NOC | CVV
x ∈(-1,1) | x ∈(-1,1)
y ∈(-1,1) | x ∈(-1,1)
z ∈(-1,1) | x ∈(0,1)
┌ -(x/z)(cot(FOV/2)/Aspect) ┐
│ -(y/z)(cot(FOV/2)) │
│ (f+n)/(f-n) + (2fn/z(f-n)) │
剪裁 正交
┌ x/(Aspect x size)) ┐
│ y/size │
│ -2/(f-n) - (f+n)/(f-n) │
└ 1 ┘
进行齐次除法后值不变,所以可以跳过直接进行屏幕映射
ResMgr
完成和改善修改功能
第一个切换逻辑
实现同步异步切换
第二个加载资源逻辑
可以根据不同模式调用Api加载
第三个AssetBundle信息收集逻辑
可以用assetdata 和 Manifest
Menu.SetChecked 将MenuItem菜单设置为可切换状态
1 更改AssetBundleRes依赖,在resdata类中添加获取依赖的方法
2 改AssetRes的loadSync 的 ownerBundle
3更改abres 的依赖加载
1 ab名获取依赖的ab包名
2 加载文件,LoadAssetAtPath<T>(assetPath);参数ab路径
AB包资源获取
1 获取所有AB GetAllAssetBundleNames()的名字 ;
2 根据AssetBundleNmae获取资源路径
GetAssetPathsFromAssetBundle(assetBundleName)
3 获取AB依赖:GetDirectDependencies
第一个参数获取AB名的,第二个参数是bool表示是否遍历,false不遍历
v0.0.15版本定义
1.编辑器模式下AssetBundleName和AssetName对应关系收集
2.编辑器模式下的AssetBundle依赖关系收集
3.加载Assets目录下的资源
库,示例,测试,分类整理
这个 Assert.AreEqual(1, bigTextureRes.RefCount); //判断加载的个数是否等于1
在本脚本中加载1次,不会增加,卸载的时候会卸载掉
Assert.Throws<T> 的意思是Lambda 抛出T 类型的异常,则测试通过。
test 是
unityTest 是
Resloader 中的创建改为工厂模式
上一课说了:导出
这节课:加载
核心API:\
BuildPipeline.BuildAssetBundles
AssetBundle.LoadFromFile
AssetBundle.LoadAsset<T>
依赖的异步支持: