模型空间 => 齐次裁剪空间 =>顶点色
| |
物体顶点坐标 =>长宽高为1的世界坐标空间内=>顶点色(平面2维坐标系)
模型空间 => 齐次裁剪空间 =>顶点色
| |
物体顶点坐标 =>长宽高为1的世界坐标空间内=>顶点色(平面2维坐标系)
减少Draw Call 的方法
1静态合批
2动态合批
3GPU instaning
1,Occlusion Culling遮挡剔除,基于摄像机(CPU处理)
2,shader信息(CPU处理)
3.可读可写的渲染数据会同时占用内存和显存?
里氏替换原则:子类完全继承父类的所有东西,既父类无private
高层模块调用低层模块解决问题
通过继承实现开闭原则。抽象出一个敌人父类,所有敌人都继承它。当新增一个敌人时,只需要继承父类,不再需要更改其他代码。
编程即抽象,谁想象力丰富,谁写的代码简洁。
迪米特法则是复用的基础,也是中介存在的理由。
gameobject上挂在的脚本:
Korgrapher
Audio Source
Simple Music Player
文本在unity中是textasset类型
d'd
获得类型:
System.Type type = typeof(T)
1.对泛型T的约束
where T class,new()
2. 栈的使用
1. 单例基类的设计,
对泛型T的约束
where T:new()
1. 通过代码生成AB包配置表,表中记录着所有资源所在的包名以及与其它包体的依赖关系。
2. 然后优化配置表:把一些永远不可能去动态加载的资源从配置表中移除,只记录可能会动态加载的东西。
3.通过一个List来过滤。
打包时剔除冗余
删除无用的包名(改名或者没有使用)
设置AB包 --> 打包 -->清除AB包设置
1.编辑器扩展时,要使用[MneuItem("...")]添加到工具栏中的前提是,必须写的是一个静态方法。
2.API打包:
buildPipeline.buildAssetBundels(...,..,.EditorUserBuildSettings)
就近原则
程序集之间的引用关系
拖拽指定的方式 和 resource.load的方式都不是推荐的资源加载方式,只有小规模项目时可以使用。
大项目推荐用 、assetBundel加载方式
SerializeField 特性