自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(9)
  • 收藏
  • 关注

原创 Canvas重绘

在Image源码的设置颜色代码中,会判断传进来的颜色和当前颜色是否一致,不一致设置顶点为脏数据,加载到重绘的网格元素列表中。我们通过脚本测试发现,改变第一个图片的Image颜色时,发送重新绘制,改变第二个图片的材质球的颜色时没有发生重绘。首先清除为空的和要销毁的布局重绘,之后对布局层级关系排序,最后对布局重绘,发送布局重绘结束回调。我们通过Canvas源码来探究一下,Canvas重绘主要包含网格元素重绘和布局重绘。在Graphic中设置材质球会判断传入材质球和当前材质球是否一致,其他同理。

2023-09-21 15:23:17 505

原创 c#与Lua交互

C#把请求或数据放在栈顶,然后lua从栈顶取出该数据,在lua中做出相应处理(查询,改变),然后把处理结果放回栈顶,最后C#再从栈顶取出lua处理完的数据,完成交互。c#从lua虚拟机中获取栈顶元素的索引,再通过ObjectTranslator.Get方法查找索引的对应数据。lua调用c#,主要是通过调用c#对应的wrap文件(wrap文件包含c#中的每一个类的封装)c#调用lua主要通过虚拟栈来实现,

2023-09-19 21:11:31 118

原创 unity协程底层

C#中的迭代器方法其实就是一个协程,你可以使用yield来暂停,使用MoveNext()来继续执行。当一个方法的返回值写成了IEnumerator类型,他就会自动被解析成迭代器方法,你调用此方法的时候不会真的运行,而是会返回一个迭代器,需要用MoveNext()来真正的运行。unity协程是在主线程执行的,同一时刻只能有一个协程运行,不由操作系统控制,完全受程序控制。协程内部主要含有状态变量state,通过改变状态变量的值,来对协程的运行产生影响。协程的核心就是迭代器。

2023-09-19 20:17:01 93

原创 c#字典底层

最后桶的 index 也是2,则更新buckets[2]=1,Entry[1]存入对应数据,并且Entry[1].next=0;假设我们查找关键字a,由前面得出index=2,找到buckets[2]的值为1,去到Entry[1]中查找键为b,不是我们要找的a,由next查找下标为0的Entry[0],至此找到键为a的数据。字典内部有两个主要的数组,一个是Entry结构体数组-其中存储hash值、键值对、发生冲突指向的上一个Entry位置,一个是buckets数组-存放对应Entry下标。

2023-09-19 20:06:50 91

原创 c#结构体和类的区别

1.结构体不能被继承,结构体是sealed的,内部不能含有abstract,virtual修饰符,可以实现接口。struct是值类型,存放在栈上,由系统分配和释放内存空间,内存分配时还涉及到内存对齐问题。3.结构体初始化可以不使用new关键字,但实例化的结构体需对内部所有字段赋出初值才能使用。class是引用类型,存放在堆上,通过GC回收使用后的内存空间。2.结构体含有默认的无参构造函数,不能再定义默认无参构造函数。4.结构体定义的字段不能在结构体内初始。

2023-09-19 19:19:58 29

原创 欧拉角和四元数

Unity里面的Transform组件里的Rotation是四元数,但是他是以欧拉角(Vector3)的形式展现在我们面前,目的就是为了方便我们修改。例如,我们如图旋转角度,并不是在(11,90,0)的情况下绕x轴旋转一度达到(12,90,0),而是从初始状态开始绕x旋转12,绕y旋转90。使用欧拉角会造成万向节死锁问题-欧拉角旋转具有一定的顺序,绕y轴旋转后,在轴会被带动与z轴重合。其中x,y,z 代表的是向量的三维坐标,w代表的是角度。就是用一个用来描述旋转的三维变量。四元数乘以向量-向量旋转。

2023-09-19 18:37:50 45

原创 unity性能优化大纲

如果动态物体共用着相同的材质,那么Unity会自动对这些物体进行批处理,将物体的顶点信息变换到世界空间,合并这些使用了同一个共享材质的网格顶点数据,形成一个新的大网格,然后传给显存,直接渲染这个大网格就相当于渲染了所有的被合并的小网格,而这只需要一次DrawCall。如果多个对象使用了同一个材质,则unity会一次性将使用了同一材质的对象绘制信息传递给GPU进行批处理,这极大减少了CPU和GPU之间的频繁交互,所以在开发过程中尝试要让多对象共用同一材质,批处理分为静态批处理和动态批处理,

2023-09-19 18:14:43 35

原创 游戏中的数学知识

需满足-人与物体距离小于扇形半径,人和物体的角度θ小于扇形角度二分之一。计算公式:a×b=|a|·|b|sinθ,叉乘得出的结果是一个向量。在面试中,我们经常会遇到一个问题,怎么判断两个对象对应的位置关系。a·b=|a|·|b|cosθ,根据cosθ大小判断对应位置关系。主要用来判断两个物体的左右位置关系,求出两个向量对应平面的法向量。主要用来判断两个物体的前后位置关系,求出两个向量对应的投影。这就需要运用到数学中点乘和叉乘的知识了。如何判断一个点是否在矩阵内。

2023-09-19 17:50:35 67

原创 哈夫曼文件压缩

由于计算机只能存储二进制数,字符串保存字符时我们可以采用定长编码存储,使用这种存储方式占用内存较大。在一个编码方案中,任何一个编码都不是其他任何编码的前缀,则称该编码是。至此,我们就完成了哈夫曼编码过程,长度对于定长编码,压缩了不少。最后根据生成的子树,从根节点开始,左分支为0,右分支为1。" C " 被分配的代码为 " 110 "" D " 被分配的代码为 " 111 "为此,我们可以采用哈夫曼编码来进行压缩-" B " 被分配的代码为 " 10 "" A " 被分配的代码为 " 0 "

2023-09-19 17:30:02 70

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除