- 博客(115)
- 资源 (9)
- 收藏
- 关注
原创 Unity 网格模型及优化
在渲染引擎的时候,每个子网格都要匹配一个材质球来做渲染,实际上一个子网格本身就是一个个普通的模型,它由很多个三角形构成,也需要材质球支持达成渲染。
2024-11-11 23:34:49
1944
原创 美术资源规范
很多项目都没有重视资源规范,而是不断追求更高的运行效率。然而资源规范在项目中是非常重要的,资源规范才是高效运行的前提。在有的项目中,一个人物模型几万个面、一个建筑模型就几十万个面,贴图也不规范,1024、2048像素的贴图一大堆,动画骨骼甚至多到百来个,资源没有规范很容易导致加载过慢、画面卡顿、渲染压力过大、骨骼数量过多导致CPU消耗过大。对于美术资源来说,模型面数并不是越多越好,而是应该在一定数量的限制下尽量最大的努力做到最好的美化。贴图也是要在一定大小的限制下做到最大限度的不是真。
2024-11-09 18:00:35
937
原创 Unity UGUI的核心渲染组件
在UGUI中常用的组件有Image、RawImage、Mask、RectMask2D、Text、InputField中,Image、RawImage、Text都继承自MaskableGraphic, MaskableGraphic 又继承自Graphic。所以Graphic是一个非常重要的类。让我们来对着Graphic的源码分析用作原理。方法将设置并通知元素重新布局、重新构建网格及材质球。该方法通知布局管理类进行重新布局,在中,它调用加入重构队伍,最终重构布局。都调用了。
2024-09-22 21:39:15
1625
原创 浮点数精度问题
浮点数由三部分组成:符号位(1位):表示数值的正负。指数部分(通常8位或11位,取决于单精度或双精度):表示数值的大小范围。尾数部分(也称为有效数字,通常23位或52位):表示数值的精确度。
2024-09-09 18:09:11
2299
原创 浅谈-Unity内存管理
总结就是CPU访问内存是一个非常慢的过程,由于数据在不同层级cache以及主寸之间的转移是以cache line(64Bytes)为单位, 而从不同层级cache的速度差异可以看出,为了达到更快的数据访问速度,我们需要尽量发挥cache的局部性特征,将计算时序上相邻的数据在内存地址上安排在一起,目标是实现一次读取到高层次cache的数据即可供后续的多次运算使用。有的音频会存在双声道,但是有很多单声道的声音倍设置成了双声道,这就意味着一个 1M的声音,会变成2M的内存,这2M不仅在包体里,也会在内存里。
2024-09-01 22:33:42
2143
原创 三消自动跑关AI
前段时间为了提升游戏数据,保留存、拉付费。游戏设计的核心方面是难度及其对玩家体验的影响,度太简单,玩家无法充分投入,难度太难,玩家会感到沮丧,从而退出游戏。于是搞了一个三消自动跑关的AI,通过收集线上玩家数据,与AI的打关数据进行拟合,找出最合适薅羊毛点,以及保流失率的点,进行关卡调整,或者动态干预关卡难度。一下是我对于实现AI跑关做的一些调研,和拟合玩家数据提高游戏数据翻一些论文后做的一些记录。
2024-08-29 15:55:52
1280
2
转载 Protobuf、MessagePack、MemoryPack 序列化协议该如何选择
总的相关数据如下表所示,原始数据可以在文末的Github项目地址获取:从图表来看,如果要兼顾序列化后大小和性能的话我们应该要选择,它序列化以后的结果最小,而且兼顾了性能:不过由于MemoryPack目前需要.NET7版本,所以现阶段最稳妥的选择还是使用Lz4压缩算法,它有着不俗的性能表现和突出的序列化大小。回到文首的技术选型问题,笔者那个项目最终选用的是这个序列化协议和框架,因为当时考虑到需要和其它语言交互,然后也需要有较小空间占用,目前看已经占用了111GB的Redis空间占用。
2024-08-29 15:32:15
1665
1
原创 正则表达式 速成
1.我这边举的例子算比较复杂的,但是拆解之后可以看出并不难2.当你不理解含义的时候直接点击参考理解即可:3.合理的使用正则表达式到工作中可以大大的提高工作效率4.正则表达式回了就不难5.不用死背表达式,忘了就来网址上找就行。
2024-04-10 17:48:06
1029
原创 Unity 主线程和其他线程之间的数据访问
在Unity中,主线程和其他线程之间的数据访问需要小心处理,因为在多线程环境下,不当的数据访问可能导致竞争条件和数据不一致性。在Unity中,主线程通常用于处理用户输入、更新游戏逻辑和渲染。其他线程通常用于执行耗时的计算、加载资源或者网络操作。为了在不同线程之间安全地访问数据,你可以使用以下方法:主线程和其他线程之间的通信可以通过Unity的线程安全的数据结构,如ConcurrentQueue和ThreadSafeDictionary来进行。
2024-04-08 18:46:58
1523
原创 光栅化算法
多数计算机图形图像,是通过光栅显像显示给用户的,这种系统将图像作为像素阵列进行显示,像素(pixel)即图像元素(picture element)的简称。这些像素采用RGB颜色空间。本文讨论光栅显像的基本原理,着重讨论RGB颜色系统和标准图像显示器存在的非线性。
2024-03-01 16:39:32
1669
1
原创 Unity Image - 镜像
即九宫格裁剪后映射到Image顶点上的四个位置,所以当我们向做水平映射的时候只需要平移和 3和4 x轴相等的顶点,与1和2 x轴相等的顶点保留原来的位置。矩形的宽w:100,h:100,矩形自身的中心点(蓝色的圈) 这边为称为O点,在Unity中是以 Rect中的 x,y代表的是坐下角的点 既 (-75,-50),如上图所示,原来图片是白色区域大小,顶点为白色图片的四个顶点,因为要做对称,所以需要留出一半的位置来增加映射后的顶点。A 到 (0,0)的距离 == B到(0+z)的距离,所以。
2023-12-01 11:42:23
1093
原创 Unity - Graphic解析
Graphic 是 Unity最基础的图形基类。主要负责UGUI的显示部分。由上图可以看你出我们经常使用的Image,Text,都是继承自Graphic。
2023-11-26 20:27:34
918
转载 MessagePack 序列化组件
MessagePack for C#(MessagePack-CSharp)是用于C#的极速MessagePack序列化程序,比MsgPack-Cli快10倍,与其他所有C#序列化程序相比,具有最好的性能。MessagePack for C#具有内置的LZ4压缩功能,可以实现超快速序列化和二进制占用空间小。性能永远是重要的!可用于游戏,分布式计算,微服务,数据存储到Redis等。支持.NET, .NET Core, Unity, Xamarin。
2023-11-06 15:07:56
1450
原创 游戏中的-雪花算法
雪花算法(Snowflake)是一种生成唯一ID的算法。在游戏开发过程中会为玩家生成唯一的id,或者玩家获得一件装备,为这件装备生成唯一的Id,将此角色和装备的Id保存于数据库当中。
2023-11-03 11:08:44
386
原创 Unity Shader 透明度效果
代码上实际上没几句,主要还是需要理解上面 透明度测试,透明度混合,什么是深度写入,为什么要开启写入和关闭写入的原因。
2023-09-24 11:00:41
976
原创 Unity shader - 纹理采样
对于三维模型,有两个最重要的坐标系统,一是顶点的位置(X,Y,Z)坐标,另一个就是UV坐标。什么是UV?简单的说,就是贴图影射到模型表面的依据。完整的说,其实应该是UVW(因为XYZ已经用过了,所以另选三个字母表示)。U和V分别是图片在显示器水平、垂直方向上的坐标,取值一般都是0~1,也 就是(水平方向的第U个像素/图片宽度,垂直方向的第V个像素/图片高度)。那W呢?贴图是二维的,何来三个坐标?嗯嗯,W的方向垂直于显示器表面,一般 用于程序贴图或者某些3D贴图技术(记住,确实有三维贴图这种概念!
2023-06-24 16:25:50
1890
原创 Unity Shader - 高光反射(Phong、Blinn-Phong)
高光反射 = 光源颜色 * 反射颜色 ∗ pow( max(0, 视角v与光反射向量r的余弦值) , 光泽度)高光反射 = 光源颜色 * 反射颜色 ∗ pow( max(0, 半角向量h与法线n的余弦值) , 光泽度)可以看到逐顶点渲染和逐像素渲染的区别:逐片元更加细腻。看下效果 左边是逐顶点,右边是逐片源。高光反射光照模型分为。
2023-06-11 19:00:26
851
原创 Unity Shader - 兰伯特漫反射
光源颜色 * max(0,cos(光方向和法线的夹角))公式原理:从上面图片可以看出光照方向 L 与物体法相 N形成的 余弦值越大,反射光越大,角度为0度的时候最强 Cos(0) = 1,大于等于90度的时候为0 Cos(90) = 0;所以我们首先需要计算出和的角度的余弦值。
2023-06-10 16:41:11
1510
原创 Unity DOTS从原理到应用
Unity的DOTS(Data-Oriented Technology Stack)是一种数据驱动的技术堆栈,旨在提高Unity游戏引擎的性能和可伸缩性。它使用C# Job System,Burst Compiler和Entity Component System(ECS)来组合和处理数据,让游戏运行更高效率。DOTS使开发人员可以使用最新技术来开发游戏,并在追求最高质量与性能之间取得平衡。通过使用DOTS,游戏开发人员可以轻松地运行具有高度优化的代码,并能够开发更具可伸缩性、更易于调试和维护的复杂游戏。
2023-05-25 18:30:46
2179
原创 Unity 基于Jenkins自动化打包流程
Jenkins是一款开源 CI&CD 软件,用于自动化各种任务,包括构建、测试和部署软件。Jenkins 支持各种运行方式,可通过系统包、Docker 或者通过一个独立的 Java 程序。
2023-04-05 17:44:43
2484
4
原创 Unity 生成 Android 密钥.keystore
keytool -genkey -alias 【别名】-keyalg 【加密算法】-validity 【有效天数】 -keystore 【密钥完整路径】‘keytool‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件。,于是直接使用命令行进入到jdk环境下进行生成。
2023-04-05 12:17:24
1192
原创 Window 命令行与bat批处理文件总结
rd 文件夹名 /s /q (删除当前目录中的文件夹包括子目录和子文件 /s 表示删除子文件夹与子文件 /q 表示不需要删除请求 安静模式)replace e:\work\测试.txt e:\q (使用 e:\work\测试.txt 去替换 e盘下面q文件夹下的 测试.txt)xcopy 文件夹路径 目标文件夹路径 /d:月-日-年 /s /y(将文件夹里的某个时间改变之后的文件拷贝到目标路径)copy 文件夹名称 文件夹路径 (拷贝文件夹下的文件到目标路径(不递归子目录))
2023-03-20 13:55:08
3135
原创 Unity资源热更新框架
游戏上线后,玩家下载第一个版本(1G左右或者更大),在之后运营的过程中,如果需要更换UI显示,或者修改游戏的逻辑,这个时候,如果不使用热更新,就需要重新打包,然后让玩家重新下载,很显然体验非常不好。热更新可以在不重新下载客户端的情况下,更新游戏的内容。如王者荣耀,经常有下载补丁的时候。
2023-03-09 14:29:40
2751
5
原创 Unity - 自定义Hierarchy面板
调用了Unity.Editor中的HierarchWindowOnGui函数来添加自定义内容。创建一个自定义Hierarchy脚本放在Editor文件夹下,使用 [
2023-02-03 14:19:41
965
原创 Unity - UI适配方案记录
在所有需要缩入安全区域的组件上,添加SafeArea脚本。其中16:9的范围为精细范围,12:9的范围为真机最小可见范围。注:在实机上,安全区是由机器本身决定的,各机型的安全区分辨率各有不同;插件预览仅做正确性测试用。在unity中,设置Game窗口左上角的分辨率即可预览效果。注意:最终效果需以真机测试为准。各组件通过设置RectTransform属性来达到正确适配的效果。",选择机型,点击左上角的Update Previews。通过下文"整体预览插件"即可预览各机型异形屏效果。
2023-02-03 10:31:55
1815
原创 Unity - TextMeshPro
更方便的做法是专门创建一个用于补字的兜底字库,将它放在fallbackList的最后,其对应ttf字体包含几乎所有字形,其CharacterSequence仅按需添加。最终保存为asset文件。由于 TextMeshPro 创建的几何图形每个字符使用两个三角形,就像 Unity 的文本组件一样,因此这种改进的视觉质量和灵活性没有额外的性能成本。在这个前提下,我们希望各个字库间尽可能无重复(防止不同语言下看同一个字的样式不同),所以我们需要将源ttf文件进行子集筛选,让它仅存在对应语言的字,或仅存在符号字。
2023-02-02 17:08:18
10361
原创 Unity 如何实现背景模糊?
将渲染后的texture赋值给RawImage图片。将相机视图渲染到texture上。准备一个模糊Shader。
2023-01-15 17:54:30
2014
原创 Unity 如何获取、设置和配置活动渲染管线
(SRP) 的渲染管线,其中包括通用渲染管线 (URP) 和高清渲染管线 (HDRP)。要渲染内容,Unity 可以使用内置渲染管线或基于。将 URP 设置为活动渲染管线。
2023-01-15 09:59:55
2139
原创 Unity 渲染优先级总结
RenderQueue > 2500 物体一定显示在 RenderQueue Sorting Layer > Order in Layer > RenderQueue。需要注意的是 RenderQueue 2500是关键值,他是透明与不透明的分界点。
2023-01-12 13:34:43
1407
原创 Unity 扩展编辑器 - Inspector 面板特性用法整理
ContexMenuItem("Funcl","Text")] : 使其在Inspector面板鼠标,右键点击该变量时,出现一个按钮第一个参数 表示 按钮的名字 ,第二个参数,表示要执行的方法,保证要有该方法且需 要成员方法。(typeof(BoxColider))] : 该特性 意思是, 修饰的类依赖于参数里的类,当修饰的类挂到物体上时,会检查该物体上是否有依赖的组件,如果有,不会重复的添加,如果没有依赖的组件,会默认添加依赖的组件。注: 参数只能显示在面板操作的最大最小值,并不能限制实际的值。
2022-11-10 14:03:38
1374
1
原创 资源加载框架之-AssetBundle打包管理
导出的xml文件里里可以直观的看出 Assets/Resources/UI/Prefab/Win/Hero/Win_Hero 文件依赖了imageAB包。容易产生冗余AB包;文件夹或文件等AB包名设置混乱,难以管理。不会生成冗余的AB包,文件AB包名设置简单方便,容易管理。对于新手理解又一定难度。上手简单,方便操作。
2022-10-11 14:26:18
1577
7
原创 Unity拓展编辑器 一键导出图集工具
在项目开发过程中我们必不可少的会将美术给的资源打包成图集来降低drawcall,减少包内存。为了方便的生成图集,以及生成图片路径配置来方便通过图片名称快速定位所在的图集以及图片位置。
2022-09-16 16:16:28
1651
原创 树形布局算法的实现
从最后一层开始,判断同一层相邻的叶子节点(n1,n2)是否重合,重合 移动 n1与n2共同的父节点下的n2的父节点 parentNode,向下一个yInterval间距.由于移动了parentNode,parentNode的父节点中心就发生了偏移,所以中心对齐parentNode的父节点下的叶子节点。算法思路是简单的,不过实现起来我是碰到了一堆问题,特别是递归导致卡死又得重启项目。布局叶子节点位置(由于每棵子树的宽度都不一致,必定导致叶子节点重合)最近做了一个科技树的功能,如上图树形结构,
2022-08-23 18:53:11
1648
原创 Unity 拓展编辑器 - 导出UI预制体lua文件
最后编写一个导出类UIDialogExport,这里使用一个模板.txt的文件将里边的类名替换成界面或者模块的名称。在为界面配置类编写一个专门的Inspector显示类DialogConfigEditor。编写一个组件收集器用于提取出需要动态修改、操作的组件如按钮,图片等。界面配置基类UIDialogConfig。+Unity自带拓展编辑器编写。......
2022-07-28 11:42:56
1495
原创 Lua __index元方法和__newindex元方法 C# get set 实现
当访问一个表中不存在的字段时会得到nil。这是正确的,但不是完整的真相。实际上,这些访问会引发解释器查找一个名为__index的元方法。如果没有这个元方法,那么像一般情况下一样,结果就是nil;否则,则由这个元方法来提供最终结果。假设我们需要创建一个UI界面,包括位置x,y 宽高 width,height,当我们创建一个窗口的时候需要放回默认的值大小__newindex元方法元方法__newindex与__index类似,不同之处在于前者用于表的更新而后者用于表的查询。当对一个表中不存在的索引赋值
2022-06-30 19:00:37
345
原创 Lua 库定义相关的元方法 __tostring
我们见过的所有元方法针对的都是核心Lua语言。Lua语言虚拟机(virtual machine)会检测一个操作中涉及的值是否有存在对应元方法的元表。不过,由于元表是一个普通的表,所以任何人都可以使用它们。因此,程序库在元表中定义和使用它们自己的字段也是一种常见的实践。函数tostring就是一个典型的例子。正如我们此前所看到的,函数tostring能将表表示为一种简单的文本格式:函数print总是调用tostring来进行格式化输出。不过,当对值进行格式化时,函数tost ring会首先检查值是否有一
2022-06-30 17:40:38
869
Unity SkinnedMesh 骨骼动画导出GPUInstancing使用的顶点贴图
2024-12-12
资源加载以及资源热更框架
2023-06-21
树形布局算法的实现 damo
2022-08-24
红点系统,游戏中的红点树
2022-06-05
Unity 官方中文手册2018
2020-06-30
crypto-js base64
2018-12-06
cocos creator 实现A*寻路
2019-01-24
visual studio msb
2018-10-12
2D物理引擎 Box2d.js
2019-04-02
postman6.6.1
2019-01-14
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人