高级unity3D客户端需要的技能

架构能力
热更新框架,战斗框架,角色框架,A*寻路,UI框架,网络协议,渲染管线,unity渲染管线

技能1 :热更新框架

为了解决新增内容不重新上传apk
xlua原理:C#可以和lua交互 通过中间语言C lua访问C# C#代码生成适配文件 把所有类 函数都放到一个名为CS的类下面
1.打包 资源和代码进行打包(压缩)记录加密值
2.上传服务器 刷新CDN
3.客户端每次登录游戏都对比加密值 查看是否需要更新资源包
4.客户端下次检测到资源热更新后 对比加密值需要考虑的:新增,删除
5.新增 修改加密值 修改加密值需要考虑的问题 立即修改 立即修改会有什么问题 如果玩家中途退出游戏 下次进入也不会下载了 就是必须要下载完再进行修改
6.进入游戏 使用AB包 使用就是解压的过程 总不能每次使用都复制出来AB包到寄存器 再解压资源包 缓存资源 实例化 存入对象池 再对寄存器进行内存卸载 所以AB包也可以缓存下来
冗余:如果正在使用一个缓存资源(实例化出来了) 你去卸载 卸载掉了 但下次下载 再解压就会有一个内存冗余 所以卸载 需要判断这个资源是否有在使用(引用计数) 再去进行卸载

但并不是所有AB包都需要缓存 那样内存肯定不够用 只需要缓存经常用到的AB包 哪些不需要经常用到的AB包 都是加载出来资源后立即卸载AB包
经常用到的AB包 一般不会自动卸载

技能2:战斗框架 状态机

为什么要用状态机这个框架 主要是为了解耦合
例如:
–待机状态:寻找敌人,找到敌人进入移动状态
–移动状态:跑向敌人,到达可攻击距离,进入攻击状态
如果只是在一个updata里面去进行判断 然后用一个枚举进行逻辑判断也没有问题 但那样一个界面逻辑也太多了
这时候你可以把这些逻辑全部放到另外一个文件夹 也可以把这些单个逻辑写成一个状态文件 状态机应该就是这样问世的吧
结构:1.角色管理状态机
2.状态机管理切换状态时的逻辑 离开上个状态 当前状态设置为切换的状态 并且执行进入该状态的逻辑
3.状态内实现该状态的 进入 退出 更新 逻辑

技能3:角色框架

角色不止需要管理状态机 还有很多的东西 例如:技能,buff,武器装备,天赋等等
AI:
–待机状态:寻找敌人,找到敌人进入移动状态
–移动状态:跑向敌人,到达可攻击距离,进入攻击状态
–攻击状态:执行什么技能
技能:检测攻击的敌人 是否要施加buff
buff: buff的时长 buff施加的对象
一层管理一层 角色管技能,buff
技能管特效

技能4:A*寻路算法

数据:
开启列表(一个字典,一个按照 消耗从小到大排好序的)
关闭列表:已经确定最短的点
格子:自己ID 子ID
逻辑:
寻路消耗 = 离起点的距离 + 离终点的距离
距离计算:绝对值X1-X2 + 绝对值Y1-Y2
*初始化地图 所有障碍(不能到达的点和路途的障碍物)
*寻路的点为自己 return
*出出发点C找周围点 放入开启列表中 从开启列表中找消耗最小的点X 再从X找周围点 放入开启列表中 从开启列表中找消耗最小的点X 以此类推
*每次去找周围的点时 如果这个点是在开启或者关闭列表中就不再管
*每次往关闭列表中放点时 判断这个点是不是和终点一样 一样就说明找完了
*最终的路径并不是已关闭列表为结果 而是通过关闭列表的父节点一直遍历 才能得到正确的路径 避免出现错误路径 遍历到该子节点为自己时 说明路径是完整的
*如果遍历周围的点 并查找最小消耗时发现 开启列表是空的 该点就是无法到达的点

技能5:UI框架

了解UGUI的源码:1.渲染:Image(简单画三角形),Mask(模板测试)的实现
2.优化:合批,网格重建的概念
结构:UI管理器:管理渲染序列,下载AB包,缓存,实例化,对象池
界面:管理子界面,基类(Awake,OnEnable,Updata,OnDisable,OnDestroy),界面消息,点击事件
Lua组件:滑动列表,Image,子界面,界面

技能6:lua实现面向对象

ua语言特性:函数声明需要在函数调用前
继承,重载:setmetatable(table, __index)
多态:可以简单的用local新地址加setmetatable(table, __newindex)

技能7:网络协议

Socket:UDP,TCP
UDP:快速,不安全 原理:不会关心 客户端是否收到消息
TCP:网络不好的情况会卡顿,安全 原理:三次握手
socket:需要了解粘包 分包的原因和解决方案
原因:
1 socket本身就有缓存区
2 链路层有最大传送单元限制 如果包大了 要在IP层进行分包
3 tcp 的流量控制 也会导致粘包
解决方案:
1 定包长
2 包尾加分隔符号
3 包头加上包体长度

技能8:渲染管线

应用:准备渲染数据(网格,摄像机,着色器,材质)优化:合批,剔除
几何:model 模型变换 把物品生成好 位置信息啥的都准备好 从顶点空间转换到世界空间
view 视图变换 = 旋转矩阵 * 平移矩阵 先把物品移动到零点 再旋转 排放相机 位置 Pos
projection 投影变换 模型最终的位置在哪里
顶点着色器,裁剪
光栅化:遍历三角形,判断一个像素是否在三角形内,片元着色器,渲染成像

技能9:unity渲染管线

BRP:内置管线(多平台)
SRP:自定义管线
URP:通用管线(SRP写的)也支持多平台不过是2018年后的unity版本才支持
HDRP:高清管线(SRP写的)主要支持主机平台,vulkan新图形API

扫描二维码关注公众号,回复: 14634065 查看本文章

猜你喜欢

转载自blog.csdn.net/qq_43204246/article/details/121795277