- 博客(121)
- 收藏
- 关注
原创 unity多语言框架
整个项目每个Text控件都有一个id。可以把Text所在的game Object名字当id,或者继承Text实现一个有id的。考虑到继承Text需要把项目资源的Text控件一个个替换,重新设置对齐、字大小、字颜色,还是组合比较好!每种语言一个json,里面是id-文本的字典。可以用SO编辑,生成json。或者直接用SO也行;或许这也不是最好的方案,应该弄一个类,require Text控件。就不用重写检查器了。
2026-04-23 18:23:34
89
原创 Unity单例笔记
根据管理器的生命周期,可以分为整个游戏内存在的和场景内存在的。根据是否需要检查器或协程,得到是否必须继承MonoBehavior,可以分为继承和不继承。这两个问题组合,其中不继承MonoBehavior的一定整个游戏存在。
2026-04-05 17:51:10
58
原创 Unity协程返回值的解决方案
协程返回IEnumerator,无其他返回值,且不能用out ref参数。我们经常需要协程返回值,常用方案有传入委托。在不太复杂的场景下够用。最简单的有传入一个无参委托,再完善点传入UnityAction<bool>,根据成功失败执行不同操作。什么情况下会不够用呢?当我们需要一个协程接一个协程,而且根据前一个协程的结果不同,后面的操作不一样,可能成功失败一个用协程一个不用协程,也可能用不同的协程。典型的应用场景就是热更新检查。这时候再传入回调写就变成回调套娃。
2026-04-05 11:52:13
59
原创 ASP.NET Web API笔记
在浏览器输入路径,程序会去Controllers文件夹找路径最后一段命名的XXXController,执行Get方法。IIS打开网页和VS运行打开网页的端口号不一样,IIS使用手动配置的,VS使用一个调试端口。
2026-04-04 15:56:56
72
原创 编辑器/AB包资源校验工具
从根配置出发,读取若干个配表,对每个配表的每个资源路径,检查资源或者预制体身上必要的脚本存在。从总配表读取每个配表路径,要反序列化成的类不一样,要参数化需要传入<字段名,类型>字典。可以定义一个配置基类或接口,里面有校验资源方法。然后发现Assembly CSharp不能访问Assemble CSharp Editor。只有AB包资源校验能这么搞。
2026-03-20 09:10:18
98
原创 Android开发笔记
下载太慢了,去Settings里改成使用本地Gradle,构建,还是显示下载Gradle.zip,而且关闭项目没反应,卡死了,杀进程。重开,构建,可以了。开发软件需要的SDK是Android SDK或者系统SDK,在SDK Manager管理版本。SDK接入指的是第三方SDK,支付宝、微信等。项目是最顶层,一个项目包含多个模块Module。一个Module对应一个app,也就是一个项目能做多个app。重新build,下载一个小时,然后。重试,下载了40分钟,完成。指定下载好的Sdk文件夹。
2026-03-17 19:35:06
50
原创 Unity关卡配置化笔记
一个地形,它的导航网格、遮挡剔除数据都是和地形绑定的。现在的问题是生成遮挡剔除数据是直接保存在场景文件夹的,使用同一个地形的场景使用的遮挡剔除数据是一样的。导航网格数据如果在地形预制体的检查器Bake就会保存到预制体。或许应该做好一个关卡后导出配置文件,然后把关卡具体的物体都删掉,进入关卡时动态加载?
2026-02-26 18:04:48
274
原创 Unity渲染问题记录
树叶摇晃应该是风的效果,消失可能是被误计算LOD距离,计算成了该剔除的距离。一开始树能显示,不太可能是着色器没包含。在场景里放一个树的预制体,不只把树用于地形工具绘制树。后来验证无效。打开树模型的Renderer,也警告开启了GPU Instancing,不能开static。那么把static关闭打包看看。无效。然后打开.spm文件,把Wind Quality改成None。又去项目设置Quality把LOD bias改成1.解决了。
2026-02-15 10:59:06
179
原创 UGUI不规则形状按钮
继承Image,Image继承了ICanvasRaycastFilter接口,它有一个bool IsRaycastLocationValid(Vector2 screenPoint, Camera eventCamera)方法,根据输入的屏幕坐标返回是否射线有效。这是某公司的面试题,原题是判断鼠标点击到了一个字母O的环上。重写这个方法,从输入的屏幕坐标>相对自身RectTransform的坐标>归一化的局部坐标(实际上已经是uv坐标了)>sprite空间坐标>采样像素>比较像素alpha和阈值>返回。
2026-02-08 14:15:33
198
原创 一个脚本搞懂RectTransform所有布局相关字段:anchoredPosition anchorMin anchorMax sizeDelta pivot offsetMin offsetMax
凡是非单锚点模式(AnchorMin!=AnchorMax),Pivot就会失效,变成通过上下左右边和父级的上下左右边的距离确定位置大小。可以留意这4个词的变化。anchoredPosition在非单锚点模式下比较匪夷所思,
2026-02-07 23:17:39
436
原创 Unity资源管理笔记
使用一个计数器int counter,还有记录协程总数num,每个协程完成时counter++,if(counter==num){完成回调}
2026-01-24 23:11:48
171
原创 Unity asmdef笔记
默认情况下Editor文件夹的脚本编译到Assembly-CSharp-Editor.dll,其他脚本编译到Assembly-CSharp.dll。可以在脚本的检查器查看所属的dll。改一个脚本需要重新编译它和依赖它的脚本。
2026-01-17 11:53:55
111
原创 对大型switch和多层判断的优化
写背包系统时点击物品格子,出现详情页,详情页的选项按钮根据物品种类、所属容器动态生成。这里生成选项按钮取决于的”键“有多个:物品种类、所属容器,执行的操作是生成几个按钮,写入名称、添加回调。按常规思路会写成2层判断,一个长度恐怖的函数。
2026-01-15 03:07:13
46
原创 C#手写数据类和protoc自动生成类的转换
protobuf作为著名的二进制序列化方案,却不能直接把自己写的数据类序列化,只能使用protoc生成类。对于上百个字段,有嵌套类、列表、字典的玩家数据,如果项目已经大量使用自己写的数据类,手写转换方案是一个灾难。我们尝试基于反射自动转换……我们规定protoc类的属性和手写类的字段同名,只是首字母大写。拿到一个手写类,拆解出fieldInfo,对于简单数据类型,在protoc类寻找同名的首字母大写的属性,写入。
2026-01-11 22:36:40
53
原创 射击游戏枪械多种自动方式的管理
在枪械的配置SO里写一个方法为autoModes列表去重。就是转换成集合再转换回来。有些枪只有半自动,有些有半自动、全自动,有些有半自动、三连发。用一个自动方式枚举的列表。
2026-01-09 12:58:34
253
原创 保存任务进度
玩家既能移除又能生成的对象,先把场景里的都收集起来销毁,再把读档里的生成;只增加不减少的对象(如敌人掉落的箱子)直接从读档里增加;不增加不减少,只改变状态的对象(NPC、任务、任务道具),根据存档里记录的状态一个个更新状态;存档最好用字典存,查询方便。只减少不增加的对象(如敌人)和读档对照,读档里没有的删除;
2026-01-08 16:03:32
595
原创 Unity阴影笔记
意思可能是先得到相机范围内所有顶点,转换到光源空间,再得到这些点x、y的最大最小值。但是如果挡住光源的物体比如一个大楼在相机外,它投射的阴影在相机内,阴影纹理应该包含这个大楼。阴影纹理判断深度那些我们都懂。我的疑惑是对于平行光,如何确定阴影贴图要覆盖的范围。和主相机的视场角决定,以主相机为中心,向平行光方向扩展出一个覆盖主相机视锥在。内所有区域的立方体,确保主相机能看到的范围内,阴影都能被正确生成。豆包提供了这个脚本,用于标识平行光源阴影视锥。动了一下相机,视锥会跟着变化,规则挺复杂。
2026-01-06 22:13:31
289
原创 Unity红点系统笔记
注意到引起红点的节点引起红点时,它相应的UI可能不存在,比如玩家刚进入游戏看见邮箱按钮的红点。红点Mono通过检查器配置自己的路径,开始时红点Mono把自己路径的节点加入管理器的总字典,但是不会把路径里自己的父节点加入。如果要尽快写一个简单的测试案例,就在主界面放一个按钮,有红点,按下弹出一个面板,上面有一个按钮,有红点。需要所有有红点的控件形成一个树结构,玩家没打开任何面板时看到的是树根,一般是主界面上的一些按钮,树叶是打开几层后不能再展开的按钮。红点是从叶向根传的,节点需要知道它的父节点。
2025-11-17 18:20:09
563
2
原创 Unity UI框架笔记
假设我想让面板一开始不存在场景里,第一次是加载,关闭时失活,以后打开都只激活。加载面板需要先判断这个面板加载过没有,然后决定加载还是激活。如果用静态方法加载,这个方法不能重写,为了避免每个面板写一遍,只能写在面板基类里。提供加载面板的方法,包括从Resources和AB包加载,包括全屏面板和部分面板。为此需要面板预制体的路径和资源名,需要一个方法知道当前哪些面板在显示,可以是查看一个面板类的单例是否存在,也可以用一个字典存储显示的面板。
2025-11-16 18:18:47
466
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