自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 正则表达式 速成

1.我这边举的例子算比较复杂的,但是拆解之后可以看出并不难2.当你不理解含义的时候直接点击参考理解即可:3.合理的使用正则表达式到工作中可以大大的提高工作效率4.正则表达式回了就不难5.不用死背表达式,忘了就来网址上找就行。

2024-04-10 17:48:06 822

原创 Unity 主线程和其他线程之间的数据访问

在Unity中,主线程和其他线程之间的数据访问需要小心处理,因为在多线程环境下,不当的数据访问可能导致竞争条件和数据不一致性。在Unity中,主线程通常用于处理用户输入、更新游戏逻辑和渲染。其他线程通常用于执行耗时的计算、加载资源或者网络操作。为了在不同线程之间安全地访问数据,你可以使用以下方法:主线程和其他线程之间的通信可以通过Unity的线程安全的数据结构,如ConcurrentQueue和ThreadSafeDictionary来进行。

2024-04-08 18:46:58 681

原创 光栅化算法

多数计算机图形图像,是通过光栅显像显示给用户的,这种系统将图像作为像素阵列进行显示,像素(pixel)即图像元素(picture element)的简称。这些像素采用RGB颜色空间。本文讨论光栅显像的基本原理,着重讨论RGB颜色系统和标准图像显示器存在的非线性。

2024-03-01 16:39:32 1077 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 432

原创 Unity - Graphic解析

Graphic 是 Unity最基础的图形基类。主要负责UGUI的显示部分。由上图可以看你出我们经常使用的Image,Text,都是继承自Graphic。

2023-11-26 20:27:34 493

转载 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 354

原创 游戏中的-雪花算法

雪花算法(Snowflake)是一种生成唯一ID的算法。在游戏开发过程中会为玩家生成唯一的id,或者玩家获得一件装备,为这件装备生成唯一的Id,将此角色和装备的Id保存于数据库当中。

2023-11-03 11:08:44 271

原创 Unity Shader 透明度效果

代码上实际上没几句,主要还是需要理解上面 透明度测试,透明度混合,什么是深度写入,为什么要开启写入和关闭写入的原因。

2023-09-24 11:00:41 488

原创 Unity shader - 纹理采样

