Unity开发涉及技能栈总结
算法
| 排序方法 | 平均情况 | 最好情况 | 最坏情况 | 辅助空间 | 稳定性 |
|---|---|---|---|---|---|
| 冒泡排序 | O(n²) | O(nlogn) | O(n²) | O(1) | 稳定 |
| 简单选择 | O(n²) | O(n²) | O(n²) | O(1) | 稳定 |
| 直接插入 | O(n²) | O(n) | O(n²) | O(1) | 稳定 |
| 希尔排序 | O(nlogn)~O(n²) | O(n^1.3) | O(n²) | O(1) | 不稳定 |
| 堆排序 | O(nlogn) | O(nlogn) | O(nlogn) | O(1) | 不稳定 |
| 归并排序 | O(nlogn) | O(nlogn) | O(nlogn) | O(n) | 不稳定 |
| 快速排序 | O(nlogn) | O(nlogn) | O(n²) | O(nlogn)~O(n) | 不稳定 |
排序:冒泡排序、快速排序
字符串:KMP
二叉树:遍历(深度、广度)
递归:目录遍历,子物体查找,多维数组遍历
遍历(深度,广度)
数学题:斐波那契数列,杨辉三角,九皇后算法
设计模式
*MVC三层开发思想
MVVM:设计思想
*单例模式
工厂模式
观察者模式
面向对象
类和对象
方法
构造方法
虚方法和重写
重载
Lambda表达式
静态
保护类型(public、protected、private)
结构体
抽象类和接口
抽象方法
继承和复合
继承:is a
复合:has a
宏指令(比C++弱)
数据容器(数据组织结构,序列化,反序列)
XML(简化成JSON)
JSON(简化成ProtoBuffer)
ProtoBuffer
服务器通信
OSI七层模型
应用层(HTTP)
表示层
会话层
传输层(TCP,UDP)
网络层(IP)
数据链路层
物理层
TCP/IP五层模型的协议
应用层(HTTP)
传输层(TCP,UDP)
网络层(IP)
数据链路层
物理层
HTTP通信
连接一次后断开
Request- Request
基于TCP
URL地址(协议[http/https](不加密/加密),主机,端口,路径,文件,传参)
URL参数 参数1=参数1值&参数2=参数2值
状态号:200成功,302重定向,403找到了禁止访问,404找不到,500服务器内部错误(java把状态号屏蔽也出现这个)
头部信息:编码格式,cookie
Unity内部封装的HTTP请求类
TCP长连接通信
TCP连接(三次握手)与断开(四次挥手)
套接字
TCP连接与断开数发送和接收
端口绑定(服务器)
数据包处理
打包,解包
分包,粘包
心跳包
开发
消息号-回调函数
发送消息
接受消息
UDP通信
套接字
帧序
服务器帧定时器
数据同步到unity系统
防作弊
Unity
编辑器,Editor工具开发
基础API(GameObject,Transform,物理引擎)
场景搭建(地形编辑,NavMesh)
相机系统(参数设定,多相机叠加,渲染层,排序层)
声音系统(音频编辑系统,音频播放系统[2D,3D])
动画系统(Animator状态机,Animation动画片段,Avatar,融合树,IK,事件插入)
资源系统(IO操作(C#),Resources(打在包里),AssetBundle)
UI系统(UGUI(基础组件,复合组件),DOTween)
Eventsystem(2D给UI,3D给相机)
3D数学(向量和点,坐标系转换[世界坐标系和本地坐标系],欧拉角和四元数)
优化技巧
降低DrawCall
图集
少写pass通道
GPUInstancer
减少Update生命周期函数
计时器
多个脚本,注册给一个脚本,在一个脚本中调用其他脚本的Update
对象池
创建(单帧,跨帧)
回收
il2cpp的代码优化(C#转C++)
避免装箱拆箱(不用object)
避免使用foreach(遍历有垃圾碎片)尤其注意Update中编写foreach
减少在上线项目中,使用Debug(性能开销大)
静态配表
将不常变的数据,生成为数据(JSON,XML,ProtoBuffer)文件,可以减少服务器传递的数据量
减少CPU消耗
动画裁剪(动画在相机视椎体外不运行)
内存优化
(gpu参考博客 课程笔记完成)
飞出屏幕,不需要再次渲染的对象,记得销毁
(参考博客 AB包)
加载带有资源文件(精灵)的资源时,内存会上升,当带有资源的GameObject被销毁时,资源所占用的内存,不会被释放(懒释放-为了快),Resources.UnloadUnusedAssets()
对象存储在静态变量上,变量不会被垃圾回收机制影响,当不再使用时,需要赋值为null
继承自IDispose接口的对象,当不再使用时,需要调用dispose()函数
WWW( )
Stream处理 (流处理)
Using()
{
//自动执行dispose()函数 文件操作
}
Using用法例如
1 | StreamReader sr = new StreamReader(“文件路径”); |
异步实现
线程在Unity中是存在,注意不能在线程中操作Unity的对象树 (gameobject操作)
异步加载场景(代码是协同,底层是线程)
异步加载Resources(代码是协同,底层是线程)
异步加载AB包(代码是协同,底层是线程)
异步加载AB包中的资源(代码是协同,底层是线程)
HTTP请求(代码是协同,底层是线程)
TCP请求(代码是线程)
延迟实现
利用协同实现(yield return null),可以实现每一帧做一些事情
列表页元素过多时,如果在一帧中加载所有cell,则会卡顿,可以使用逐帧加载多个cell的方式,或通过滚动条的OnValueChange回调函数,执行多次加载
Lua
Lua的基础语法(表和面向对象)
.tolua独立开发与xlua腾讯
Lua和JavaScript很像(一切皆对象)
C#与xLua的互调
C#调xLua 为了执行一些生命周期函数
xLua调C# 为了实现一些API
热更新
Shader
矩阵运算,齐次矩阵,坐标系转换
渲染流水线
Cg语言
顶点、片元着色器
属性控制与数据传递
光照(兰伯特定律,高光)
着色方式
Phong着色,
高洛德着色
纹理渲染
主纹理,光照纹理
渲染指令
多pass通道,
渲染队列,深度测试,深度缓冲,颜色缓冲
反向裁剪
透明度测试
片元丢弃
版本控制
SVN:基于版本控制的集中式管理系统
学习:https://www.runoob.com/svn/svn-tutorial.html
软件:
Git:基于分支实现的版本控制软件
学习:www.liaoxuefeng.com/wiki/
软件:www.sourcetreeapp.com
VR
硬件搭建
Unity中整合SteamVR(OpenVR)
开发
动作设置
设置VR场景
接入设备(两个手柄,眼镜)
功能实现
人物瞬移
道具拾取
UI交互
知识点
物理引擎
场景搭建
Shader
AR
SDK添加
图片识别
平面感知
打包和SDK接入
NDK(Unity c#-c++) SDK(android) JDK(java)
打包
环境配置
参数设定
真机测试(LogViewer)
ADB观察打印(主要是安卓 ios 直接xcode)
SDK接入(c#和原生语言)
配置AS
根据文档,修改代码,生成AAR包
将aar包放入Plugins目录
C#调用unity写好的桥梁代码,进而调用java
Unity项目上传GitHub的注意点
Unity项目中必须上传的3个文件夹
- Assets——关系到项目的资源
- Packages——关系到导入的一些包
- ProjectSettings——关系到你的项目设置
Assets文件夹里的以meta为后缀的文件也要上传
