unity 优化
介绍游戏性能优化的必要性
游戏启动优化Resource文件夹(是否可以存放很多东西)
游戏启动优化MonoBehaviour (Mono类应该使用多少,这些类逻辑应该是什么样的)
重复资源优化(会出现哪样问题)
纹理设置优化(减少内存提高效率)
纹理MipMap选择
纹理压缩优化 (对不同平台,每个平台格式不对会怎么样,比如重新解压)
非角色模型优化(脚本控制优化,减少渲染)
动画模型优化(提升了什么)
网格优化(对游戏点面处理的优化)
字符串优化1(拼接,比较,如果在update中不正确调用)
字符串优化2
集合List优化 (内存分部销毁)
闭包优化(什么时候调用合适,怎么规避怎么优化)
字典和枚举优化(内存分布,遍历效率)u
foreach优化(什么时候用forin 什么时候用for代替)
数组优化(少用多用List)
正则表达式优化
矢量运算顺序优化
颜色转换优化(颜色是自带的还是unity自带api)
object查找优化
摄像机访问优化(单例访问优化)
log输出优化(日志单打印,debug处理)
方法调用优 ...
c++ 和c11
内存分配
内存区域
描述
分配和释放方式
特性
堆
使用malloc、free动态分配和释放空间,能分配较大的内存
malloc/free
1. 需要手动申请和手动释放2. 能分配的内存较大3. 分配和释放内存可能产生内存碎片4. 分配效率较低5. 地址从低向上
栈
为函数的局部变量分配内存,能分配较小的内存
由操作系统自动分配和释放
1. 自动申请和自动释放2. 能分配的内存较小3. 不会产生内存碎片4. 分配效率高5. 地址由高向下
全局/静态存储区(.bss 和 .data段)
用于存储全局变量和静态变量
编译器分配和释放
存储全局和静态变量的生命周期(未初始化在.bss段,初始化的在.data段)
常量存储区(.data段)
专门用来存放常量
编译器分配和释放
存储常量,不可修改
自由存储区
通过new和delete分配和释放空间的内存,具体实现可能是堆或者内存池
new/delete
1. 是C++的术语,抽象概念2. 可以通过重载操作符使用其他内存实现3. 对于自定义对象,能调用构造函数和析构函数
代码区(.text段)
存放代码,不允许修改, ...
git commit规范
前言
每次对于团队协作Git时,规范Git分支和Git Commit是很有必要的。
这是本人收集大厂实现的提交规范
Git
分支名
简介
Production 分支(main)
也就是我们经常使用的 Master (main)分支,这个分支最近发布到生产环境的代码,最近发布的Release, 这个分支只能从其他分支合并,不能在这个分支直接修改。
Develop 分支(dev)
这个分支是我们是我们的主开发分支,包含所有要发布到下一个 Release 的代码,这个主要合并与其他分支,比如 Feature 分支。
Feature 分支
这个分支主要是用来开发一个新的功能,一旦开发完成,我们合并回 Develop 分支进入下一个Release。
Release 分支
当你需要一个发布一个新 Release 的时候,我们基于 Develop 分支创建一个 Release 分支,完成 Release 后,我们合并到 Master 和 Develop 分支
Hotfix分支
当我们在 Production 发现新的 Bug 时候,我们需要创建一个 Hotfix ...
面筋
春招
第一家 广州 寄
首先问一下学习unity 多久了
C++ 在学校是怎么学习的 – oop 没有C11
那就问一个C#问题 List底层是什么
无序数组怎么增加增删的效率 –增:在最后增加 删:swap最后然后在最后删 (堆排序?)
聊天:lua现在好像淘汰 C# 技术栈就够 huatuo
场景题: 水果忍者 怎么随机生成水果和角度
场景题 : 水果忍者 怎么切割
第二家 杭州 oc
首先问一下学习unity 多久了
回答:大一下暑假断断续续,也是一年多
介绍一下杀戮尖塔项目
热更做了吗(没有)那做了什么
回答: 做了一个lua xlua的背包系统 写了个ABmanager 然后写Panel 后面补充了BasePanel的框架
有使用过unity的性能工具吗?有遇到性能问题吗
没有,但是大概知道理论
在CPU 和 GPU 方面的优化 大概了解吗
CPU : 代码层面:框架,缓存池 批处理:静态批处理 空间换时间
GPU : 太卡没回答
说一下你关于状态机的使用(后面有说公司项目有多用状态机来 ...
unity热更新AB包
前言热更新是手游平台对于游戏的一种特殊更新技术,本篇将讲解AB包的资源热更和Lua的代码热更
热更新AssetBundle详解 - 知乎 (zhihu.com)
[Unity AssetBundle的打包 发布 下载与加载_assetbundle下载-CSDN博客](https://blog.csdn.net/newchenxf/article/details/124738469#:~:text=2.1 AB包的文件结构 1 将想要动态加载的资源添加到AssetBundle (可以有多个bundle) 2 要发布时,做打包工作 3,自己把bundle上传到服务器,服务器管理版本 4 客户端下载bundle,版本不匹配(md5校验啥的),则下载新bundle 5 加载指定路径的bundle,提取文件 6 卸载bundle, 节约内存)
AssetBundle 基础AssetBundle又称AB包,是Unity提供的一种用于存储资源的资源压缩包。
Unity中的AssetBundle系统是对资源管理的一种扩展,通过将资源分布在不同的AB包中可以最大程度地减少运行时的内存压力,可以动态地加载 ...
计算机网络基础
前言计算机网络部分
OSI模型tcp/ip模型
五层模型
作用
应用层
为应用程序提供交互服务。在互联网中的应用层协议很多,如域名系统DNS、HTTP协议、SMTP协议等。
传输层
负责向两台主机进程之间的通信提供数据传输服务。传输层的协议主要有传输控制协议TCP和用户数据协议UDP。
网络层
选择合适的路由和交换结点,确保数据及时传送。主要包括IP协议。
数据链路层
在两个相邻节点之间传送数据时,数据链路层将网络层交下来的 IP 数据报组装成帧,在两个相邻节点间的链路上传送帧。
物理层
实现相邻节点间比特流的透明传输,尽可能屏蔽传输介质和物理设备的差异。
OSI模型
层级
名称
描述
7
应用层
计算机用户、应用程序与网络之间的接口,提供网络服务及应用所需的监督、管理和服务等协议,负责协调各个应用程序间的工作。
6
表示层
对来自应用层的命令和数据进行解释,处理用户信息的表示问题,如编码、数据格式转换和加密解密,并传送给会话层。
5
会话层
用户应用程序和网络之间的接口,组织和协调两个会话进程之间的通信,并对数据交换进行管理。
4
...
前端学习路线
前言
今天突发奇想找一下前端的学习路线,毕竟也是前端出身的
(unity客户端也是游戏前端不是吗)
推荐文章
【干货】前端学习路线分享!写了个网站帮助你学习前端!_哔哩哔哩_bilibili
前端学习路线 (objtube.github.io)
前端学习路线(很长,建议收藏) - 知乎 (zhihu.com)
看到一个网友的评论
第一步: 掌握HTML/CSS这是你最初必须掌握的是网站的构建元素没得选!随着你前端的学习进程,熟练掌握HTML/CSS简单易学
第二步: 使用基础工具文本编辑器: Notepad2 / Sublime Text / Atom.io / IDE图像编辑器:Photoshop, Illustrator, GIMP, Something slseFTP / SSH 工具 : Filezilla ,Putty好的浏览器: Chrome云盘: Dropbox, Google Drive, Box
第三步: 学习原生JavaScript原生JavaScript(现阶段不需要理会Node.js 和任何框架)理解数据类型: String, Number, Array ...
UGUI 优化- DrawCall
前言
UI优化核心就是一点:减低DrawCall对于DC(DrawCall)问题来说
是游戏客户端程序员头疼以及及其影响性能的重大原因之一
DrawCall介绍简而言之,Draw Call 就是你的CPU要求你的GPU绘制一些东西。就是你的CPU在说:嘿,用这些纹理和照明信息在那角落画这张椅子。
12CPU准备好需要绘制的元素,对底层图形程序接口进行调用的过程。也可以理解为:CPU向GPU发布一条渲染指令,就是一次DrawCall的过程。简称DC。
DC作用问题是,准备Unity Draw Call会占用CPU大量的时间和精力。Unity必须将场景内容转换为GPU可以理解的格式。这个过程开销最昂贵的部分是设置正确的渲染参数,例如纹理,着色器,网格等。
手动设置渲染参数很繁琐。这就是游戏开发人员引入材质概念的原因。
这是否意味着我们不能一次绘制太多对象?
不是的。
游戏开发人员使用批处理将相似对象的渲染分组到同一个Draw Call中。这样,CPU只需支付一次绘制调用即可渲染多个对象。
在使用批处理时,我们要求GPU一次在这里,那里和后面画三把椅子,而不是在三个不同的时间。
为什 ...
关于CLR模型-GC
前言
对于C#的内存模型而言 CLR是最主要的处理内存的”中心”
类比下,C#是司机,.Net是汽车,CLR是引擎
本文可能后续还有补充,目前以GC为核心解析
基础概念
.Net:以下这些技术的统称
.Net Framework/.Net Core/Mono:3种将.Net技术打包发行的方式,其选择的组件不一定相同
CLR:Common Language Runtime 一个执行引擎,用于进行一类程序(CLI),提供类型系统、垃圾回收、JIT等功能;目前有3个主要实现,分别为coreclr用于.Net Core、desktop clr用于.Net Framework(有了coreclr之后才获得的一个相对”名称)、Mono(没人给其中的runtime部分单独取名)
CLI:Common Language Infrastructure 一个经标准化组织认证的标准(ECMA-335),定义了CLR的基础功能和其上执行的程序的标准
IL:Intermediate Language 用于将程序直接输入CLR的格式,包含二进制格式与其对应的文本格式;IL中的任何构造都与CLR内部严格一一对 ...
C# 高级语法
前言
关于C#高级语法在重新拾起后发现很多有趣以及好用的特性与语法糖
本篇关于高级语法包括: 属性 常量 字段 泛型 委托 事件 匿名函数 lambda 协变逆变 预处理指令 反射 特性 多线程 迭代器
基础属性 get set定义 :属性Property—-看起来像变量的函数 如下
12345678910111213141516partial class Human{ public int Age{ get{ Log($“getAge{age}”); return age; } set{ Log($”setAge{age}=>{value}”); age=value; } }}//mainHuman human =new human();human.Age=32;//属性读写
这 ...