对于三维模型,有两个最重要的坐标系统,一是顶点的位置(X,Y,Z)坐标,另一个就是UV坐标。什么是UV?简单的说,就是贴图影射到模型表面的依据。完整的说,其实应该是UVW(因为XYZ已经用过了,所以另选三个字母表示)。U和V分别是图片在显示器水平、垂直方向上的坐标,取值一般都是0~1,也 就是(水平方向的第U个像素/图片宽度,垂直方向的第V个像素/图片高度)。那W呢?贴图是二维的,何来三个坐标?嗯嗯,W的方向垂直于显示器表面,一般 用于程序贴图或者某些3D贴图技术(记住,确实有三维贴图这种概念!

2023-06-24 16:25:50 1250

原创 Unity Shader - 高光反射(Phong、Blinn-Phong)

高光反射 = 光源颜色 * 反射颜色 ∗ pow( max(0, 视角v与光反射向量r的余弦值) , 光泽度)高光反射 = 光源颜色 * 反射颜色 ∗ pow( max(0, 半角向量h与法线n的余弦值) , 光泽度)可以看到逐顶点渲染和逐像素渲染的区别:逐片元更加细腻。看下效果 左边是逐顶点,右边是逐片源。高光反射光照模型分为。

2023-06-11 19:00:26 479

原创 Unity Shader - 兰伯特漫反射

光源颜色 * max(0,cos(光方向和法线的夹角))公式原理:从上面图片可以看出光照方向 L 与物体法相 N形成的 余弦值越大,反射光越大,角度为0度的时候最强 Cos(0) = 1,大于等于90度的时候为0 Cos(90) = 0;所以我们首先需要计算出和的角度的余弦值。

2023-06-10 16:41:11 1274

原创 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 1647

原创 Unity 基于Jenkins自动化打包流程

Jenkins是一款开源 CI&CD 软件,用于自动化各种任务,包括构建、测试和部署软件。Jenkins 支持各种运行方式,可通过系统包、Docker 或者通过一个独立的 Java 程序。

2023-04-05 17:44:43 1538 4

原创 Unity 生成 Android 密钥.keystore

keytool -genkey -alias 【别名】-keyalg 【加密算法】-validity 【有效天数】 -keystore 【密钥完整路径】‘keytool‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件。,于是直接使用命令行进入到jdk环境下进行生成。

2023-04-05 12:17:24 789

原创 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 2625

原创 Unity资源热更新框架

游戏上线后,玩家下载第一个版本(1G左右或者更大),在之后运营的过程中,如果需要更换UI显示,或者修改游戏的逻辑,这个时候,如果不使用热更新,就需要重新打包,然后让玩家重新下载,很显然体验非常不好。热更新可以在不重新下载客户端的情况下,更新游戏的内容。如王者荣耀,经常有下载补丁的时候。

2023-03-09 14:29:40 1912 5

原创 Unity扩展编辑器 - 资源导入工具

【代码】Unity扩展编辑器 - 资源导入工具。

2023-03-06 15:55:15 503

原创 Unity - 自定义Hierarchy面板

调用了Unity.Editor中的HierarchWindowOnGui函数来添加自定义内容。创建一个自定义Hierarchy脚本放在Editor文件夹下,使用 [

2023-02-03 14:19:41 649

原创 Unity - UI适配方案记录

在所有需要缩入安全区域的组件上,添加SafeArea脚本。其中16:9的范围为精细范围,12:9的范围为真机最小可见范围。注:在实机上,安全区是由机器本身决定的,各机型的安全区分辨率各有不同;插件预览仅做正确性测试用。在unity中,设置Game窗口左上角的分辨率即可预览效果。注意:最终效果需以真机测试为准。各组件通过设置RectTransform属性来达到正确适配的效果。",选择机型,点击左上角的Update Previews。通过下文"整体预览插件"即可预览各机型异形屏效果。

2023-02-03 10:31:55 1396

原创 Unity - TextMeshPro

更方便的做法是专门创建一个用于补字的兜底字库,将它放在fallbackList的最后,其对应ttf字体包含几乎所有字形,其CharacterSequence仅按需添加。最终保存为asset文件。由于 TextMeshPro 创建的几何图形每个字符使用两个三角形,就像 Unity 的文本组件一样,因此这种改进的视觉质量和灵活性没有额外的性能成本。在这个前提下,我们希望各个字库间尽可能无重复(防止不同语言下看同一个字的样式不同),所以我们需要将源ttf文件进行子集筛选,让它仅存在对应语言的字,或仅存在符号字。

2023-02-02 17:08:18 9010

原创 Unity 如何实现背景模糊?

将渲染后的texture赋值给RawImage图片。将相机视图渲染到texture上。准备一个模糊Shader。

2023-01-15 17:54:30 1439

原创 Unity 如何设计UI管理系统

如何设计UI管理系统

2023-01-15 16:17:24 1129 1

原创 Unity 如何获取、设置和配置活动渲染管线

(SRP) 的渲染管线,其中包括通用渲染管线 (URP) 和高清渲染管线 (HDRP)。要渲染内容,Unity 可以使用内置渲染管线或基于。将 URP 设置为活动渲染管线。

2023-01-15 09:59:55 1704

原创 Unity 渲染优先级总结

RenderQueue > 2500 物体一定显示在 RenderQueue Sorting Layer > Order in Layer > RenderQueue。需要注意的是 RenderQueue 2500是关键值,他是透明与不透明的分界点。

2023-01-12 13:34:43 1006

原创 Unity 音频插件 - MasterAudio 实现音频管理系统

Master Audio的是一个整体解决方案,所有的丰富的游戏。

2022-11-11 14:28:49 3665

原创 Unity 扩展编辑器 - Inspector 面板特性用法整理

ContexMenuItem("Funcl","Text")] : 使其在Inspector面板鼠标,右键点击该变量时,出现一个按钮第一个参数 表示 按钮的名字 ,第二个参数,表示要执行的方法,保证要有该方法且需 要成员方法。(typeof(BoxColider))] : 该特性 意思是, 修饰的类依赖于参数里的类,当修饰的类挂到物体上时,会检查该物体上是否有依赖的组件,如果有,不会重复的添加,如果没有依赖的组件,会默认添加依赖的组件。注: 参数只能显示在面板操作的最大最小值,并不能限制实际的值。

