- 博客(78)
- 资源 (11)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 Unity优化之Drawcall
一、什么是Drawcalls在Unity中,每次CPU准备数据并通知GPU的过程就称之为一个DrawCall。这个过程会指定一个Mesh被渲染,绘制材质。二、Drawcalls有什么影响为了CPU和GPU可以进行并行工作,需要一个命令缓冲区,由CPU向其中添加命令,然后由GPU从中读取命令,这样就实现了通过CPU准备数据,通知GPU进行渲染。在每次调用DrawCall之前,CPU需要向GPU发送很多内容,主要是包括数据,渲染状态,命令等。所以如果DrawCall数量过多就会导致CPU进行大
2022-09-20 22:48:19
8321
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 彻底搞懂递归的时间复杂度
笔者编码10载,面过很多程序员简历上写着熟悉数据结构和算法,但是对于时间复杂度稍微深入点的问题,都回答的不怎么样,其实还是没懂搞懂算法时间复杂度是一个优先程序员的分水岭先来看letcode一道题,泰波那契序列 Tn 定义如下:T0 = 0, T1 = 1, T2 = 1, 且在 n >= 0 的条件下 Tn+3 = Tn + Tn+1 + Tn+2给你整数 n,请返回第 n 个泰波那契数 Tn 的值。示例 1:输入:n = 4输出:4解释:T_3 = 0 + 1 + 1 = 2.
2021-09-15 00:25:58
14021
12
原创 untiy有渲染线程和逻辑线程嘛
之前我也这么认为,其实unity引擎是单线程的,当然后续的jobs不在考虑范围内。如果你在一个awake 或者 start方法中 延时,是会卡住主线程的。最后还是上图,逻辑帧是在渲染帧的前面执行的。可以试下,整个unity。
2024-08-15 00:27:02
162
原创 Shader中颜色的加法和乘法的区别
最近在抽空复习图形学,我一开始没注意到环境光、漫反射、镜面反射的处理方式是通过向量加法,即ambient + diffuse + specular。直到后来研究多光源时,才发现不同光源的最终光照值也是通过向量加法计算的。这时我才突然想到,之前的颜色向量相乘和颜色向量相加有什么区别呢?从最终计算结果来看,乘法产生的值通常较小,会相互抵消一些原有的颜色。而加法的值会向1靠近,即向白色方向靠近,这意味着光照效果更亮。简单来说,当两个颜色相乘时,表示的是两种颜色的叠加效果,而颜色相加则是为了增强光源的亮度效果。
2024-07-28 14:32:11
201
原创 谈谈如何快速学习一门技术
尽量在公司的项目中去尝试你新学的技术,当然前提是这个技术没啥风险,不然bug一堆也不好收场,尽量在重复做一件事情,不要走老路,可以在设计上,方案使用上尝试一些自己没走过的路。在软件设计行业的第14个年头,我在几万人的大厂 和不到10人的创业小公司都干过,自己有一些自己的观点,今天整理出文字分享给大家,能帮到你是我的荣幸。像皮皮哥这样,这样就可以还有一个对外的交流渠道,也可以把自己所学的归纳整理,是一个很好的正循环过程。3.一些比较难得技术点,你可能平时也很少用到,可以把他用到公司的项目中去。
2024-07-21 09:42:45
160
原创 谈谈我是如何面试技术人员的
1.面试的重点不是为难面试者,自己炫技 2.面试是把他当作你的同事,跟他探讨问题3.尽量对他擅长的点进行深度挖掘4.要引导面试者讲出他擅长的点和深度的点
2024-07-21 09:32:23
147
原创 C# struct里面的class是值类型还是引用类型
但是我补一句,如果一个struct里面有个class是值类型还是引用类型。最近在接连的面试一些候选者,我发现很多候选者对于基础还是一知半解。很多人知道struct是值类型,class是引用类型。很多面试者就答不出来了,其实这是个很简单的问题。
2024-07-21 08:48:15
199
原创 每周读书笔记《财富的真相》
你很难再漠视理财,因为你知道钱是万物的存储,那里存着你的自由;你很难再怨天尤人,因为你已经清楚地知道,其实,所有的一切都是从你自己的时间里挖出来的。而最终的结论用一句话讲就是:在这个越来越好的时代里,只要把时间花到自学、生产、销售、投资中就能赚到钱,然后还有很多的事情值得做。反正,在这个越来越好的时代里,其实人人都可以白手起家,也都可以且应该花掉时间赚到钱,做更多的事。如果钱是时间的存储手段,那么,钱甚至也可以是知识的存储手段,只不过看起来没那么直接而已,并且需要真正的教育愿望作为前提。
2024-07-20 08:33:15
236
原创 读书笔记 《软技能:代码之外的生存指南(第2版)》
我这么说不是为了提高这本书的销量——尽管我很愿意这么做,但是着手写这本书的本意还真不是为了赚钱——我花500小时可以做很多很多更有利可图的事情,写这本书只是因为我认为我们不仅应该不遗余力地做好软件开发人员的本职工作,而且应该做一个好人:去帮助他人。斯多葛主义拒绝命运的摆布,它认为在生活中你所拥有的一切都不是你自己的财产,而是借来的东西,未来某个时间点必须还要归还。斯多葛哲学认为,我们应该超然于这个世界,果断放手一切不在我们掌控之下的事物,我们不要对事物的结果患得患失,我们只需关注自己能够掌控的过程。
2024-07-14 07:08:08
377
原创 C#委托事件的区别
在C#中,委托(delegate)和事件(event:委托是一个引用类型,它可以引用一个或多个具有特定签名的方法。简单地说,你可以将其视为一个类型安全的函数指针。:事件基于委托来实现,但它添加了一层封装,使得对象的其他部分不能直接调用或修改事件,除非是那些声明了这个事件的类。事件通常用于在类之间通信,一个类可以发布一个事件,而其他类可以订阅这个事件。
2023-08-14 13:39:04
739
原创 一图了解前向渲染与延迟渲染
延迟渲染 (Deferred Rendering) 的主要特点是它首先将场景的几何信息和材料属性渲染到几个不同的纹理(称为G-buffer)中,然后在一个单独的步骤中计算最终的光照。这意味着他们可能会首先使用延迟渲染处理不透明的物体,然后使用前向渲染来处理半透明物体。这种方法结合了两种渲染技术的优势,允许场景中的不透明和半透明物体都被正确和高效地渲染。在延迟渲染的第一阶段(几何/材质阶段)中,我们并不真正计算最终的像素颜色,所以这一步无法处理混合。:G-buffer中的深度值通常仅存储最前面的表面深度。
2023-08-11 12:46:48
483
原创 说说我理解的ECS
总体来说我觉得ecs最大的优势是带来,内存的有序分配,不会形成很多零碎的内存碎片,性能是一个比较重要的指标,还有就是可扩展性,需要用到哪个组件就去加载哪个组件,而不是之前的面向对象的继承,但是这个其实没啥,面向对象也能做到目前,最大的优势还是性能的提高。通过将游戏对象分解为实体和组件,以及使用系统来处理这些组件,可以更好地管理游戏的复杂性,并实现高性能的游戏系统。3. **可维护性:** 由于组件和系统是独立的,不同的开发人员可以专注于不同的部分,使得代码更易于维护。好了,我们下面来说说ECS的优缺点。
2023-07-21 11:39:30
339
原创 C++ 几种类型转换
d. 动态转换(dynamic_cast): 动态转换通常用于在继承体系中进行向上或向下的类型转换。c. 重新解释转换(reinterpret_cast): 重新解释转换用于不同类型之间的位模式转换,如将指针转换为整数类型或反之。b. 常量转换(const_cast): 常量转换用于去除常量性(const)或添加常量性(const)。a. 静态转换(static_cast): 静态转换通常用于较为直接的类型转换,如数值类型之间的转换。在C++中,有几种类型转换方法,允许您在不同类型之间进行转换。
2023-07-20 23:22:56
559
原创 Unity基础-Vector3.Lerp的使用给一个简单的实例
当按下space键的时候,正方形从开始点到结束点平滑移动,lerp函数不断生成中间经过的点。
2023-06-28 12:08:01
487
原创 《软件架构之道》c#实现依赖反转
接口定义了模块的行为,而不是实现细节,这样高层模块就可以依赖接口,而不是依赖具体的实现。依赖注入是一种将依赖关系从代码中移除的技术,它允许组件在运行时通过构造函数或属性来接收依赖项,而不是在组件内部创建它们。在上面的代码中,我们使用依赖反转原则,将 Document 类从具体的 Printer 类解耦,使得我们可以在运行时动态地替换打印机实现,从而使代码更加灵活和可扩展。通过应用依赖反转原则,可以提高代码的可维护性和可测试性,因为它使得代码更容易进行修改和扩展,而不需要修改其他部分的代码。
2023-05-10 16:34:20
146
1
原创 《深度工作》一书摘抄
转换任务之后处于注意力残留状态 的人,在下一项任务中的表现通常很差而且残留量越大,表现越糟糕。进入深度工作最好的状态就是断网,远离一切网络相关,手机仍到一个你够不着的地方的。书籍资料可以随意拿到,但是做事的经验和思考这种是宝贵的,经验拿不到的。他不是工薪族,他没有赚钱的顾虑;无限的,从而极大提升你所获的奖励。中矩,你就会陷入困难,因为你的受众很容易在网上找到更好的替代品。,你的处境都和想要超越弗洛伊德的荣格一样,又或是与想要在创业新。,促使公司将关键岗位外包给行业中的翘楚,本地人才的失业率便会极。
2023-05-10 03:00:43
535
原创 《A-Philosophy-of-Software-Design》第三章 工作代码是不够的
Facebook 作为一家公司已经取得了令人瞩目的成功,但是由于该公司的战术方法,其代码库受到了影响。随着时间的流逝,该公司意识到其文化是不可持续的。最终,Facebook 改变了座右铭,即“以坚实的基础架构快速移动”,以鼓励其工程师在良好的设计上进行更多的投资。要考虑的另一件事是,公司成功的最重要因素之一就是工程师的素质。降低开发成本的最佳方法是聘请优秀的工程师:他们的成本不会比普通工程师高很多,但生产率却高得多。好的设计不是免费的。幸运的是,好的设计最终会收回成本,而且比您想象的要早。
2023-04-29 16:31:44
81
原创 从C++角度讲解C#Out和ref的区别
out:out参数类似于ref参数,但有一个重要的区别,即在调用方法之前不需要为out参数初始化变量。这意味着当您将参数传递给一个使用ref参数的方法时,方法可以修改原始变量的值。,就是说你无法把一个数值从out传递进去的,out进去后,参数的数值为空,所以你必须初始化一次。这个就是两个的区别,或者说就像有的网友说的,在C++中,没有像C#中那样的out参数,但可以通过引用(ref)来实现类似的功能。透过两种语言,我们更容易理解一些基础的比较绕的概念,这样的学习方法希望你也能学会。
2023-04-05 14:50:59
822
原创 彻底搞懂洗牌算法
这个算法使用了 Random 类来生成随机数,然后使用 for 循环来遍历整个数组,每次循环将当前元素与一个随机位置的元素交换。注意,由于数组下标是从 0 开始的,因此在生成随机数时需要将上限设为 i + 1。洗牌算法可以通过 Fisher-Yates 算法实现。这个算法的思路是从数组的最后一个元素开始,依次将其与一个随机位置的元素交换,直到遍历整个数组。洗牌算法是面试过程中经常会问到的一个题,如果你没看过,可能一开始还想不出来。
2023-03-28 15:40:02
214
原创 从C++的角度讲解C#容器
C# 中的 Stack 和 Queue 分别是后进先出(LIFO)和先进先出(FIFO)的数据结构,类似于 C++ 中的 std::stack 和 std::queue。C# 中的 HashSet 是一个无序的集合,其中不允许重复的元素,类似于 C++ 中的 std::unordered_set。C# 中的 SortedSet 是一个有序的集合,其中不允许重复的元素,类似于 C++ 中的 std::set。好了,希望对转Unity,学习C#的你有帮助。
2023-03-27 10:53:19
646
原创 c# 泛型约束
例如,如果您编写一个需要使用“+”运算符的方法,但是类型参数 T 并不一定包含此运算符,则可以使用 where T : IAddable 约束来限制 T 必须实现 IAddable 接口,该接口定义了“+”运算符。在这个例子中,方法使用 where T : IAddable 约束,以确保 T 实现了 IAddable 接口,该接口定义了“+”运算符。where T : struct - 此约束指定 T 必须是值类型。where T : class - 此约束指定 T 必须是引用类型。
2023-03-27 03:25:05
600
原创 c# 引用类型还是值类型代码解析
需要注意的是,C# 中的一些类型(如字符串)虽然是引用类型,但是它们的行为更像值类型,因为它们的实例在不可变时可以被重用,而不需要在堆上创建新的实例。生命周期:值类型的实例的生命周期与其所在的作用域相同,而引用类型的实例的生命周期可能会超过其所在的作用域,因为引用可能会被传递到其他作用域中。比较方式:值类型的比较是按值比较的,而引用类型的比较是按引用比较的(即比较两个引用是否指向同一个对象)。传递方式:值类型的实例在传递时是通过值拷贝传递的,而引用类型的实例在传递时是通过引用拷贝传递的。
2023-03-25 00:28:15
114
原创 unity ECS简介
组件是Unity ECS中描述游戏对象属性的基本单元,每个组件只描述一个属性。实体是游戏对象的标识符,组件是游戏对象的属性,系统是对实体和组件的操作。Unity ECS是Unity引擎中的一种高性能游戏开发架构,它采用了基于数据的设计思路,与传统的面向对象编程不同。面向数据:ECS是一种基于数据的编程模型,它着重于描述游戏对象的属性和行为,而不是游戏对象本身。内存布局:ECS使用紧凑的内存布局,使得游戏对象的数据可以更快地被访问,从而提高了游戏的性能。创建实体后,可以通过实体管理器给实体添加组件。
2023-03-07 08:34:43
5188
原创 游戏通用解决方案之红点设计
管理红点状态:每个节点需要维护一个红点状态,表示该节点的红点是否需要显示。例如,当任务完成时,需要更新任务节点的红点状态,并递归更新其父节点的红点状态,直到根节点。例如,根节点可以代表游戏主界面,子节点可以代表不同的游戏模块或功能,进一步的子节点可以代表具体的任务或邮件等。可以通过Unity的UI组件来实现红点的显示和隐藏,例如通过SetActive()函数控制红点图标的显示和隐藏。监听数据变化:为每个节点添加一个数据监听器,当该节点所依赖的数据发生变化时,会触发相应的监听器,从而更新红点状态。
2023-03-06 10:59:56
1103
原创 《Clean Code》读书笔记
优秀的源文件也要像报纸文章一样,名称应当简单并且一目了然,名称本身应该足够告诉我们是否在正确的模块中。最理想的函数参数形态是零参数,其次是单参数,再次是双参数,应尽量避免三参数及以上参数的函数,有足够的理由才能用三个以上参数。编写代码的难度,取决于周边代码的阅读难度。想要快速实现需求,想要快速完成任务,想要轻松的写代码,请先让你书写的代码整洁易读。重复的代码会导致模块的臃肿,整个模块的可读性可能会应该重复的消除而得到提升。带有少量注释的整洁而有力的代码,比带有大量注释的零碎而复杂的代码更加优秀。
2023-03-04 23:34:38
297
原创 使用Unity在材质球上实现绘画:详细解释每一行Shader代码!
sampler2D是一种表示纹理的类型,_MainTex、_BrushTex是两个纹理变量,_MainTex_ST、_BrushTex_ST表示纹理的缩放和偏移量,_BrushScale、_BrushColor分别表示画笔的缩放和颜色。在片段着色器中,我们首先获取当前像素的纹理坐标uv。然后,我们将画笔大小转化为纹理坐标系统中的大小,计算出当前像素到画笔中心点的距离,如果距离小于画笔大小,则将该像素的颜色设置为画笔颜色。在Shader中添加绘画函数:在Shader中添加一个绘画函数,用于在材质球上绘画。
2023-02-24 03:17:57
1214
原创 重读《DOOM启世录》
许多游戏开发者都是网瘾少年,抱着对游戏的热爱进入游戏行业,在经历996的加班加点,买房的压力,浮躁同样跟随着我们,我们是否还热爱着自己的事业,我们不是天才,也成不了卡马克,但是我们最起码要有自己的作品,自己的一点点小成就,这样说起来我们也是不枉此生。
2023-02-22 21:20:41
775
原创 Unity UGUI如何计算drawcall
UGUI在合批之前,会根据ui的Depth、MatID 、ImgID、RendererOrder进行排序,之后对相邻的UI进行检测,判断ImgID和MatID是否相同,如果相同则可以进行合批处理,如果这两个UI的MatID和ImgID都相同,但是不连续,中间有其他不同MatID或ImgID的UI则会打断合批。深度排序之后,就会根据matID进行排序,如果材质相同则对ImgID进行排序,如果也相同,那会根据inspection面板上的RendererOrder,最后真正进行UI的合批。
2022-10-09 19:41:56
812
原创 《unity游戏优化》第8章内存优化
8.闭包很危险,匿名方法和lambda表达式可以是闭包,但不能总是闭包,取决于方法是否使用了它的作用于和参数列表之外的数据。7.协程会消耗少量内存,直到调用yield,避免产生太多短信时间的协成。4.通过引用传递引用类型,可以修改原始的引用的对象数据集。4.对字典键使用obj.GetInstanceID();3.通过值传递引用类型,就可以修改原始引用的对象。1.struct是指类型,class是引用类型。2.通过引用传递值类型,可以修改传入的原始数据。1.通过值传递值类型,只能修改其数据的副本值。
2022-10-07 11:55:15
912
原创 《unity游戏优化》第六章读书笔记
优化移动设备的渲染性能避免alpha测试,消耗资源,利用alpha混叠来避免最小化drawcall最小化材质数量最小化纹理大小 1024*1024确保纹理是方形且大小为2的幂次方着色器尽可能使用最低的精度格式
2022-10-07 10:22:26
956
原创 《unity游戏优化》第一章读书笔记
5.Update,Coroutines 和InvokeRepeating。从GameObject中检索字符串属性是另一种意外跨域本机-托管桥接。7.避免从GameObject取出字符串属性。当然,只有这些计算都生成相同的结果,才有效。多个对象共享某些计算结果,可节省性能开销。6.更快的GameObject空引用检查。1.使用最快的方式获取组件。2.移除空的回调定义。
2022-09-26 20:58:30
352
转载 Unity Dotween使用优化,1ms优化
最近在继续做性能优化,后续空下来尽量总结一些小的优化点分享出来。这些都不是大的优化,只是积少成多的改善。
2022-09-23 00:20:12
1135
原创 子线程渲染技术和AC自动机
原因:在玩家较多,且时装坐骑等差异化较大时,客户端帧率低,卡顿明显思路:将渲染放在子线程进行,使逻辑处理和渲染可以同时进行,提高并行处理能力,提高客户端运行效率,提升帧率,缓解卡顿
2022-09-22 11:23:53
232
原创 python 批量修改文件夹的后缀名
# -*- coding:utf8 -*-import osimport randomdef rename(path): oldpath = path pos1 = path.find('.luac') # pos2 = path.find('_', pos1+5) newpath = path[:pos1]+'.lua' os.rename(path, newpath) # 对文件进行重命名def test(path): file...
2022-04-23 13:40:16
642
1
敏感词过滤软件
2012-12-12
vc6.0 win7兼容第二个分卷
2010-07-21
win7 vc6.0完全兼容
2010-07-21
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人