Unity —— AI
Unity学习路线图AI 系统导航 AI navigation
有限状态机 FSM
AI行为树
Unity—— HybridCLR,热更新
https://zhuanlan.zhihu.com/p/485311523 入门介绍 ,知乎
https://hybridclr.doc.code-philosophy.com/docs/other/businesscase 使用文档
https://code-philosophy.com/ 开发商官网
题型总结——leetcode 1870 准时到达的列车最小时速
1870. 准时到达的列车最小时速题目
思路思路来自leetcode的题解
1870. 准时到达的列车最小时速 - 力扣(LeetCode)
最直接的收获是浮点数运算的时候会出现误差,下面同样是摘自题解中的解释,
由于双精度浮点数无法准确表示诸如 2.01 这样的小数,我们在计算 2.01×100 时,算出的结果不是 201,而是 200.99999999999997 这样的数。
所以代码不能直接转成整数,而是要 round 一下。
round()的作用简单来讲就是四舍五入
代码1234567891011121314151617181920212223242526272829303132class Solution {public: int minSpeedOnTime(vector<int>& dist, double hour) { //准时到达的列车时速 int n = dist.size(); long long h100 = round(hour * 100); long long delta = h100 - (n - 1) ...
Unity性能优化——资源优化
资源优化Mesh动态模型:面片数<3000材质数<3骨骼数<50静态模型:顶点数<500
上述是在手游中模型优化的参考标准,
Audio:长时间音乐(背景音乐):使用mp3的压缩格式,主要是减少了安装包的大小
短时间音乐(音效):使用wav的格式 ,经常性的播放,不需要频繁加载,使用mp3则是会频繁的解压缩操作
推荐博客:unity优化—资源优化_unity发布exe时很慢-CSDN博客
有对Unity中音频资源导入的详细讲解
Texture贴图长宽<1024,Unity最高支持2048
Shader尽量减少复杂的数学运算
减少discard操作
资源冗余Resources目录下的所有文件最后都会被打包到安装包中
同样的资源建议存在唯一路径
资源检测与分析AB包上的分析
Unity官方自带的UPR分析工具,第三方工具UWA
UWA | 致力于游戏VR和AR应用提供项目研发解决方案 | 简单优化、优化简单 | 侑虎科技 (uwa4d.com)
性能优化LOD
模型贴图精度调整,原糊近清,直接的参照是图中的组件,在assets文件夹中将对应的模型拖拽到该 ...
Unity——Dots
Unity学习目标
Dots
Unity性能优化
主界面操作窗口
参数解释CPU第一个带ms的数据是完成主线程一帧的时间,第二个是渲染一帧图片的时间,值小点好,
Batches批次,表示调用(Draw Call,也可以简称为DC)的总次数,详见Unityshader的学习笔记,值小点好,在屏幕上输出一个画面
Save by barching有多少DC被合并到了一个批次,将可能然让这个数据大
以下二者的数量统计都是相对于摄像机的视椎体来讲的
Tris屏幕中剩余三角形数量,就算是一个cube在屏幕部分看不见,依然是要计入
verts屏幕中剩余顶点数量,Unity中对于顶点的判断是一个面由两个三角形组成,这两个三角形存在共用顶点,一个cube是有由六个面组成,因为一个cube的顶点数量为 4 * 6 =24
(在3D建模软件中创建的模型导入到Unity后,该模型在Unity中显示的三角面和网格顶点的数量和在3D建模软件中的可能不同。因为3D建模软件和Unity对模型的三角面和网格顶点的计算方式可能是不一样的。)
Screen:屏幕分辨率以及在内存中占据的大小
红框内的数据代表启动 垂直同步
垂直同步解释垂直同步用于将游戏 ...
Unity知识
随机数生成在几秒内连续生成随机数的情况
1234567 Random.InitState((int)Time.time); //使用时间作为每次生成的种子, float randomKey = Random.Range(-5f, 5f); //会生成随机的数字float randomKey = Random.Range(-5f, 5f); //只会返回一个固定的值float randomKey = Random.value * 10f - 5f; //只会返回一固定的值
资源释放对于实现了IDisposable的类来讲,其实例对象都可以通过 using var 来进行对象的获取,这样在超出该对象的作用域后,会默认调用实现的Dispose方法
12345678 using var evt = PlayerRegisterEvent.Get(); //使用using在超出作用域后自动调用Dispose()方法 public void Dispose() { GameEventPool<T>.Push ...
题型总结——leetcode 6 Z字形变换
6. Z 字形变换题目
题解在进入思考状态后,这个对应的公式转换是可以被求出来的,只是因为代码实践上的差异,自己第一次写的时候没能得出正确答案。
常规的解法还是很简单的使用相应的举着进行模拟即可,只是没有什么挑战可言,并且在时间和空间复杂度上也不是很让人满意。
代码123456789101112131415161718192021222324252627282930class Solution { public: string convert(string s, int numRows) { if (numRows == 1 || numRows >= s.length()) { // 如果numRows为1或者大于字符串长度,则无需转换 return s; } string result = ""; int cycleLen = 2 * numRows - 2; // 一个完整Z ...
题型总结——leetcode 151 反转字符串中的单词
151. 反转字符串中的单词题目
题解最先想到是自己去拆解,这里介绍一种新的方法,stringstream,同时,虽然可以通过对原来的空格进行erase操作来实现,但是频繁的改变这东西会导致stirng频繁重新分配内存,建议少用,看看下面的 拆解 的标准答案。
代码拆解123456789101112131415161718192021222324252627class Solution {public: string reverseWords(string s) { ranges::reverse(s); int n = s.length(); int idx = 0; for (int i = 0; i < s.length(); i++) { if(s[i] != ' ') //跳过空格 { if(idx != 0) s[idx++] = ' '; //除去第一个单词外,剩下的单词都要在首部添加一个空格 int en ...
题型总结——leetcode 43 字符串相乘
43. 字符串相乘题目
题解和字符串模拟加法一样,属于必背题型
代码12345678910111213141516171819202122232425262728293031323334class Solution{public: string multiply(string num1, string num2) { int m = num1.size(), n = num2.size(); // 结果最多为 m + n 位数 vector<int> res(m + n, 0); // 从个位数开始逐位相乘 for (int i = m - 1; i >= 0; i--) for (int j = n - 1; j >= 0; j--) { int mul = (num1[i] - '0') * (num2[j] - '0'); ...