2022-11-10 14:03:38 946 1

原创 Unity拓展编辑器 找出未被引用的资源列表

需求很简单,提供一个工具,找出所有未被引用的资源。提供快捷删除功能。

2022-10-20 10:51:46 1393

原创 资源加载框架之-AssetBundle打包管理

导出的xml文件里里可以直观的看出 Assets/Resources/UI/Prefab/Win/Hero/Win_Hero 文件依赖了imageAB包。容易产生冗余AB包;文件夹或文件等AB包名设置混乱,难以管理。不会生成冗余的AB包,文件AB包名设置简单方便,容易管理。对于新手理解又一定难度。上手简单,方便操作。

2022-10-11 14:26:18 1187 7

原创 Unity拓展编辑器 一键导出图集工具

在项目开发过程中我们必不可少的会将美术给的资源打包成图集来降低drawcall,减少包内存。为了方便的生成图集,以及生成图片路径配置来方便通过图片名称快速定位所在的图集以及图片位置。

2022-09-16 16:16:28 1400

原创 树形布局算法的实现

从最后一层开始,判断同一层相邻的叶子节点(n1,n2)是否重合,重合 移动 n1与n2共同的父节点下的n2的父节点 parentNode,向下一个yInterval间距.由于移动了parentNode,parentNode的父节点中心就发生了偏移,所以中心对齐parentNode的父节点下的叶子节点。算法思路是简单的,不过实现起来我是碰到了一堆问题,特别是递归导致卡死又得重启项目。布局叶子节点位置(由于每棵子树的宽度都不一致,必定导致叶子节点重合)最近做了一个科技树的功能,如上图树形结构,

2022-08-23 18:53:11 1199

原创 Unity 拓展编辑器 - 导出UI预制体lua文件

最后编写一个导出类UIDialogExport,这里使用一个模板.txt的文件将里边的类名替换成界面或者模块的名称。在为界面配置类编写一个专门的Inspector显示类DialogConfigEditor。编写一个组件收集器用于提取出需要动态修改、操作的组件如按钮,图片等。界面配置基类UIDialogConfig。+Unity自带拓展编辑器编写。......

2022-07-28 11:42:56 1274

原创 Lua __index元方法和__newindex元方法 C# get set 实现

当访问一个表中不存在的字段时会得到nil。这是正确的,但不是完整的真相。实际上,这些访问会引发解释器查找一个名为__index的元方法。如果没有这个元方法,那么像一般情况下一样,结果就是nil;否则,则由这个元方法来提供最终结果。假设我们需要创建一个UI界面,包括位置x,y 宽高 width,height,当我们创建一个窗口的时候需要放回默认的值大小__newindex元方法元方法__newindex与__index类似,不同之处在于前者用于表的更新而后者用于表的查询。当对一个表中不存在的索引赋值

2022-06-30 19:00:37 227

原创 Lua 库定义相关的元方法 __tostring

我们见过的所有元方法针对的都是核心Lua语言。Lua语言虚拟机(virtual machine)会检测一个操作中涉及的值是否有存在对应元方法的元表。不过,由于元表是一个普通的表,所以任何人都可以使用它们。因此,程序库在元表中定义和使用它们自己的字段也是一种常见的实践。函数tostring就是一个典型的例子。正如我们此前所看到的,函数tostring能将表表示为一种简单的文本格式:函数print总是调用tostring来进行格式化输出。不过,当对值进行格式化时,函数tost ring会首先检查值是否有一

2022-06-30 17:40:38 689

原创 Lua 元表和元方法之算术运算相关元方法

