工作以来笔记就没在博客记了,基本上就写在印象笔记上面,主要是国外上CSDN也不方便,最近找到了一个不错的回国VPN,准备把一些可能工作中常用的笔记搬到CSDN上,整理了下上个项目的笔记,这还是国内做的一个项目,现在准备总结工作一年来的收获,在学点新的技术,准备主攻shader和Dots技术。
项目知识积累
UGUI
自动布局Auto LayOut
图片自适应文字
Content Size Fitter
加 Horizontal Layout Group
刘海屏手机怎么处理UI
1.所有UI界面统一右移动处理
2.自行对刘海的尺寸固定一个保守估计值来规避UI上的遮挡
3.监听手机翻转事件及时调整设置
Mask组件
Mask组件会产生一个DrawCall,在Mask中的图片无法与外界的图片进行合批
模态对话框
是指这个对话框弹出的时候,鼠标不能单击这个对话框之外的区域,这种对话框往往是用户进行了某种操作后才出现的。非模态对话框通常用于显示用户需要经常访问的控件和数据,并且在使用这个对话框的过程中需要访问其它窗体的情况。例如:word的查找对话框,可以直接点击任何地方。
Unity
组件Component思想
在传统的结构设计中一般会使用“派生”来描述对象之间的关系。子类通过派生父类,来获得父类的功能。在设计游戏对象时,会根据游戏本身的需要而为游戏对象添加各种功能支持,比如渲染,碰撞,刚体,粒子系统等等。这些通用功能为了能够为各种派生类提供服务,都必须实现到基类中。这样就导致了游戏对象基类变得非常庞大臃肿,即难使用,又难维护。 ”基于组件“的对象模型就是把所有需要提供给游戏对象的基础功能都独立成单独的”组件模块“(Component),一个具体的游戏对象可以将它需要的功能模块组合到一起使用。所有”功能“不再是父类中的接口,而变成子对象实例,为游戏对象提供服务。这样既保证了功能代码的可重用性,又增加了整个对象体系的模块化和灵活度
协程原理IEnumerator
功能:控制代码在特定的时机执行;分部执行,遇到条件会挂起,满足条件继续执行
原理:就是一个迭代器IEnumerator接口有两个方法Current和MoveNext();迭代器方法运行到yield return语句时,会返回一个表达式并保留当前在代码中的位置。当下次调用迭代器函数时执行从该位置重新启动; Unity在每帧做的工作就是:调用协程(迭代器)MoveNext()方法,如果返回true,就从当前位置继续往下执行。
就是在update下一帧执行多个coroutine里的东西 在单线程里模拟出多线程的效果
预制体Prefab
.prefab文件在Unity引擎中,扮演着配置文件的作用,用它将多个组件关联在了一起,组成了一个整体,它默认是一个二进制文件;所有的预置实例链接到原始预置,基本上是它的克隆。不管你的项目存在多少实例,当你对预置进行任何更改,你将看到这些更改将应用于所有实例。
脚本生命周期
Awake()--OnEnable()--Start()--FixedUpdate()--Update()--LateUpdate()--OnBecameVisible()--OnGUI()--OnBecameInvisible()--OnDisable()--OnDestroy()--OnApplicationQuit()
动态加载资源
Resouces
只能加载Resources目录中的资源
AssetBundle
只能加载AB资源,当前设备允许访问的路径都可以
WWW
可以加载任意处资源,包括项目外资源(如远程服务器)
AssetDatabase
只能加载Assets目录下的资源,但只能用于Editor
UnityWebRequest
WWW类似,它的升级版
资源加载了要记得卸载,可以节省内存。单一职责原则,资源加载器只负责加载资源,具体业务逻辑不要放进来。资源加载要传路径进去,做到加载器可以复用。图片加载都比较大,最好不要一次性加载,做到加载一张,上一张不用就卸载。卸载最好用Resources.UnloadUnusedAsse