LitJson魔改记录
1.float转double报错报错类型:Max allowed object depth reached while trying to export from type System.Collections.Generic.List
序列化时候会遇到float和double互转问题;
注意这里double转float会导致精度丢失;
解决办法:JsonMapper.cs中添加几行代码;
2.Dictionary中key为int时报错报错类型:InvalidCastException: Specified cast is not valid
原方法中Dictionary的key只支持(string)强转,int强转为string失败,会报错;
解决办法:JsonMapper.cs中WriteValue方法修改
3.Dictionary中key为enum时报错LitJson的字典不支持Key为枚举;
序列化不会出错,反序列化会报错,无法读取枚举类型;
解决办法:修改JsonMapper.cs中ReadValue方法:
原本reader.Value被强转为string,无法识别出枚 ...
Unity-2D像素晶格化消融
效果展示:
ShaderLabShader功能:图像变白+根据顶点的y值作透明裁剪;
才是可操作属性:
IsDead: 控制像素变白,片元着色阶段IsDead小于0将颜色改为白色;
Percent: 透明剔除分界线,也是图片展示百分比;在顶点计算阶段,记录Percent - vertex.y值,传入片元着色器,直接裁剪;
Revert:反转percent结果;(粒子显示效果和图片遮挡效果正好相反)
调整shader中Percent得到如下结果:
使用该shader创建两个材质,spriterenderer和ParticalSystemRenderer分别使用,ParticalSystem勾选Revert;
完整shader:
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566Shader "PixelDisappear"{ Properties ...
GameFramework食用指南
框架简介GF框架分两部分,GameFramework(GF)和UnityGameFramework(UGF);
通过接口的形式对Unity引擎进行了解耦;
GF独立于Unity,具体业务逻辑实现都在GF中;
UGF是继承了MonoBehaviour的组件,通过接口调用GF中Module的方法;
框架流程
左边GF层,由GameFrameworkEntry管理所有GameFrameworkModule;(使用GF自己实现的链表非list)
Update阶段根据每个Module的Priority顺序轮询执行所有Module的Update;
GameFrameworkEntry对外提供获取单个Module的方法;
右边UGF层,UGF中所有Component都继承GameFrameworkComponent;
GameFrameworkComponent做两件事:
继承MonoBehaviour,未每个组件提供UnityComponent的生命周期;
Awake方法中注册该UGF组件,将所有UGF组件存储在UGF层的GameEntry类中;
UGF中的BaseComponent,Awak ...
Unity-A-Star寻路
A-Star寻路
最短路径将地图存成二维数组,通过行列查找;
每一步都查找周围四个方向,或者八方向的所有点,放入开表;
是否边缘
是否障碍
是否已经在确定的路线中
计算每个方向上路径消耗,一般斜着走消耗小,收益大;
开表排序,筛选出最小消耗的点放入闭表,并将该点设置为新的起点,从开表中去除该点;
重复上面操作,直到起点=终点退出;
中间查找八个方向可移动点位时,需要将这些可移动点的父节点设置为起点,这样可通过最后筛选出的点,一层层找出最短路径;
x步内可移动所有点位将所有方向上可以移动的节点放入开表,同时放入闭表;
遍历闭表,将每个节点周围可移动的节点放入开表,同时放入新表;
清空闭表,新表赋值给闭表(实际代码不这么写);
重复上面操作,可移动几步,就循环几次;
最终返回开表;
代码实现:
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 ...
Excel导表工具(开源)
功能
支持int、float、bool、string基础类型
支持数组
支持kv;(key为数字,建议用list+新表)
支持枚举
支持unity类型vector3,vector2,color
自动生成csharp类
单个excel中多个sheet,依次导出 第一行第一列为生成C#类的class名
单个sheet,文件名为类名
类型为空的列跳过
第一列标#开始的行跳过
使用
设置config.txt文件,按需求配置;
#为注释行必须;结尾
123456789#excel存放路径;excelPath:./Excel/;#数据保存路径;dataPath:./DataTable/;#c#类保存路径;classPath:./CSharp/;#输出类型;exportType:Json;isExportServer:False
双击运行DataTable.exe,等待执行完毕;
第二行不能有空行;
配表
第一行注释
第二行变量名(属性名)
第三行字段类型
第一列留空
数组:类型+[] e.g: int[]
kv使用
类型:dic<string,int>
变量名: ...
Unity-2D边缘检测(描边效果)
ShaderLabAlpha值边缘检测
根据图片的Alpha值边缘判定,向内扩一段距离做边缘,颜色设置未描边颜色;
片元着色阶段,向上下左右四个方向做检测,有一个点的透明度为0,判定为边缘;
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970Shader "2DOutline"{ Properties { _MainTex("Texture", 2D) = "white" {} _LineWidth("Width",Range(0,0.4)) = 1.0 _LineColor("LineColor",color) = (1,1,1,1) _Intensity("Intensity",Range(1,10)) = ...
Unity-ShaderLab实现光照系统
这篇主要总结Unity中ShaderLab的着色器代码实现总结,需要有一定图形学基础和ShaderLab基础;
着色器顶点片元着色器分顶点着色器和片元着色器,对应渲染管线的顶点变换和片元着色阶段;
最简单的顶点片元着色器:
12345678910111213141516171819202122232425262728293031Shader "MyShader/VertexFragmentShader"{ Properties{ _MainColor("MainColor",Color) = (1,1,1,1) } SubShader { Tags { "RenderType" = "Opaque" } Pass { CGPROGRAM #pragma vertex vert #prag ...
IOS15.4无法运行WebGL2.0问题
IOS15.4无法运行WebGL2.0问题
国内所有网站居然搜不到这个问题是我最奇怪的;
ios15.4更新之后Unity打包WebGL无法运行,卡在加载读条最后一点点,也不会报错;
原因是apple更新15.4之后WebGL有大bug;
Unity官方给了一个修改编译文件的方法,有解决这个问题的可能性;
但是还是有大部分开发者在图形显示上遇到了更多的坑;
apple官方说他们已经修复了这个bug至于什么更新发版未知;
毕竟不在商店上架又抽不到成;
以下解决方案互相独立,有可能解决但不一定;
解决办法:
1.将webgl2.0改为webgl1.0(意味着不能使用liner和urp);2.3D项目调低lightmapEncoding;3.修改untiy安装目录中edit/il2cpp/libil2cpp/metadata/GenericMetadata.cpp
找到这个函数
const Il2CppType* GenericMetadata::InflateIfNeeded
在这个函数的前后分别加上
#pragma clang optimize o ...
GameFramework导表工具使用
生成数据:DataTableGenerator根据bytes文件或txt文件自动生成对应类;
文件命就是类命;
#第一行表名备注;
#第二行属性名;属性只能Get,Set私有(字段);
#第三行属性数据类型;
#第四行属性备注
以下都是数据行;
Tips:
1.由于参数都设置为只可Get的属性,所以属性名首字母必须大写;
2.文件存储编码为UTF-16,否则中文乱码;
3.不写属性名和类型的列会被跳过;(名称可以不写)
4.不能有空行,没列要对齐;
5.支持position,颜色,四元素,rect转换;
加载数据:DataTableExtension拓展方法LoadDataTable支持导入数据;
参数dataTableName表名,不需要后缀;
参数dataTableAssetName,AB中加载名;
userData自定义数据类型,打飞机demo中这个参数传了一个流程控制进去ProcedurePreload,这里看几遍Resources模块都没太懂;
使用数据:从GameEntry报错的DataTableComponent中GetDataTable方法获取数据表,再获取一行数据; ...
Unity-火烧+水波纹效果(噪音图)
使用噪声图实现火烧和水波纹效果;
溶解关闭裁剪,根据noise纹理取样,r通道和_BurnAmount比较,裁剪掉小于_BurnAmount的片元;
通过菲尼尔得到裁剪边缘,添加火焰燃烧的颜色进行混合;
阴影pass需要单独写,同样做裁剪;
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990Pass{ Tags {"LightMode" = "ForwardBase"} Cull Off CGPROGRAM #pragma vertex vert #pragma fragment frag #include "UnityCG.cginc" #include " ...