Lua语言中的每一个值都可以有元表。每一个表和用户数据类型都具有各自独立的元表,而其他类型的值则共享对应类型所属的同一个元表。Lua语言在创建新表时不带元表:算术运算符元方法每种算术运算符都有一个对应的元方法。加法__add、乘法 intersection,减法(__sub)、除法(__div)、floor除法(__idiv)、负数(__unm)、取模(__mod)和幂运算(__pow)。类似地,位操作也有元方法:按位与(__band)、按位或(__bor)、按位异或(__bxor)、按位取反(_

2022-06-30 16:56:10 109

原创 树的应用:游戏中的红点树,如何实现红点系统?

在之前的文章我讲解过了数据结构:树,二叉树等的基础知识与实现方式,对于树结构不懂的可以查看 二叉树基础(上):什么样的二叉树适合用数组来存储?今天我们来通过树实现游戏中的红点系统。 Damo地址:我将功能拆分成3个类RedDotSystem:用来控制和刷新树的改变,消息监听和注册RedDotNode: 红点树的结构RedDotCompoent:红点组件,根据RedDotNode数据控制UI显示隐藏RedDotSystem 核心的代码:时间复杂度:O(h) h为数的高度......

2022-06-05 18:09:44 1321

原创 Cinemachine之轨道镜头

点击 Cinemachine/Create Dolly Camera with Track 创建轨道相机。场景中会出现一个,CinemachineVirtualCamera,.与 Dolly Tack1 CinemachineSmootPath的轨道路径组件设置虚拟相机的 Follow 与 Look At编辑轨道路径点击加号添加新路径,通过修改x,y,z类修改位置,或者直接拖动小球移动Looped:勾选后会自动头部与尾部相连接。轨道绘制完成,创建timeline ->Add

2022-04-29 18:42:07 682

原创 Cinemachine 之镜头融合

1、创建多个视角下的虚拟摄像机2、创建timeline,Add Cinemachine Tack,将虚拟摄像机拖入轨道,边缘重合的越多,融合越时间越久,越平滑分别按照镜头切换的顺序托人cinemachine track 轨道中黄色区域为镜头融合部分...

2022-04-29 17:06:26 606

原创 Cinemachine 之简单的相机跟随

1、导入插件打开 window/Packge Manager 窗口,搜索cinemachine,点击安装2、创建Cinemachine Virtual Camera ,设置相关参数安装Cinemachine插件完成后,菜单栏会多出一个Cinemachine的MenuItem,点击Cinemachine Virtual Camera,场景中会创建虚拟相机,并在主摄像机上添加 CinemachineBrain 组件。CinemachineBrain :用来监控场景中所有活动的虚拟摄像机.

2022-04-29 15:45:27 1759

原创 Android 获取定位权限,获取位置信息(国家、地区、经纬)

第一步 授权在 AndroidManifest.xml 中加上位置信息权限按需要添加 <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <!-- 如果需要精确定位的话请加上此权限 --> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <!

2021-08-27 17:57:45 22112 4

原创 迪米特法则实现“高内聚、松耦合”

什么是“高内聚、松耦合”? 如何利用迪米特法则来实现“高内聚、松耦合”? 有哪些代码设计是明显违背迪米特法则的?对此又该如何重构?何为“高内聚、松耦合”?“高内聚、松耦合”是一个非常重要的设计思想,能够有效地提高代码的可读性和可维护性,缩小功能改动导致的代码改动范围。实际上,很多设计原则都以实现代码的“高内聚、松耦合”为目的,比如单一职责原则、基于接口而非实现编程等。实际上,“高内聚、松耦合”是一个比较通用的设计思想,可以用来指导不同粒度代码的设计与开发,比如系统、模块、类,甚至是函数,也可以

2021-05-13 13:47:25 301

资源加载以及资源热更框架

资源热更流程: 如何判断哪些文件需要更新? 如何实现热更新? 打包时记录版本信息及所有资源信息 包名 版本号 资源MD5文件信息(name,文件md5,size) 保存到本地(Xml文件或二进制文件) 一键生成热更资源 如何生成AB包,以及实现: 一键生成热更资源 服务器部署 具体可以参考这篇文章 https://blog.csdn.net/weixin_41316824/article/details/129212883#comments_27177205

2023-06-21

树形布局算法的实现 damo

最近做了一个科技树的功能,如上图树形结构, 一个节点有多个父节点/多个叶子节点, 要求叶子节点,整体在多个父节点的中间 算法思路是简单的,不过实现起来我是碰到了一堆问题,特别是递归导致卡死又得重启项目。 设置 root 的位置 布局叶子节点位置(由于每棵子树的宽度都不一致,必定导致叶子节点重合) 从最后一层开始,判断同一层相邻的叶子节点(n1,n2)是否重合,重合 移动 n1与n2共同的父节点下的n2的父节点 parentNode,向下一个yInterval间距. 由于移动了parentNode,parentNode的父节点中心就发生了偏移,所以中心对齐parentNode的父节点下的叶子节点... https://blog.csdn.net/weixin_41316824/article/details/126487794?spm=1001.2014.3001.5501

2022-08-24

红点系统,游戏中的红点树

树的应用:游戏中的红点树,如何实现红点系统? unity 2020 https://blog.csdn.net/weixin_41316824/article/details/125133605?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22125133605%22%2C%22source%22%3A%22weixin_41316824%22%7D&ctrtid=ogtUy

2022-06-05

Unity 官方中文手册2018

官方《 Unity用户手册》可帮助您学习如何使用Unity Editor,快速上手unity。 https://docs.unity3d.com/2018.1/Documentation/Manual/BestPracticeUnderstandingPerformanceInUnity.html

2020-06-30

去文件空格空行工具.rar

可选择的去掉文件中的空格/空行/tab键的工具。减少文件的大小,不破坏文件原有内容,可适用各种文件类型。使用简单

2020-01-13

2D物理引擎 Box2d.js

Box2DJS是Box2D物理引擎的JavaScript端口。如何引入laya 参考 https://blog.csdn.net/weixin_41316824/article/details/88965058

2019-04-02

cocos creator 实现A*寻路

使用javascript在cocos creator上实现了A*寻路算法,使用方块格表示起始点以及障碍路径等,动态调整行列数,障碍物密度,初始点坐标,实现鼠标点击计算起始点到点击位置方块的路径。

2019-01-24

postman6.6.1

postman windows是postman这款强大网页调试工具的windows客户端,提供功能强大的 Web API & HTTP 请求调试。它能够发送任何类型的HTTP 请求 (GET, HEAD, POST, PUT..),附带任何数量的参数+ headers。

2019-01-14

crypto-js base64

crypto-js base64 加密解密算法 //aes加密 function encrypt(word) { var key = CryptoJS.enc.Utf8.parse("1234567890000000"); //16位 var iv = CryptoJS.enc.Utf8.parse("1234567890000000"); var encrypted = ''; if (typeof(word) == 'string') { var srcs = CryptoJS.enc.Utf8.parse(word); encrypted = CryptoJS.AES.encrypt(srcs, key, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 }); } else if (typeof(word) == 'object') {//对象格式的转成json字符串 data = JSON.stringify(word); var srcs = CryptoJS.enc.Utf8.parse(data); encrypted = CryptoJS.AES.encrypt(srcs, key, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 }) } return encrypted.ciphertext.toString(); } // aes解密 function decrypt(word) { var key = CryptoJS.enc.Utf8.parse("1234567890000000"); var iv = CryptoJS.enc.Utf8.parse("1234567890000000"); var encryptedHexStr = CryptoJS.enc.Hex.parse(word); var srcs = CryptoJS.enc.Base64.stringify(encryptedHexStr); var decrypt = CryptoJS.AES.decrypt(srcs, key, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 }); var decryptedStr = decrypt.toString(CryptoJS.enc.Utf8); return decryptedStr.toString(); }

2018-12-06

excel2json

将Excel表格转换成Json文件 可存储为json格式 c#代码格式 sql语句格式 功能强大

2018-10-12

visual studio msb

VS在使用过程中编译出现一下错误 1.错误MSB3754引用程序集“System”无效。“值不在预期的范围内。”ATMD:\VS\MSBuild\Microsoft\VisualStudio\v15.0\CodeAnalysis\Microsoft.CodeAnalysis.targets230 2.错误MSB3755未能找到引用“System”。如果代码需要此引用,则可能会出现编译错误。

2018-10-12

空空如也

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

TA关注的人

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