- 博客(11)
- 收藏
- 关注
原创 new出的对象数组使用delete或delete[]的情况分析
在翻看这篇文章:为何new出的对象数组必须要用delete[]删除,而普通数组delete和delete[]都一样 时做了一下测试,发现了一些不对,故而在此记录一下自己的分析。本文测试环境:vs2017 debug模式一:基本数据类型:首先,对于基本的数据类型,例如int,char数组,在内存中的分布如下:一个int数组:其内存分布:使用delete int_arr:使用d...
2019-03-23 13:59:36 1684
原创 Unity优化记录(4)——C#(协程Coroutine的优化与设计、闭包的优化)
1、协程Coroutine的优化与设计对于Unity内的协程,在yield return 时不要每次都new一个,可以在之前创建一个变量做为代替。同时我在项目中创建了一个MYXZTimer,方便可以全局地使用协程,并且统一做优化,下文来说明一下设计思路:在开发过程中,往往需要滞后地来调用某个函数,例如网络同步,更新信息等,但是这些类又往往不是继承自Monobehavior的,所以这里通过创建一...
2019-02-27 00:02:29 879
原创 Unity优化记录(3)——C#(如何解决使用enum和struct作为Dictionary的TKey带来的GC)
1、关于在Dictionary中使用Enum作为TKey会带来GC的问题。这个问题是在阅读《2018腾讯移动游戏技术评审标准与实践案例》中发现的,在原书第21页有如下测试代码和测试结果:...
2019-02-26 22:10:22 5283 1
原创 Unity优化记录(2)——场景优化
1、对于场景中的石头可以按批量合并成石堆,然后使用Mesh合并的方式生成新的石堆的Mesh,并设置碰撞体。这样可以在不影响效果的情况下降低开销。示例:...
2019-02-24 23:27:04 521
原创 Unity优化记录(1)——UI
图集1、可以将同一个canvas的图片尽量打包放在一个图集下,对于某些在很多canvas都会用到的图片再打包成一个share开头的图集,表明这个图集里的元素是被多个canvas公用的,并且按照类似的规则打包UI的AssetBundle,目的是为了减少canvas的drawcall。2、例如背景图片等不需要接受输入的UI的Raycast target关闭,以减少点击时来自EventSystem的...
2019-02-24 23:21:38 175
原创 C#迭代器原理详解
迭代器模式迭代器模式提供一个方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示。在C#中,可以通过IEnumerable和IEnumerator来实现这个模式。首先,我按照这两个接口完成了迭代器模式的实现:迭代器模式案例在这个Example中,分别实现了这两个类public class DinerMenu : IEnumerablepublic class DinerMe...
2019-01-29 17:12:46 3496
原创 C/C++和C#中的不定参数
目录C#中的params首先,在C#中,我们一般是使用params关键字来处理不定参数的问题,对于params的用法这里不再赘述。我们先来写一小段测试代码来看看C#中params是如何运作的:我们使用ILSpy来进行反编译,得到它的IL代码:由上图我们可以看到,ParamsTest和ArrayTest的参数都是一个int32的数组,并没有任何区别,ParamsTest只比Array...
2018-12-12 21:28:11 1170
原创 UnintyShader小结(一)——漫反射与高光反射
标准光照模型是经验模型,并不完全符合真实光照现象,但是由于效果和计算速度较好,因而被使用。基本反射原理漫反射漫反射光照符合兰伯特模型(Lambert's law),计算公式如下其中mdiffuse是材质的漫反射颜色。可以看到,兰伯特模型与观察者的位置无关。并且我们需要获得如下变量: struct a2v {
2018-01-27 19:55:40 1910
原创 Unity中UI和游戏物体之间的层级渲染
之前使用一个UICamera和一个MainCamera做场景,希望给场景加上一个BackGround,但是将BackGround和操作的UI都绑在UICamera,将游戏物体正常地用MainCamera渲染时,出现了游戏物体遮挡住Button或者BackGround直接遮挡住了整个场景的情况。在不清楚Camera的渲染方式的时候粗暴地去除了BackGround,用SkyBox来带替,作为游戏背景。
2017-10-15 22:26:18 6940
原创 C++重载原理
倾轧操作void print(int a) //print_i(){} void print(char a) //print_c(){}void print(int a,char b) //print_ic(){}void print(char a,int b) //print_ci(){}与返回类型无关,因而int print(int a) //print_i(){}d
2017-06-20 13:57:41 237
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人