一、前言
嗨,大家好,我是新发。
有不少同学私信和评论让我讲讲Unity的学习顺序,说不知道怎么系统地去学,遇到很多问题不知道如何去处理。
嗯,那我就根据我自己的成长过程,写一下Unity的学习路线吧。
二、我的大学
首先说下我的大学,我是2014
年毕业于华南理工大学,读的是信息工程专业,专业课程主要如下:
我其实一开始并不确定我会从事游戏行业,也是在工作中不断去学习积累的,希望我的学习路线可以帮助到学Unity的同学。由于内容太多,我只列出大致的大纲,大家可以跟着我的大纲进行学习。
三、Unity学前
1、C#基础
1.1、数据类型
- 值类型
- 引用类型
- 指针类型
- 装箱与拆箱
1.2、变量
- 定义
- 初始化
1.3、常量
- 定义
- 引用
1.4、运算符
- 算术运算符
- 关系运算符
- 逻辑运算符
- 位运算符
- 赋值运算符
1.5、判断
- if 语句
- if … else语句
- 嵌套 if 语句
- switch 语句
- 嵌套 switch 语句
- ?: 条件运算符
1.6、循环
- while 循环
- for/foreach 循环
- do … while 循环
- 嵌套循环
- break 语句
- continue 语句
1.7、数组
- 声明
- 初始化
- 赋值
- 访问
- 遍历
- 多维数组
- Array与ArrayList的区别
1.8、枚举
- 声明
- 访问
- 与int、string的转换
- 判断枚举是否包含id
1.9、字符串
- 字符串比较
- 字符串替换
- 字符串连接
- 判断是否含有字符串
- 复制字符串
- 判断是否是以某个字符串结尾
- 判断是否是以某个字符串开头
- 字符串判等
- 字符串格式化
- 求索引
- 字符串判空
- 使用分隔符连接字符串数组
- 使用分隔符分割字符串
- 插入字符串
- 移除字符串
- 转char[]
- 大小写转换
- 去除前后空白字符
1.10、命名空间
- 定义
- using
- 嵌套命名空间
1.11、类
- 定义
- 成员函数
- 构造函数
- 析构函数
- 静态成员
- 密封类
- 静态类
1.12、结构体
- 定义
- 特点
- 类与结构体的区别
1.13、接口
- 定义
- 继承
1.14、方法
- 定义
- 调用
- 递归
- ref与out
- 不定参数
1.15、封装
- 访问修饰符
- 类与结构体的区别
1.16、继承
- 基类与派生类
- 接口多继承
- 抽象类与接口区别
1.17、多态性
- 函数重载
- 运算符重载
- 抽象类
- 虚方法
1.18、运算符重载
- 定义
- 执行
1.19、IO操作
- File类
- Directory类
- Path类
- FileStream类
- StreamReader类
- StreamWriter类
- BinaryReader类
- BinaryWriter类
1.20、预处理
- #define
- #undef
- #if
- #else
- #elif
- #endif
- #region
- #endregion
1.21、异常处理
- try、catch、finally 、throw
- 异常类
- 自定义异常
2、C#进阶
2.1、Attribute特性
- 预定义特性
- AttributeUsage
- Conditional
- Obsolete
- 自定义特性
- 声明
- 构建
- 应用
2.2、反射
- 概念
- 原理
- 用途
- 优缺点
- 使用
2.3、属性
- get/set访问器
- 抽象属性
2.4、索引器
- this[int index]
- 用途
- 重载索引器
2.5、委托
- 概念
- 用途
- 声明
- 实例化
- 委托多播
2.6、事件
- 概念
- 用途
- 声明
- 使用
- 事件与委托的区别
2.7、集合
- ArrayList
- Hashtable
- SortedList
- Stack
- Queue
- BitArray
2.8、泛型
- 特性
- 泛型类
- 泛型方法
- 泛型委托
- 泛型接口
- 泛型约束
2.9、匿名方法
- 概念
- 语法
- 委托与匿名方法
- Lambda表达式
2.10、不安全代码
- unsafe
- 托管代码与非托管代码
2.11、正则表达式
- 字符转义
- \r
- \n
- \b
- \t
- 字符类
- [character_group]
- [^character_group]
- [first - last]
- \w与\W
- \s与\S
- \d与\D
- 定位符
- ^
- $
- \A
- \Z
- \z
- \G
- \b
- \B
- 限定符
- *
- +
- ?
- {n}
- {n,}
- {n, m}
- Regex类
2.12、多线程
- 线程生命周期
- 创建线程
- 暂停线程
- 销毁线程
四、Unity入门
1、Unity的安装与激活
1.1、中国版与国际版
- 中国版
- https://unity.cn/
- 国际版
- https://unity.com/
1.2、Unity下载
- https://unity.cn/releases
1.3、Unity激活
- 专业版
- 加强版
- 个人版
2、Unity社区
2.1、中文手册
- https://docs.unity.cn/cn/current/Manual/index.html
2.2、技术专栏
- https://developer.unity.cn/articles
2.3、技术问答
- https://developer.unity.cn/ask/home
2.4、中文课堂
- https://learn.u3d.cn/
2.5、官方Bilibili
- https://space.bilibili.com/386224375
2.6、资源商店
- https://assetstore.unity.com/
3、IDE安装
3.1、Windows
- Visual Studio
- VS Code
- Sublime
3.2、MacOS
- XCode
- Sublime
4、认识编辑器
4.1、视图面板
- Scene面板:上帝视角的场景
- Game面板:玩家视角的画面
- Hierarchy面板:层级面板
- Inspector面板:属性面板
- Paoject面板:工程目录
- Console面板:日志面板
4.2、常用菜单
- File / Open Project:打开工程
- File / Build Settings:打包设置
- Edit / Preferences:偏好设置
- Edit / Project Settings:工程设置
- Windows / Package Manager:插件包管理
5、工程目录结构
5.1、Assets目录
- Scripts:代码目录
- Editor:编辑器拓展目录
- Plugins:插件目录
- Gizmos:绘图资源目录
- Resources:资源目录
- StreamingAssets:流式资源目录
- RawAssets (自定义):生肉资源目录
- GameAssets (自定义):熟肉资源目录
- Shaders:Shader代码目录
- Scenes:场景目录
5.2、ProjectSettings目录
- 工程设置目录
5.3、UserSettings目录
- 用户设置目录
5.4、Library目录
- 编译目录
6、图片
- 导入图片
- 设置格式
7、模型
- 创建:几何体模型
- 导入:外部模型
8、材质球
- 创建材质球
- 设置材质球
- 设置Shader
- 赋值给模型
- 调整参数
9、声音
- 导入
- 播放
10、预设
- 创建预设
- 保存预设
- 编辑预设
- 加载预设
- Resources.Load
- AssetDatabase.LoadAssetAtPath
- AssetBundle.LoadFromFile
- 实例化预设
- Object.Instantiate
11、GameObject
- 创建GameObject
- 设置父节点
- 挂脚本
- 隐藏与现实
- 销毁GameObject
12、Transform
- 移动
- 旋转
- 缩放
13、运行测试
- 运行
- 暂停
- 停止
14、Windows打包
- 打包:Windows
- 测试
五、Unity初级
1、C#脚本
- 创建:Create / C# Script
- 挂脚本
- 手动挂:AddComponent
- 代码挂:AddComponent
- 获取脚本:GetComponent
- 移除脚本:RemoveComponent
- 激活与禁用
- 手动
- 代码:enabled
- 生命周期
- Awake
- OnEnable
- Start
- Update
- FixUpdate
- LateUpdate
- OnDisable
- OnDestroy
- 打印日志
- 断点调试
2、UGUI
2.1、UGUI基础组件
- Text
- Image
- RawImage
- Button
- Toggle
- Slider
- Scrollbar
- Dropdown
- InputField
- Canvas
- Panel
- ScrollView
2.2、UGUI实操
- 文字描边
- 文字阴影
- 文字对齐
- 文字自动换行
- 血条/进度条
- 圆圈进度条
- 技能CD
- 图片循环
- 图片置灰
- 圆形头像
- 按钮换图
- 单选/多选框
- 左右开关
- 横向布局
- 纵向布局
- 网格布局
- 切九宫格
3、引擎常用组件
3.1、Audio组
- AudioSource
- AudioListener
3.2、Effects组
- ParticleSystem
- LineRenderer
- TrailRenderer
3.3、Event组
- EventSystem
- EventTrigger
- GraphicRaycaster
3.4、Layout组
- RectTransform
- Canvas
- CanvasGroup
- CanvasScaler
- AspectRatioFitter
- ContentSizeFitter
- GridLayoutGroup
- HorizontalLayoutGroup
- VerticleLayoutGroup
- LayoutElement
3.5、Mesh组
- MeshFilter
- MeshRenderer
- SkinnedMeshRenderer
- TextMeshPro-Text
3.6、Miscellaneous组
- Animator
- Animation
3.7、Nevigation组
- NavMeshAgent
- NavMeshObstacle
3.8、Physics2D组
- Rigidbody2D
- BoxCollider2D
- CapsuleCollider2D
- CircleCollider2D
- CompositeCollider2D
- EdgeCollider2D
3.9、Physics组
- Rigidbody
- BoxCollider
- CapsuleCollider
- SphereCollider
- CharacterController
- TerrainCollider
3.10、Rendering组
- Camera
- CanvasRenderer
- SpriteRenderer
- Skybox
- SortingGroup
- Light
4、发布
4.1、基础设置
- 设置APP名字
- 设置APP图标
- 设置闪屏
- 设置版本号
4.2、平台发布
- Windows平台
- 设置分辨率
- 设置后台运行
- 发布exe
- Android平台
- JDK安装
- Android SDK下载
- NDK下载
- Gradle下载
- 设置keystore
- 发布apk
- iOS
- 导出XCode工程
- 申请证书
- 安装证书
- 设置证书
- 发布ipa
5、编辑器拓展
5.1、拓展Project视图
- 右键菜单
- [MenuItem(“Assets/My Tools/Tools 1”, false, 2)]
- 拓展布局
- [InitializeOnLoadMethod]
- EditorApplication.projectWindowItemOnGUI
5.2、拓展Hierarchy视图
- 右键菜单
- [MenuItem(“GameObject/My Create/Cube”,false,0)]
- 拓展布局
- [InitializeOnLoadMethod]
- EditorApplication.hierarchyWindowItemOnGUI
5.3、拓展Inspector视图
- 拓展组件
- [CustomEditor(typeof(Camera))]
- public override void OnInspectorGUI()
- 拓展Context菜单
- [MenuItem(“CONTEXT/Transform/New Context 1”)]
- MenuCommand
5.4、拓展Scene视图
- 画线或3D物体
- OnDrawGizmos
- OnDrawGizmosSelected
- 画GUI
- [CustomEditor(typeof(Camera))]
- OnSceneGUI
- Handles
5.5、拓展顶部菜单
- 带勾选的菜单
- [MenuItem(“MenuTest/Test”, false, 3)]
- Menu.GetChecked
- Menu.SetChecked
- 带快捷键的菜单
- [MenuItem(“Assets/HotKey %#d”,false,-1)]
- %:表示Ctrl键
- #:表示Shift键
- &:表示Alt键
六、Unity中级
1、UGUI案例
- 打图集
- UI适配分辨率
- UI界面分层
- 背景图适配文字宽度
- 模型显示在UI上
- 粒子显示在UI上
- UI裁切3D模型
- UI裁切粒子
- 艺术字体制作
- 不规则按钮
- 跑马灯
- 图文混排
- 图片镜像对称
- 多层嵌套滑动列表
- 摇杆
- 雷达图
- 折线图
- 循环列表
- 小地图
- 头顶文字
- 适配刘海屏
2、简单物理
2.1、刚体
- 类型
- 移动
- 重力
2.2、碰撞
- 条件
- 检测
2.3、触发器
- 设置
- 检测
2.4、物理材质
- 创建
- 摩擦力
- 弹性
- 设置引用
2.5、射线
- 发射
- 检测
- 结果
2.6、弹簧
- 设置
- 案例
3、动画
- Animator
- Animation
- 状态机变量
- 动画融合
- 状态切换
- 混合树
4、粒子系统
- 创建
- 制作
- 播放
- 案例
- 火焰
- 下雪
- 水花
- 闪电
- 激光
- 爆炸
- 烟雾
- 喷射
- 闪光
- 魔法阵
- 溅血
5、寻路导航
- 导航障碍物
- 导航烘焙
- 导航代理
- 点击寻路
- 寻路跳跃
6、Json
- LitJson库
- 构建JsonData
- JsonData与string的转换
- JsonData与数组和字典的转换
7、二维码
- ZXing库
- 生成二维码
- 保存为图片
8、插值缓动
- DoTween插件
- 平滑移动
- 平滑旋转
- 平滑缩放
- 平滑插值自定义变量
9、Zip压缩与解压
- Ionic.Zip.Unity插件
- 创建zip文件
- 解压zip文件
- 显示解压进度
10、Behavior Designer
- 插件下载
- 编辑器界面
- 设置变量
- Composites类节点
- Decorators类节点
- Actions类节点
- Conditionals类节点
- 优先级与打断
- 行为树存储
- 行为树加载
- 行为树控制
11、Cinemachine
- 插件安装
- 摄像机跟随
- 自由视角跟随
- 固定视角跟随
- 轨道镜头
- 轨道镜头跟随
- 镜头融合
- 跟随目标组
- 切镜
- 自由观察摄像机
- 状态驱动摄像机
- 轨道物体
- 2D摄像机
- 与TimeLine配合使用
12、TimeLine
- 插件安装
- 创建TimeLine资源
- 创建轨道
- Activation Track轨道
- Animation Track轨道
- Audio Track轨道
- Control Track轨道
- Signal Track轨道
- Playable Track轨道
- TimeLine倒放
13、Tilemap
- 插件安装
- 创建调色板
- 制作瓦片
- 绘制瓦片
- 删除瓦片
- 填充瓦片
- 多瓦片涂刷
- 瓦片缝隙问题
- 瓦片序列帧
- 瓦片自适应方向
- 添加碰撞
14、ProBuilder
- 插件安装
- 创建模型
- 编辑点线面
- 设置顶点颜色
- 镜像克隆
- 编辑材质
- 同材质与颜色选择
- 模型导出
- 案例
- 跑酷场景
- 障碍物道具
15、SVN
- SVN客户端下载与安装
- SVN工程检出
- SVN更新
- SVN提交
- SVN合并
- SVN日志查看
- SVN还原
- SVN对比修改
- SVN冲突解决
16、Python语言
16.1、用途
- 制作工具
16.2、Python语言基础
- 环境搭建
- Windows
- Linux
- MacOS
- 变量
- 全局变量
- 局部变量
- 赋值
- 多变量赋值
- 数字
- 字符串
- 集合
- 列表
- 元组
- 字典
- 类型转换
- int(x [,base])
- long(x [,base] )
- float(x)
- str(x)
- tuple(s)
- list(s)
- set(s)
- dict(d)
- chr(x)
- 运算符
- 算术运算符
- 比较运算符
- 赋值运算符
- 逻辑运算符
- 位运算符
- 成员运算符
- 身份运算符
- 条件语句
- if …: elif …: else:
- 循环语句
- while 循环
- for 循环
- 嵌套循环
- break 语句
- continue 语句
- pass 语句
-字符串 - 字符串连接
- 转义字符
- 字符串运算符
- 字符串格式化
- 三引号
- Unicode 字符串
- 常用函数
- string.find(str, beg=0, end=len(string))
- string.format()
- string.index(str, beg=0, end=len(string))
- string.isdigit()
- string.join(seq)
- string.lower()
- string.upper()
- string.lstrip()
- string.rstrip()
- string.strip([obj])
- string.split(str="", num=string.count(str))
- string.startswith(obj, beg=0,end=len(string))
- string.endswith(obj, beg=0, end=len(string))
- string.replace(str1, str2, num=string.count(str1))
- 列表
- 创建
- 访问
- 遍历
- 增删改查
- 排序
- 常用函数
- len(list)
- max(list)
- min(list)
- list.append(obj)
- list.count(obj)
- list.index(obj)
- list.insert(index, obj)
- list.pop([index=-1])
- list.remove(obj)
- list.reverse()
- list.sort(cmp=None, key=None, reverse=False)
- 元组
- 创建
- 访问
- 连接组合
- 删除整个元组
- 常用函授
- len(tuple)
- max(tuple)
- min(tuple)
- tuple(seq)
- 字典
- 创建
- 访问
- 遍历
- 增删改查
- 常用方法
- len(dict)
- str(dict)
- dict.clear()
- dict.get(key, default=None)
- dict.has_key(key)
- dict.items()
- dict.keys()
- dict.values()
- dict.setdefault(key, default=None)
- 日期和时间
- 获取当前时间
- 获取格式化的时间
- 格式化日期
- 常用函数
- time.time( )
- time.localtime([secs])
- time.sleep(secs)
- 函数
- 定义
- 调用
- 传参
- 默认参数
- 不定长参数
- 匿名函数
- lambda函数
- return 语句
- 模块
- 创建模块
- import 语句
- from…import 语句
- 文件IO
- input 函数
- open 函数
- File 对象
- close() 方法
- write() 方法
- read() 方法
- tell() 方法
- seek() 方法
- 文件重命名
- 文件删除
- mkdir 函数
- chdir 函数
- rmdir 函数
- 异常处理
- 标准异常
- 异常处理
- 触发异常
- 自定义异常
- 面向对象
- 创建类
- self对象
- 创建实例
- 访问属性
- 对象销毁
- 继承
- 方法重写
- 基础重载方法
- 运算符重载
- 正则表达式
- re.match 方法
- re.search 方法
- 检索
- 替换
- 多线程
- 创建
- 启动
17、打包工具
- 打AssetBundle
- 代码设置图标
- 代码设置应用名称
- 代码设置版本号
- 代码设置闪屏
- 代码设置分辨率
- 代码设置横竖屏
- 打整包工具
- Windows平台
- Android平台
- iOS平台
- 命令行打包
- Jenkins自动化打包
- Jenkins搭建
- 创建任务
- 执行命令行打包
- 通知企业微信机器人
- XCodeAPI
- 导出XCode工程
- 自动设置XCode工程参数
- 生成ipa
- IL2CPP
- 支持64位系统
- 谷歌AAB格式
- 打包
- 安装
18、实用工具
- Everything
- 快速搜索
- Hash
- 查看MD5
- Snipaste
- 截图
- ScreenToGif
- 录屏Gif
- BCompare
- 文件对比
- HexEditor
- 十六进制查看器
- XMind
- 思维导图
- VirtualBox
- 虚拟机
- 7z
- 文件压缩解压
- Process Explorer
- 超强任务管理器
- PHP Study
- 快速Web服务器
- MuMu模拟器
- 高性能多功能Android模拟器
- AssetStudio
- 逆向Unity资源
- SecureCRT
- Linux远程
- TightVNC
- MacOS远程
- FlashFXP
- FTP工具
19、探索
- AR项目
- VR项目
- 机器学习 ML-Agents
- 流体模拟
七、Unity中高级
1、Lua语言
1.1、八大基本数据类型
- table
- string
- number
- bool
- nil
- function
- thread
- userdata
1.2、注释
- 单行注释
- 多行注释
1.3、 变量
- 全局变量
- 局部变量
1.4、 循环
- while
- for
- break
- ipairs
- pairs
1.5、 流程控制
- if then end
- elseif
- else
1.6、 函数
- function
- 多返回值
- 可变参数
- 匿名函数
- 闭包
1.7、运算符
- 算数运算符
- 关系运算符
- 逻辑运算符
- 其他运算符
1.8、 字符串
- 字符串长度
- 字符串拼接
- 双引号单引号
- 转义符
- 字符串替换
- 字符串查找
- 字符串格式化
- 字符串截取
- 大小写转换
1.9、 数组
- 数组长度
- 增删改查
- 遍历
- 排序
1.10、 表table
- 元素连接
- 增删改查
- 遍历
- 排序
1.11、 元表metatable
- 定义
- 元方法
- 设置元表
- 获取元表
- __index
- __newindex
- 禁止表被修改
1.12、 模块module
- 定义
- require
1.13、 协程
- 创建
- 启动
- 挂起
- 嵌套
1.14、 文件IO
- 创建文件
- 判断文件存在
- 读文件
- 写文件
- 删除文件
- 创建目录
- 判断目录存在
- 删除目录
1.15、 错误处理
- pcall
- xpcall
1.16、 垃圾回收
- 机制
- 流程
1.17、 面向对象
- 类封装
- 继承
1.18、 与C交互
- loadlib
- require
2、通信协议
2.1、ProtoBuf
- 原理
- 使用
- 不同语言版本的ProtoBuf
2.2、sproto
- 原理
- 使用
- 不同语言版本的sproto
3、接入SDK
3.1、Android Studio
- Android Studio安装
- JDK安装与环境变量配置
- 下载Android SDK
- Android Studio配置Android SDK
- Android Studio配置JDK
- 下载Gradle工具
- 设置build.gradle
- Java与SDK交互
3.2、XCode
- 导入SDK包到XCode工程
- Objective-C与SDK交互
- plist配置权限
- 添加SDK系统库
3.3、常见SDK
- 微信SDK
- 阿里支付SDK
- 应用宝SDK
- Bugly SDK
- 高德地图SDK
- 信鸽推送SDK
- MSA SDK
- 广点通SDK
- 华为SDK
- 小米SDK
- OPPO SDK
- VIVO SDK
- BiliBili SDK
- 谷歌SDK
- Facebook SDK
- Line SDK
- 百度SDK
- 九游SDK
3.4、Plugins目录结构
- Android
- libs
- armeabi-v7a
- armv8-64
- x86
- res
- assets
- iOS
- .bundle
- .framework
- .h
- .mm
- .m
- .dll
3.5、Android平台
- .jar包
- .aar包
- .so包
- AndroidManifest.xml
- C#与java交互
- C#与C/C++交互
3.6、iOS平台
- C#与Objective-C交互
3.7、多SDK混接问题
- SDK依赖冲突
- 代码、资源冗余
- 升级SDK麻烦
- 聚合SDK
4、ToLua框架
- 框架下载
- 交叉编译tolua各个平台库
- Windows
- Android
- iOS
- MacOS
- 框架接入
- 资源管理器
- 界面管理器
- 网络管理器
- 声音管理器
- C#与Lua交互
- 使用Lua编写业务逻辑
- 拓展框架
5、热更新
5.1、版本号管理
- app版本号
- res版本号
5.2、热更内容
- 代码热更
- C#代码热更新
- lua代码热更新
- 资源热更
- 配置
- 预设
- 纹理
- 材质球
- 声音
- 其他资源文件
5.3、打包热更包
- MD5
- lua加密
- 资源加密
- 打AssetBundle
- Zip压缩
- 上传Web服务器
5.4、执行热更新
- 获取更新列表
- 判断版本号
- 下载
- MD5校验
- 解压Zip
- 加载AssetBundle
- 文件解密
6、发行
- 多渠道发行
- 重签名
- Android
- iOS
- 差异化
- 渠道号
- APP名字
- APP图标
- APP闪屏
- APP Loading图
- APP Logo
- 应用市场
- 开发者账号
- 创建应用
- 设置元数据
- APP参数
- 接入SDK
- 联调
- 提审
- 上架
- iOS企业签
- iOS超级签
- iOS企业版部署到Web服务器
- plist
- https服务器
- itms-services协议
7、部署
- 云服
- 阿里云
- 腾讯云
- SSH远程
- SecureCRT工具
- 云盘
- oss阿里云
- cos腾讯云
- Linux常用指令
- cd
- mv
- ls -l
- cp
- rz -e
- sz -e
- ps -axj
- df
- top
- history
八、Unity高级
1、设计模式
- 简单工厂模式
- 抽象工厂模式
- 工厂方法模式
- 策略模式
- 单一职责原则
- 开放-封闭原则
- 依赖倒转原则
- 装饰模式
- 代理模式
- 原型模式
- 模板方法模式
- 迪米特法则
- 外观模式
- 建造者模式
- 观察者模式
- 状态模式
- 适配器模式
- 备忘录模式
- 组合模式
- 迭代器模式
- 单例模式
- 桥接模式
- 命令模式
- 职责链模式
- 中介者模式
- 享元模式
- 解释器模式
- 访问者模式
2、游戏框架
- 工程目录管理
- 网络管理
- 通信协议解决方案
- UI解决方案
- Lua框架
- 多语言解决方案
- 多渠道解决方案
- 多SDK混接解决方案
- 对象池管理
- 资源加载解决方案
- 热更新解决方案
- 项目安全解决方案
- 编辑器工具
- 全局配置
- 事件管理
- 场景管理
3、性能优化
3.1、CPU
- 运用对象池,避免重复实例化
- 分帧运算,避免短时超负荷
- 数据缓存,避免重复运算
- 算法
3.2、 GPU
- 使用多层次细节LOD
- 使用光照贴图
- 静态合批和动态合批
- 简化着色器
- 使用平台推荐的压缩格式
- 减少模型面数
- 减少贴图大小
3.3、内存
- 模型区分高低模
- 释放AssetBundle
- 降低模型面数
- 降低骨骼数量
- 降低贴图大小
3.4、 包体
- 压缩图片
- 压缩音频
- 压缩自带库文件
- 拓展包
- 分段下载
3.5、 网络
- 数据流量优化
4、兼容、适配与稳定
- 多架构CPU兼容
- 奔溃率监控
- 日志上报
- Windows版本兼容
- Android版本兼容
- 分辨率适配
- ADB调试
- XCode调试
5、自动化测试
- AirTest
-
客户端下载
-
Poco-SDK
-
设备连接
-
编写脚本
- 获取屏幕尺寸
- 引用其他air脚本
- 元素定位
- 点击元素
- 等待元素出现或消失
- 拖动
- 滑动
- 连续滑动
- 按住n秒拖动
- 长按
- 判断元素是否存在
- 两指挤压收缩操作
- 无效的操作异常
- 节点或属性不存在异常
- 等待超时异常
- 对象已被清除异常
- 自定义poco属性
-
运行脚本
-
生成报告
-
6、图形学与渲染
6.1、OpenGL
- 渲染管线
- 图元
- Draw Call
- 顶点着色器
- 裁剪
- 屏幕映射
- 三角形设置
- 三角形遍历
- 片元着色器
- 逐片元操作
- 固定渲染管线
- 可编程渲染管线
- GLSL语言
- 着色器编译
- 光照模型
- 模板测试
- 深度测试
- 融混
- 帧缓存
- 相机模式
- 齐次坐标
- 纹理映射
- 程序式纹理
- 噪声
6.2、Unity Shader
- ShaderLab语言
- 表面着色器
- 顶点着色器
- 片元着色器
- Cg/HLSL语言
- 点和矢量
- 矩阵
- 矩阵定义
- 齐次坐标
- 平移矩阵
- 缩放矩阵
- 旋转矩阵
- 坐标空间
- 模型空间
- 世界空间
- 观察空间
- 裁剪空间
- 屏幕空间
- 标准光照模型
- 环境光
- 自发光
- 漫反射
- 高光反射
- 逐顶点光照
- 逐像素光照
- 纹理
- 常规纹理
- 法线纹理
- 渐变纹理
- 遮罩纹理
- 透明效果
- 渲染顺序
- 透明测试
- 透明混合
- 双面渲染
- 屏幕后处理
- 调整屏幕亮度
- 调整屏幕饱和度
- 调整屏幕对比度
- 边缘检测(卷积)
- 高斯模糊
- Bloom效果
- 运动模糊
- 噪声
- 消融效果
- 水波纹效果
- 全局雾效
- 渲染技术优化
- 动态批处理
- 静态批处理
- 共享材质
- 减少顶点数
- 模型LOD技术
- 遮挡剔除
- 减少实时光和阴影
- 减少纹理大小
- 利用分辨率缩放
6.3、ShaderGraph
- 入门
- Universal RP下载
- 创建Pipeline Assets
- 设置Pipeline Assets
- 升级shader
- 创建PBR Graph
- 创建变量
- 使用变量
- 创建节点
- 保存Graph文件
- 创建材质球
- 材质球设置shader
- 材质球赋值给模型
- 调整材质球变量
- 案例
- 模型裁切
- 模型溶解
- 边缘光效果
- 卡通阴影色块效果
- 水纹叠加
- 积雪效果
- 不锈钢效果
- UV抖动效果
- 顶点波动
- 马赛克效果
- 水球效果
- 火焰效果
- 旋涡效果
- 闪电效果
- 全息效果
- 高斯模糊
- 自发光
- 粒子系统溶解效果
- 物体靠近局部溶解效果
- 2D描边效果
- 子弹拖尾效果
- 模型上涂鸦
- 刮刮乐效果
7、代码安全
- 代码混淆
- dll加密
- 重新编译mono
- 辅助so库,hook
- IL2CP
- Lua代码加密
8、逆向
8.1、编译技术
- 词法分析
- 语法分析
- 语义分析与处理
- 符号表
- 运行时存储组织
- 优化
- 目标代码生成
8.2、反编译技术
- 逆向分析的各个阶段
- 文件装载
- 指令解码
- 语义映射
- 相关图构造
- 过程分析
- 类型分析
- 结果输出
- 逆向分析框架
- 静态分析框架
- 动态分析框架
- 动静结合的分析框架
- 指令系统
- 机器指令
- 汇编指令
- 可执行文件
- 文件格式
- 文件头
- 字符串表
- 符号表
8.3、资源逆向
- AssetStudio
8.4、C#逆向
- ILSpy
8.5、C++逆向
- IDA
8.6、java逆向
- jd-gui
- dex2jar
8.7、AndroidManifest逆向
- AndroidStudio
9、算法
- 复杂度分析:代码执行效率和资源消耗
- 链表:LRU缓存淘汰算法
- 栈:浏览器的前进和后退功能
- 队列:有限资源池的请求排队
- 尾递归:避免递归过深导致的堆栈溢出
- 排序算法基础:从哪几个方面分析排序算法
- O(n2)排序:为什么插入排序比冒泡排序更受欢迎
- O(nlogn)排序:快速查找第K大元素
- 线性排序:根据年龄给100万个用户排序
- 排序优化:高性能通用排序函数
- 二分查找:省内存快速查找
- 二分查找的变体:快速定位IP地址对应的归属地
- 哈希表:Word软件的单词拼写检查
- 哈希表:打造一个工业级的哈希表
- 位图:网页爬虫中的网址链接去重
- 哈希算法:防止数据库脱库后用户信息泄露
- 树和二叉树:什么样的二叉树适合用数组存储
- 二叉查找树:相比哈希表,二叉查找树有何优势
- 平衡二叉查找树:为什么红黑树如此受欢迎
- 递归树:如何借助树求递归算法的时间复杂度
- B 树:MySQL数据库索引是如何实现的
- 堆:如何维护动态集合的值
- 堆排序:为什么说堆排序没有快速排序快
- 堆的应用:快速获取Top 10热门搜索关键词
- 跳表:Redis中的有序集合类型
- 并查集:路径压缩和按秩合并这两个优化是否冲突
- 线段树:查找猎聘网中积分排在第K位的猎头
- 树状数组:实现一个高性能、低延迟的实时排行榜
- BF算法:编程语言中的查找、替换函数是怎样实现的
- RK算法:借助哈希算法实现高效的字符串匹配
- BM算法:文本编辑器中的查找和替换功能
- Trie树:搜索引擎的搜索关键词提示功能
- AC自动机:多模式串匹配实现敏感词过滤
- 图的表示:存储微博、微信等社交网络中的好友关系
- 深度优先搜索和广度优先搜索:如何找出社交网络中的三度好友关系
- 拓扑排序:确定代码源文件的编译依赖关系
- 单源短路径:地图软件计算出行路线
- 启发式搜索:用A*算法实现游戏中的寻路功能
- 小生成树:随机生成游戏中的迷宫地图
- 流:解决单身交友联谊中的多匹配问题
- 分治算法:大规模计算框架MapReduce中的分治思想
- 回溯算法:从电影《蝴蝶效应》中学习回溯算法的核心思想
- 动态规划:如何巧妙解决“双11”购物时的凑单问题
- 动态规划:如何实现搜索引擎中的拼写纠错功能
九、管理与规范
1、svn管理
- 分支管理
- 拉分支
- 分支合并
- 冲突解决
- SVN还原
- SVN追溯
- 账号管理
- 权限管理
2、策划规范
- 文案格式规范
- office软件版本统一
- 需求工作流规范
- 文档存储规范
- 配置表字段规范
- 原型设计图规范
3、美术规范
- 资源目录规范
- 资源命名规范
- 预设制作规范
- 预设节点规范
- 预设组件规范
- 预设模板
- 预设继承
- 模型结构规范
- 面数规范
- 节点结构规范
- 尺寸规范
- 贴图规范
4、技术文档与沉淀
- 载体
- WIKI
- Confluence
- 技术博客
- 内容
- 模块接口
- 配置说明
- GM命令
- 技术解决方案
- 规范说明
- 工具说明
十、补充:数学基础
1、集合
- 集合基础
- 容斥原理
2、函数
- 定义域、值域
- 函数的性质
- 单调性
- 奇偶性
- 周期性
- 凹凸性
- 连续性
- 可导性
- 有界性
- 收敛性
- 初等函数
- 一次、二次、三次函数
- 幂函数
- 双勾函数
- 指数、对数函数
- 函数的迭代
- 函数方程
3、三角函数
- 三角函数图像与性质
- 三角函数运算
- 三角恒等式、不等式、最值
- 正弦、余弦定理
- 反三角函数
- 三角方程
4、向量
- 向量运算
- 向量坐标、数量积
5、数列
- 数列通项公式求解
- 换元法
- 特征根法
- 不动点法,迭代法
- 数学归纳法,递归法
6、不等式
- 解不等式
- 均值不等式
- 重要不等式
- 柯西不等式
- 排序不等式
- 契比雪夫不等式
- 赫尔德不等式
- 权方和不等式
- 幂平均不等式
- 琴生不等式
- Schur不等式
- 嵌入不等式
- 卡尔松不等式
- 证明不等式的常用方法
- 利用重要不等式
- 调整法
- 归纳法
- 切线法
- 展开法
- 局部法
- 反证法
7、解析几何
- 直线与二次曲线方程
- 直线与二次曲线性质
- 参数方程
- 极坐标系
8、立体几何
- 空间中元素位置关系
- 空间中距离和角的计算
- 棱柱、棱锥、四面体性质
- 体积、表面积
- 球、球面
- 三角面
- 空间向量
9、排列、组合、概率
- 排列组合的基本公式
- 加法、乘法原理
- 无重复的排列组合
- 可重复的排列组合
- 圆排列、项链排列
- 错位排列数
- 计数方法
- 映射法
- 容斥原理
- 递推法
- 折线法
- 算两次法
- 母函数法
- 证明组合恒等式的方法
- Abel法
- 算子方法
- 组合模型法
- 归纳与递推方法
- 母函数法
- 组合互逆公式
- 二项式定理
- 概率
- 独立事件概率
- 互逆事件概率
- 条件概率
- 全概率公式、贝叶斯公式
- 现代概率,几何概率
- 数学期望
10、极限、导数
- 极限定义,求法
- 导数定义,求法
- 导数的应用
- 判断单调性
- 求最值
- 判断凹凸性
- 洛必达法则
- 偏导数
11、复数
- 复数概念及其运算
- 复数的几个形式
- 复数的代数形式
- 复数的三角形式
- 复数的指数形式
- 复数的几何形式
- 复数的几何意义,复平面
- 复数与三角,复数与方程
- 单位根及应用
12、平面几何
- 几个重要的平面几何定理
- 梅勒劳斯定理
- 塞瓦定理
- 托勒密定理
- 西姆松定理
- 斯特瓦尔特定理
- 张角定理
- 欧拉定理
- 九点圆定理
- 圆幂,根轴
- 三角形的巧合点
- 内心
- 外心
- 重心
- 垂心
- 旁心
- 费马点
- 调和点列
- 圆内接调和四边形
- 几何变换
- 平移变换
- 旋转变换
- 位似变换
- 对称变换
- 反演变换
- 配极变换
- 几何不等式
- 平面几何常用方法
- 纯几何方法
- 三角法
- 解析法
- 复数法
- 向量法
- 面积法
13、多项式
- 多项式恒等定理
- 多项式的根及应用
- 韦达定理
- 虚根承兑原理
- 多项式的整除,互斥
- 拉格朗日插值多项式
- 差分多项式
- 牛顿公式
- 单位根
- 不可约多项式,最简多项式
14、数学归纳法
- 第一数学归纳法
- 第二数学归纳法
- 螺旋递归法
- 跳跃递归法
- 反向递归法
- 最小数原理
15、初等数论
- 整数,整除
- 同余
- 素数,合数
- 算数基本定理
- 费马小定理,欧拉定理
- 拉格朗日定理,威尔逊定理
- 裴蜀定理
- 平方数
- 中国剩余定理
- 高斯函数
- 指数,阶,原根
- 二次剩余定理
- Legendre 符号
- Gauss 二次互反律
- 不定方程
- 不定方程解法
- 同余法
- 构造法
- 无穷递降法
- 反证法
- 不等式估算法
- 配方发,因式分解法
- 重要不等方程
- 一次不等方程(组)
- 勾股方程
- Pell 方程
- 不定方程解法
- p 进制进位制,p 进制表示
16、组合问题
- 组合计数问题
- 组合恒等式,不等式
- 存在性问题
- 组合极值问题
- 操作变换,对策问题
- 组合几何
- 凸包
- 覆盖
- 分割
- 整点
- 图论
- 图的定义,性质
- 简单图,连同图
- 完全图,树
- 二部图,k 部图
- 托兰定理
- 染色与拉姆塞问题
- 欧拉与哈密顿问题
- 有向图,竞赛图
- 组合方法
- 映射法,对应法,枚举法
- 算两次法
- 递推法
- 抽屉原理
- 极端原理
- 容斥原理
- 平均值原理
- 介值原理
- 母函数法
- 染色方法
- 赋值法
- 不变量法
- 反证法
- 构造法
- 数学归纳法
- 调整法
- 最小数原理
- 组合计数法
十一、完毕
好了,肝了两天,我已经把我能想到的都写出来了,后面想到其他有补充的话我再继续添加吧,希望可以帮助到学习Unity的同学。
我是林新发:https://blog.csdn.net/linxinfa
原创不易,若转载请注明出处,感谢大家~
喜欢我的可以点赞、关注、收藏,如果有什么技术上的疑问,欢迎留言或私信,拜拜~