Y3编辑器教程8:资源管理器与存档、防作弊设置
文章目录
- 一、资源管理器简介
- 1.1 界面介绍
- 1.2 资源商店
- 1.3 AI专区
- 1.3.1 AI文生图
- 1.3.2 AI图生图
- 1.3.3 立绘头像
- 二、导入导出
- 2.1 文件格式
- 2.2 模型导入
- 2.2.1 模型制作后导出
- 2.2.2 模型文件导入Y3编辑器
- 2.2.3 Y3编辑器角色、装饰物模型要求
- 2.3 纹理导入
- 2.4 材质贴图
- 2.4.1 材质支持类型
- 2.4.2 PBR材质贴图制作指引
- 2.4.3 英雄三国材质
- 三、角色模型
- 3.1 常规功能
- 3.2 模型部件替换
- 四、特效(待补)
- 五、序列帧动画
- 5.1 本地资源导入
- 5.2 在编辑器中使用序列帧
- 六、资源管理
- 6.1 资源文件
- 6.1.1 资源文件类型
- 6.1.2 资源文件结构
- 6.1.3 资源管理
- 6.1.4 资源文件FAQ
- 6.2 缩小包体
- 6.2.1 优化官方资源
- 6.2.2 自定义资源
- 6.2.3 测试包体大小
- 七、存档/排行榜设置
- 7.1 全局存到和玩家存档
- 7.2 存档详细流程
- 7.3 离线存档
- 7.4 排行榜功能
- 7.4.1 开启排行榜
- 7.4.2 存档槽
- 7.4.3 排行榜清空与拉黑
- 八、防作弊设置
- 8.1 启用防作弊功能
- 8.2 物品掉落限制
- 8.3 Y3地图防作弊策略
-
Y3编辑器教程1:编辑器简介及菜单栏详解(文件、编辑、窗口、细节、调试)
-
Y3编辑器教程2:场景编辑(地形编辑、物件放置)
-
Y3编辑器教程3:物体编辑器
-
Y3编辑器教程4:触发器1(界面及使用简介、变量作用域、入门案例)
-
Y3编辑器教程5:触发器进阶使用(镜头、UI、表格、函数库、排行榜、游戏不同步)
-
Y3编辑器教程6:触发器进阶案例
-
Y3编辑器教程7:界面编辑器
-
Y3编辑器教程8:资源管理器与存档、防作弊设置
- Y3地图制作1:水果缤纷乐、密室逃脱、机甲风暴
一、资源管理器简介
参考官方文档《资源管理器》
1.1 界面介绍
资源管理器是用来管理所有项目资源的资源库,它们是纯美术性的,完全不包含游戏逻辑,没法编辑属性,当然也没有触发器。它们会被一些物体的属性所引用,或者被触发器引用:
- 模型资源:会被单位所引用。
- 声音资源:会被物编中的声音所引用,物编中将会有一些属性编辑,比如对其的分类以及淡入淡出时间等。
- 特效资源:触发器可以创建指定某个特效
- 分类页签:切换不同类型资源显示,包括 模型、声音、特效、图标、 鼠标样式、 天空球和字体、地形纹理、序列帧与AI专区。
- 鼠标样式:为细节-美术效果-指示器外观中的鼠标选择不同的风格
- 天空球:细节-美术效果-天空球中选择最适合的用于地面之外的空间背景。
- AI专区:支持您根据需求与描述,利用AI技术生成技能图标、立绘、头像与称号,还支持智能抠图和高清修复。
- 收藏夹:用于显示/管理用户收藏的资源。点击新建文件夹,通过文件夹对自定义资源进行分类。
- 资源目录:资源所在的文件夹
- 资源列表:选中文件夹(包括其子文件夹)中具体的资源条目
- 展示页:资源展示,3D显示支持鼠标拖拽改变视角
- 详情页:用于显示/调整资源具体信息(上传是否压缩等)
- 资源标签:与资源搜索相关。资源搜索相关规则参考:【通用搜索】搜索优化-模糊搜索规则
- 资源筛选:通过标签对当前资源列表内的资源进行筛选。
点击窗口右上角的导入,将本地资源上传到资源管理器中(规则请查看下一章资产导入)。点击云图标,查看或隐藏资源商店中的资源。
右键单击一个资源,对其进行以下操作:收藏,复制ID,剪切,删除,重命名,重置标签,创建到物编和创建到场景 。模型、音频和特效这三个资源可以快速创建到物编中单位,声音,魔法效果/投射物的玩家自定义栏中。
点击右下角的 “+”,为资源设置一个自定义的标签,以便更好地对其进行分类。如果你不再需要这个标签,右击资源的缩略图,选择重置标签,那么这些标签将被恢复到默认状态。
1.2 资源商店
在资源商店中,您可以选择角色、动物、建筑、装饰、植物、岩石、特效、图标、音频和ECA,在导入后可以在您的项目中使用。下载的资产可以在我的资产中进行管理,比如您可以批量导入资产。
1.3 AI专区
1.3.1 AI文生图
- 基础模型:可以理解为他们是不同的AI画师,是决定画面内容的最主要因素。不同的基础模型训练时所用的素材不同,其画风和知识面也有不同
- 风格模型:可以作为特定画风的模型进行叠加使用
- 描述词:对想要生成的画面元素进行描述,可以是词语、短句;支持中英文输入。参考语法:类型风格+画面主体+背景+光照+构图。
- 描述词相关性:图像与描述词的匹配程度。相关性越高,生成的图像越符合描述词的描述内容;相关性越低,AI自由发挥空间越大。推荐7-15,过高容易导致画面色彩失真和图像质量降低。
- 随机种子:图像通过采样算法一步步生成最后图片,随机种子控制了采样的结果。锁定种子和采样步数等参数,可以固定采样结果,生成几乎一样的图片。
- 采样步数:AI绘图是一个生成随机噪点再降噪的过程,采样步数决定了要在多少步之内完成全部的降噪过程,也即完成 AI 绘图作品。采样步数越高画面越精细,但生成时间也越长,一般情况下20-30步即可。
1.3.2 AI图生图
图生图技术允许用户在参考图像的基础上,通过AI重绘,生成一张新图像。它能够保留原图形状或布局,但风格和细节由提示词和参数决定。图生图的应用场景包括二次创作、特定风格的复现以及产品设计等。
- 缩放模式:若生成图片与源图片的尺寸不一样,则需要从以下的四种图片模式选择一种
- 拉伸原图:只调整图片大小,图片所有内容进行保留,会使用拉伸。
- 裁剪原图 :从图片中心向四周的方向,将比例外的部分裁剪。
- 填充空白 :以图片中心向四周的方向,将比例内多余的部分进行填充生成图片。
- 仅调整大小:调整图片大小为生图设置的宽高,并利用潜在的空间特征进行放大。
- 重绘幅度:可以理解为 AI 对原图的修改程度,数值越小,修改程度越小。
0.1-0.2
:只会在微小的图案和阴影上产生微弱的变化。0.4-0.6
:会明显影响画面中的小物品。0.6-1
:将会对整张图的构成产生显著影响,例如人物的姿势和位置,甚至整个构图都会发生变化。
=1
:会生成一个跟参考图毫无关联的图,其实就等于纯粹的文生图。
- 局部重绘:允许对图片上涂抹的地方进行重绘而其它部分不变。
上传参考图后,打开局部重绘开关,使用笔刷涂抹想要修改的地方,并在描述词里描述想要修改的内容。比如下图中,涂抹人物衣服后,提示词描述修改为“身穿盔甲的男性,站立”。
1.3.3 立绘头像
可选择资源管理器的模型生成立绘头像,或者输入模型图片生成对应立绘头像。上传的图片要求尽量背景纯色,人物形态清晰,如果选择怪物动物等不具备人物特征的模型将无法识别生成。
人物所占画面比例越大生成的效果会越好,尽量使人物完整的展示在预览区域内。在左侧模型预览区域调整模型角度,鼠标滚轮可放大缩小模型,Ctrl+鼠标右鍵可旋转模型,调整好角度后后点击“截图”按钮,点击"默认角度"将重置截图恢复默认角度。最后点击生成,稍等几分钟即可获得全身、头像、半身立绘。
二、导入导出
2.1 文件格式
编辑器导入/导出文件:在资源管理器目录下点击导入按钮,选择文件并填写相关信息即可导入(比如导入Caozhi G.fbx
模型);在资源管理器目录下点击导出按钮,选择需要导出的内容,确认后选择导出位置。
导入类型 | 文件格式 | 导入类型 | 文件格式 |
---|---|---|---|
模型 | fbx | 模型贴图 | tga、png |
音效 | mp3、wav | 图片 | png、jpg |
鼠标样式 | cur | 天空球 | exr、hdr |
序列帧 | plist、多选png | 地形纹理 | png |
2.0.43版本更新后,所有自定义资源存放在LocalData\Your_Map\custom\OriginalRes
路径下,一共是10个文件夹:
文件夹 | 说明 | 文件夹 | 说明 |
---|---|---|---|
cur | 鼠标样式 | effect | 特效 |
font | 字体 | icon | 图标 |
model | 模型 | sequence | 序列帧 |
sky_box | 天空盒 | sound | 音频 |
terrain_texture | 地形纹理 | Live2D | Live2D |
windows系统中导入文件:除了通过编辑器内的资源管理器进行导入,还可以将资源文件直接拖入对应的自定义资源文件夹内,然后在编辑器内点击刷新按钮即可完成导入。导入的文件以源文件+描述文件的形式存储,方便查看和调整(可以直接在windows目录中将对应资源替换成其他同名图片,打开编辑器刷新后即可生效)。
- 第一次刷新时会处理当前地图内的所有资源,建议先备份原地图,时间相对较长(600M的资源在固态中测试用时10min左右),请耐心等待,处理完成后地图文件大小会有较大幅度的提升
- 可以直接在windows文件管理中对源资源文件进行一定的修改调整,单独删除源文件或meta文件可能造成对应资源丢失,修改前请做好备份工作
- 由于目前批量资源操作速度比较慢,暂时没做开图自动刷新,后续优化完成后会加上
2.2 模型导入
2.2.1 模型制作后导出
模型制作后,在导出到电脑之前,首先需要确认单位比例,将系统单位和显示单位设置成一致。以3D Max为例,打开模型文件,可以拉一个box来验证大小,示例文件单位为厘米时是正常比例。
导出前确定资产合规性(详细请查看 Y3 角色、装饰物模型要求),将模型导出为fbx格式。fbx导出Geometry选项设置如下(如果是带绑定的模型,请确保Skins处于勾选状态):
检查导出单位是否与系统单位设置一致,一般情况使用Automatic(自动)即可:
对于模型的动画,导出时可以带模型导出,或只导出骨骼动画,导出设置同上。如果最终的动画轨迹与DCC中有差异,可以在导出设置里勾选 Bake Animation,并设置动画结束帧(End):
模型的骨骼蒙皮等信息读取自源文件,纯动画fbx无法作为源文件
2.2.2 模型文件导入Y3编辑器
打开Y3编辑器的资源管理器界面,在模型标签页下,点击右上角的导入按钮,选择需要导入的模型文件即可。需要接入动画系统的模型(骨骼模型)导入Y3时,必须要idle1,die,walk
这3个动画文件,需要提前制作好。模型导入后将默认播放idle1动画(待机动画,如果没有则为T-pose)。如果没有这3个动画,且在游戏内用不到这个3个动画,可以使用任意动画来填充槽位。
导入后,我们可以看到模型底部有一个箭头方向,对于角色模型我们需要使角色的面朝向和箭头方向一致。我们可以通过正方向矫正功能来调整角色朝向,如下所示,我们将角色旋转180度后,角色朝向与箭头方向保持一致。
在右侧可设置模型动画和纹理贴图,+
号添加更多动作,并修改动画名称。点击动画条目的空白处可预览动画,如果动画数量较多可全选动画文件批量导入。导入完毕后可以在玩家自定义目录下找到我们的资源,可以通过右键再次编辑修改。
2.2.3 Y3编辑器角色、装饰物模型要求
Y3编辑器模型导入支持静态网格体和骨骼网格体(带蒙皮的模型),推荐使用FBX格式进行导入,导出FBX时建议将除蒙皮(skin)外的其他节点(修改器)塌陷或删除,并转为三角面,否则结果可能与预期产生偏差。另外不支持模型内的融合变形。
- 面数规格:英雄、BOSS、精英怪、载具出现的环境差异较大,建议根据不同视角选择合适的面数规格(面数一律是指三角形,非多边形)
类型 | 半身视角/屏占比大于1 | 全身视角/屏占比大于0.5 | 常规俯视角/屏占比较小 | 模型尺寸建议 |
---|---|---|---|---|
英雄、BOSS、精英怪、载具 | ≤20000 | ≤10000 | ≤5000 | - |
普通怪物、NPC、坐骑、动物、武器 | ≤5000 | - | - | - |
复杂建筑 | ≤20000 | ≤10000 | ≤5000 | - |
普通建筑 | - | ≤10000 | ≤5000 | ≤5M |
雕像 | - | ≤10000 | ≤5000 | ≤6M |
大型山石 | - | ≤10000 | ≤5000 | ≤12M |
小型山石 | - | - | ≤2500 | ≤5M |
大型树 | - | ≤10000 | ≤5000 | ≤8M |
小型树 | - | - | ≤5000 | ≤3M |
灌木 | - | - | ≤2500 | ≤2M |
其他小物件 | - | - | ≤2500 | ≤1.5M |
-
LOD限制:Y3编辑器自定义导入不支持LOD(细节层次几何图形),需要多级LOD的资产,建议将LOD拆分成多个资产导入,通过ECA逻辑切换不同的模型。例如在角色展示界面使用高面数模型,游戏内使用低面数模型。
-
模型贴图尺寸:必须为2的n次幂,通常为正方形。模型主体贴图建议为
1024*1024
像素,最大不要超过2048*2048
。 -
模型与材质拆分:模型资产的子模型数量和材质数量均会增加绘制接口调⽤(drawcall),影响渲染效率(CPU),对于同屏大量角色的情况需要严格控制角色子模型和材质的数量。建议导入前检查模型,将使用相同材质的子模型进行合并。英雄、boss类角色建议
drawcall≤4
,其他角色和场景装饰物建议drawcall≤2
。 -
骨骼限制:
- 骨骼数量不能超过128根,如果模型资源的骨骼超过128需要手动减少骨骼,或者将模型拆分成多个模型资源进行导入。
- 避免骨骼名称重复;仅支持1个根骨骼、仅支持每关节 4 个顶点的蒙皮、仅支持蒙皮(skin),不支持链接或蒙皮包裹等功能。
2.3 纹理导入
在编辑器中我们可以使用地形纹理快速生成不同的场景效果,引擎自带了丰富的地面纹理。当引擎中的纹理不能满足需求时,可自定义导入所需纹理。打开编辑器主界面-资源管理器 选择地形纹理分页,点击导入,在弹窗中选择目标图片,进行基础的参数设置,确认后就会自动生成对应的纹理贴图(5s左右)。
打开地形编辑窗口-地形分页,点击纹理配置按钮(红框内),在左侧打开目标纹理的对应路径,拖拽至当前纹理页并点击应用,即可将自定义纹理添加到地编中。
2.4 材质贴图
2.4.1 材质支持类型
目前支持的材质类型有: PBR材质(基于物理的渲染流程)、英雄三国材质(次世代制作流程)、卡通材质。如果包含混合纹理,请选择PBR材质:
混合贴图RGB通道信息示例(R:粗糙度 G:金属度 B:AO):
如果包含高光纹理,请选择英雄三国材质:
如果希望有更强的卡通效果表现,可以选择卡通材质,建议使用 卡通材质(新):
如果资产的纹理只有颜色图或只有颜色和法线,请选择 PBR材质、英雄三国卡通材质 中的任意一种,缺失的纹理贴图保持材质默认即可。
2.4.2 PBR材质贴图制作指引
PBR,意为基于物理的渲染,用于更精确的描述光如何与物体表面的互动。PBR的优势在于拥有一套相对标准化的工作流程,能够获得更加稳定、可预测的高质量效果。我们使用金属/粗糙度工作流(Metal-Roughness),需要作者上传3张纹理:颜色、法线、混合。
-
颜色贴图
- 颜色贴图A通道作为半透明通道输入。
- 颜色贴图除了微观遮蔽信息(Micro-occlusion)以外,不应该含有任何光照信息。
- 颜色贴图中的颜色对于非金属材质来说是它的反照率颜色(Albedo),对于金属材质来说则是它的反射值(Reflectance value,所带色相与其反射的波长有关)。
- 非金属部分暗色值:不应该低于 30 sRGB(严格点是 50 sRGB);亮色值不应该高于 240 sRGB。
- 金属部分Base Color 贴图中的值是指金属的反射值(真实世界中的测量值)。原始金属的反射值映射到 sRGB 范围大概是 180-255。
-
法线贴图:法线贴图使用Dx(DirectX)模式,与
3D Max
的法线贴图方向一致。如果是OpenGL
模式的法线,需要在图像处理软件中将法线贴图的绿通道颜色翻转。 -
混合贴图:混合贴图RGB通道分别为:粗糙度、金属度、AO。
- 粗糙度为黑色表示完全光滑,白色表示完全粗糙(表面几乎看不到高光)。这是一个非常主观的领域,作为一个艺术设计者可以放开手去尝试。
- 金属度贴是一个灰度贴图,作用就类似于一个图层遮罩,用于定义物体中哪个区域是原始金属的贴图。
- 金属被氧化、腐蚀、上漆、覆尘后,这些区域需要被当做非导体(电介质)材质来看待。
- 在金属贴图中,纯黑(0.0)代表了非金属,纯白(1.0)代表了金属,我们可以用过渡的灰阶来表示不同程度氧化和污垢。
- 如果金属贴图中有值低于 235 sRGB,那么在 Base Color 中对应区域的反射值也应该降低。
- AO用于计算环境遮蔽,在低配效果下,AO会直接作用与颜色以加强低配效果,若资源不需要AO需要将B通道填为白色。
- 如果资源的混合纹理是多张灰度图,请在图像处理软件中按正确的通道顺序将其合并。
2.4.3 英雄三国材质
英雄三国材质(英三材质)是匹配旧时代资产的材质,输入时需要颜色、法线、高光贴图。
- 颜色贴图:与PBR材质的颜色图要求不同,英三材质的颜色图需要将部分光影、质感信息绘制到贴图上。
- 法线贴图:法线贴图使用Dx(DirectX)模式,与3D Max的法线贴图方向一致。如果是OpenGL模式的法线,需要在图像处理软件中将法线贴图的绿通道颜色翻转。
- 高光贴图:材质通过高光图来控制模型的高光区域、颜色和强度,其光照计算相对于PBR材质要简单很多。
- 高光图通常可以通过颜色图调整亮度曲线得到。通过高光图的亮度聚拢程度来表现材质的光滑度。
- 金属感强的区域高光图可以适当提亮,非金属的区域需要将高光图压暗。颜色图与高光图的关系参考:
三、角色模型
3.1 常规功能
角色模型通常用于制作单位,分为三种类型:英雄(无限制)、 建筑(无法移动、转身、获得经验)、生物(无法获得经验点数)。在物体编辑器-数据中,您可以设置一个单位是否具有生命值,生命值的显示样式以及是否显示玩家名称。在物体编辑器-表现中,您还可以更改角色的动作,并在窗口底部查看相应的动画。
如果您想要替换模型,您可以点击模型名称后面的进入资源管理器进入导入,在资源管理器中预览所有单位及其动作。
在操作区中放置一个角色后,您可以在物件预览区中更改其动作。
您还可以通过触发器调用角色模型及其动作:
3.2 模型部件替换
- 导入编辑器:首先,需要将一个完整的模型切割成若干份导入编辑器,例如:头,胳膊,腿,脚,身体和空root模型。切割后的部件应共用同一套骨骼动画,否则可能后续会导致表现错误。初始的空root模型也要与其他部件共用一套骨骼。
- 定义模型
导入编辑器之后,需要对导入模型进行定义。先将其由初始状态替换为对应的空“root”模型,随后根据自身命名喜好,将其拆开的各个部件模型按照对应的字符串名替换上去,比如将该root模型的头部模型命名为“head”:
- 替换模型
游戏中,如需要替换某个部位的模型(如戴上头盔即替换头部模型,换掉鞋子即替换脚部模型等等),则根据之前定义的字符串名,将该模型的对应标签的模型部件替换为其他模型:
四、特效(待补)
五、序列帧动画
在界面编辑器中我们需要插入一些动画时,可以使用序列帧动画的功能,本教程将介绍序列帧动画的本地导入和使用教程。
5.1 本地资源导入
- 导入图片:适用于用户仅有散图的情况。在导入窗口中批量选择图片,被选中的图片将以命名升序的顺序导入编辑器中
- 导入图集与plist文件:当用户从cocos或unity制作好序列帧之后,本地有完整图集和plist文件,点击导入,选择对应的plist文件即可。系统会尝试自动检索绑定的png文件,如果没有搜索到则会留空,需要手动绑定
- 导入gif图片:由于引擎暂不支持直接进行gif的导入,所以目前需要使用者自己先将gif处理成单独的png文件再进行导入。以PS为例,打开gif后选择 导出 将图层导出到文件 ,然后将分离出来的png文件批量导入即可。
- 导入图集:适用于用户仅有png图集文件的情况。在搜集对应序列帧资源时经常出现仅提供了图集,没有描述文件的情况,这种情况需要手动切图。
以PS为例,打开对应图片后,选择切片工具,框选图集整体,在右键菜单中选择划分切片,输入对应参数后 按alt+shift+ctrl+s保存为png格式,随后将生成的png批量导入即可。
5.2 在编辑器中使用序列帧
经过第一步的导入流程后,我们成功的将一个序列帧文件创建到了资源管理器中。现在我们将尝试去使用它。
打开界面编辑器,往画布内添加一个序列帧控件。
点击属性中的序列帧,添加一个序列帧,添加完成后即可在界面中看到对应序列帧的效果。
在运行过程中可以通过以下ECA调整序列帧效果:
六、资源管理
6.1 资源文件
6.1.1 资源文件类型
资源文件大致可以理解为三个部分:
- 源文件(非必须):格式较为通用,一般无法被引擎直接使用,引擎需要经过一系列解析才可以获取相关内容。所有的源文件存在在对应地图文件的
custom
文件夹中(除去CustomImportRepo.local
)
- 引擎资源(必须): 引擎解析源文件后生成的引擎文件,一般不可读,仅可放在引擎中使用。所有的引擎文件存在于
CustomImportRepo.local
文件夹中。
- 编辑器信息(必须): 引擎文件在编辑器里的信息,包括但不限于ID、参数、层级关系等。所有的编辑器信息记录在工程一级目录的
editor_table
文件夹中
-
源文件可以生成对应的引擎资源和编辑器信息,但对于工程来说并不是必需品。
例如:当我将一张图片导入编辑器后,会在
editor_table\editoricon
目录下生成对应的json
文件,且会在对应的foloder_info
中记录其层级信息,引擎内容则生成在custom\CustomImportRepo.local\Texture
中。 -
用户需要通过编辑器信息去获取引擎资源。如果编辑器信息丢失且没有源文件能帮助其修复,对应资源将会被视为冗余资源被删除。
例如: 一般在多人协作时由于漏上传文件,更新不全等误操作容易导致出现上述问题,首先需要确定OriginalRes中的文件是否完整,完整的话可以删除custom\CustomImportRepo.local下的resource.repository文件并刷新解决。 冗余资源在编辑器打开地图后会弹窗提示对应列表。
-
引擎资源丢失:如果编辑器信息存在但是引擎资源丢失,拿到的就会是一些空图、空模型、空特效,甚至有可能引起引擎崩溃
例如:手动删除custom\CustomImportRepo.local下任意文件夹,开图大概率闪退。
为什么要分成这几类文件?主要是出于工作效率考虑,对资源进行预处理。如果每一次都需要从源文件开始的话,基本上就等同于吃饭从种水稻开始一样。
6.1.2 资源文件结构
2.0.43版本更新后,所有自定义资源存放在LocalData\Your_Map\custom\OriginalRes
路径下。OriginalRes文件夹下.package
后缀的文件夹是编辑器内的资源条目,与资源管理器内一一对应。没有后缀的文件夹是编辑器内的普通文件夹。
由于OriginalRes
的功能是个新功能,对于老图做了一些兼容性处理,大致流程是在第一次刷新的时候会将现有资源导出一份按照兼容模式的格式存进OriginalRes
内,所以OriginalRes
中的文件大致分为两种格式:正常模式(上图) 和 兼容模式(下图):
正常模式的文件内容如下:
- 模型:蒙皮、动画文件(FBX或MDX)、贴图、描述文件(记录的是资源版本以及一些编辑器内的设置);
- 除特效外的其他资源:资源原始文件,描述文件。
6.1.3 资源管理
-
资源刷新:根据源文件生成对应的引擎资源和编辑器信息,如果是第一次使用还会初始化工程内的所有资源,建议备份原地图,处理时间可能较长(600M的资源在固态中测试用时10min左右)。
-
清理: 清理掉目前冗余的资源
-
修复: 重新生成引擎目录,多用于编辑器信息和引擎资源出现出入的情况
-
源资源文件修改:可以直接在文件管理中修改源资源文件,但修改前请做好备份。
源文件、引擎资源和编辑器信息,见《资源文件说明》。
-
自定义资源管理 :查看目前所有自定义资源使用情况,支持一键清理未使用资源(目前引用统计暂时统计不到lua代码中的引用,如果是lua项目慎用)。
-
右键相关:右键点击自定义资源,可以进行以下操作:
- 替代:将这个资源替换为其他同类资源,所有的引用也会一同处理
- 再次编辑:对资源进行二次修改
- 打开文件夹:跳转到该资源在OriginalRes中对应的的目录
6.1.4 资源文件FAQ
- 怎么上传
SVN/GIT
?
最推荐的方式是三类文件全量上传,但如果存在多人合作同时上传资源的情况有可能会导致resource.repository冲突,这个时候将其他所有文件上传,并打开编辑器点击快速修复即可。 - 怎么判断是哪类文件出现了问题?
如果资源管理器内没有对应目录,一般是编辑器信息丢失,推荐重新导入。如果对应目录依然在但是资源管理器内不显示,一般是引擎资源出现问题,推荐右键替换后将源文件再次代入。 - 上传打包地图文件过大怎么优化?
所有的自定义资源都是会打进游戏包体的,推荐及时清理掉未使用的自定义资源,可以尝试使用资源管理器中自带的资源管理功能(lua中引用的资源目前无法统计到) - 批量删除和刷新的速度问题。
目前经过一系列优化,一张大小为5G的图全量刷新所需要的时间已经被控制在了半个小时以内,删除未使用资源大约需要20分钟,超过这个时间一般是出现了报错,建议将图和日志文件发给官方处理。
6.2 缩小包体
资源文件分为自定义资源、官方资源两种,包体资源也是这两部分,所以可以从这两部分进行考虑。
官方资源概念:Y3官方资产,公用资源。若玩家在游玩您的地图前已经在其他地图下载过官方资源,则无需重复下载,但是作者地图对官方资源的引用会影响包体的大小。
6.2.1 优化官方资源
物体编辑器 | UI编辑器 |
---|---|
单位-图标(图标)、单位-小地图头像(图标)、单位-模型(模型)、单位-自定义键值(all) | 图片(图标) |
装饰物-模型(模型) | 模型控件(模型) |
物品-图标(图标)、物品-模型(模型)、物品-自定义键值(all) | 特效控件(特效) |
技能-图标(图标)、技能-自定义键值(all) | live2d控件(live2d) |
魔法效果-图标(图标)、魔法效果-特效(特效)、魔法效果-挂接模型(模型)、魔法效果-自定义键值(all) | 序列帧控件(序列帧) |
投射物-图标(图标)、投射物-特效(特效)、投射物-挂接模型(模型)、投射物-自定义键值(all) | spine控件(spine) |
科技-图标(图标)、科技-自定义键值(all) | 文本框(字体) |
可破坏物-图标(图标)、可破坏物-自定义键值(all) | 输入框(字体) |
声音-音频(音频)、声音-自定义键值(all) | |
特效引用的模型、其他特效、音频(特效、模型、音频) |
场景地编 | 美术效果 | 血条编辑器 |
---|---|---|
直接放置在场景中的特效和模型(特效、模型) | 图片(图标) | 天空盒(天空盒) |
场景中使用到的地表纹理(贴图) | 模型控件(模型) | 特效 |
指示器外观(cur) | 文本框(字体) | |
跳字管理(图标) |
所以,需要检查游戏内容,以减少不必要的引用,通常有以下几种情况带来不必要的引用。
- 不必要的初始模板内容:创建地图时自带的资源(英雄、装饰物、物品等),如不使用则进行删除。
- 多余的商城下载资源。下载的包体内会包含多个单位、技能,如不使用可删除。
- 多余的物编内容:逐个检查每种类型下的内容是否被使用(比如场景中放置、触发器使用等),不需要则删除。对于可破坏物和装饰物,可用工具进行清理。
- 在物编窗口内,选择清理数据按钮,即可查看目前未放置到场景内的物体
- 勾选“全选未使用”,并点击清理按钮,即可删除当前未使用的物体
- 检查地形纹理并清理
- 自定义资源
- 使用资源管理器的自带功能删除冗余资源:打开资源管理弹窗,勾选“全选未使用”,并点击清理按钮,即可删除当前未使用的自定义资源。
- 手动删除冗余资源。
- 使用资源管理器的自带功能删除冗余资源:打开资源管理弹窗,勾选“全选未使用”,并点击清理按钮,即可删除当前未使用的自定义资源。
- 直接在文件夹中删除:在地图的custom文件夹中查看各个文件的占用情况,包括文件大小和最后修改日期。删除不必要的文件或备份旧版本,以释放存储空间。
6.2.2 自定义资源
下图为一个Y3工程的目录结构:
其中大致分为这样几类:
-
全工程通用的设置、规则、触发器等内容
-
资源:
custom,editor table
文件夹 -
本地存档:
archive
文件夹 -
关卡:
maps
文件夹
具体各个文件对应内容如下图所示
6.2.3 测试包体大小
完成缩包后可尝试重新上传确认包体大小是否达标。但由于资源部分分为地图数据和官方资源数据,而官方资源数据会在不同地图间复用,所以要了解真实的地图大小需要对本地的所有数据进行清理,清理之后重新下载地图就能获取真实的地图大小。
- 2.0\game\LocalData\etc : 存放了地图数据
- 2.0\game\LocalData\OfficialShopResource : 存放了官方资源数据
将上述两个文件夹删除,重新下载地图,平台上显示的地图下载量即真实的地图大小。
七、存档/排行榜设置
7.1 全局存到和玩家存档
-
全局存档:全局存档与你的地图绑定,用于累计进入地图的所有玩家对游戏进度的贡献,需要通过对应的ECA进行读写。全局存档对应数据存储在地图工程路径下的
archive/global_archive.json
文件中。
-
玩家存档:
- 实时存档:本地存档变化后,本帧的所有操作会在下一帧自动上传,体现实时性。字符串、布尔值、整数、实数等基础类型数据都是实时存档。
- 非实时存档:本地存档变化后,需要调用“上传玩家存档”ECA才会上传,两次上传间有一分钟冷却时间。
- 表格存档:根据“禁用覆盖”选项区分,禁用表示实时,允许表示非实时。实时存档表格需用配套ECA修改值,不能使用“设置玩家表格存档”ECA。初始值要么设置一个初始表,要么ECA先创建一个新表,之后才能正常进行修改。
为了提升存档的易用性与安全性,目前版本的编辑器中,表格类型存档不再支持允许覆盖,也就是只能用实时存档。
注意:目前全局存档的数值类型为int32
,可表示范围为-2147483648~2147483647
。如果数值超出了此范围,则玩家进入游戏时会无法正常获取对应的值,比如用了一段时间之后,突然拿不到全局存档的值了。遇到这种情况你也可以直接增加一个当前值的负值,就能把对应的全局存档值重新置为0。
一般情况下比较关键的数据,需要及时存储的数据都建议使用实时存档,因为实时存档不会因为闪退丢失,并且安全性更高(一定程度上防外挂),如:玩家金币。
使用表格的实时存档时,注意key
不要有特殊符号,并尽量使用纯英文的key,确保不会因为像[,],=,:,int_,_int,Fix32(,),[","]
等特殊符号而导致出现key识别的问题。value字符串格式也不要有类似的特殊符号,不支持嵌套字符串格式。
本地排行榜没有实际本地存储的数据,运行时是通过存档配置以及玩家存档值计算而得出。因此,想要修改值实际只需要修改对应玩家的存档值即可。在后续的迭代计划中,全局存档也将变成实时存档,表格存档已经不再支持不安全的允许覆盖性存档,总体上将不再支持非实时存档。
查询玩家存档:在作者之家找到“用户运营-存档查询”,输入玩家id即可查询存档,也可以下载查询到的玩家存档直接覆盖本地的存档验证。
7.2 存档详细流程
1.2.22版本前,存档将会先在玩家的客户端发生变化,然后在调用上传存档时上传到服务器进行存储。由于上传存在最小间隔的限制,玩家消耗物品后如果断开网络链接不再重连,可能会丢失进度,达到重复刷取的效果。
为了避免这个问题,1.2.22版本后的字符串、布尔、整数、浮点数存档将在设置后立即上传。由于表格型存档涉及到的数据量较大,实时上传可能造成多种问题,所以表格型存档和全局存档的数据将仍然通过上传存档的语句进行上传。
另外,为了解决表格型存档的既有问题,编辑器也为表格存档提供了实时上传的修改方式。打开存档槽设置后找到需要升级的表格存档槽,将默认的是否禁用覆盖操作由否改为是即可。表格型存档槽将会默认加密,无须对其额外进行加密表操作。
注意:在修改过后,原来的设置表格存档槽位为表的ECA将不再能够生效。 需要对表格槽位进行修改时,需要使用新的语句直接访问存档槽位进行设置。
当前支持设置和增量设置两种方式。使用设置语句时,会直接将玩家对应字段的存档变为参数值。在使用增量设置时,服务器将会根据玩家服务器的已有数据做运算得到最终结果,相对来说会更加安全,但仅支持数值类型的参数,需要自行保证索引的准确性。
在使用时,建议在游戏初始化阶段将存档槽的数据存为表格变量,每次存档操作确保表格变量与存档槽中的数据同步进行修改。为了满足调试需求,提供了新的从表格存档中取值的方式,主要用于验证存档槽与自行管理的表格变量中的数据是否一致。
7.3 离线存档
离线存档用于获取非当局玩家的存档数据,可以用此数据做离线pvp竞技场等业务。
- 离线存档配置:首先在存档槽设置界面创建一个字符串类型的存档,然后切换到离线存档页签,选择刚才新建的字符串存档,进行离线存档配置。
- 离线存档获取:通过“玩家-请求获取玩家离线存档”动作,并配合函数:玩家 - 获取排行榜指定排名玩家的aid,来异步的获取指定玩家的离线存档。
为了提升存档的易用性与安全性,对于非实时存档,表格类型存档不再支持允许覆盖类型,旧存档可修改为禁用覆盖。
7.4 排行榜功能
7.4.1 开启排行榜
存档排行榜是Y3编辑器中一个功能,开发者可以选择特定的整形存档数据(如玩家得分、经验值等),设置这些数据是否应该被计入排行榜。当设置了整形存档计入排行榜后,这些数据的任何变化都会自动同步更新到排行榜中,反映玩家的最新排名。
在游戏编辑器的主界面->细节中,可以打开存档设置界面。在游戏开始时,排行榜数据会被加载进游戏中(通过对应的ECA来获取对应排名玩家的昵称和得分)。
你可以设置排行榜记录的最大玩家数,这个数字最多为200,但通常默认为10。注意,如果设置的人数太多,可能导致游戏开始时卡顿,一般设置1个排行榜即可。另外,降序表示分数高的排在前面,升序则是分数低的排在前面。
排行榜更新:当玩家的游戏存档数据被成功保存到数据库时,排行榜会立即更新。目前,排行榜上保存的数据是以玩家的 [aid#昵称](账号ID和昵称) 作为key(唯一标识),来获取其存档值(排名分数)。
7.4.2 存档槽
无论是RPG游戏中玩家的装备和等级,还是RTS游戏中的关卡进度,都需要被妥善保存。在Y3编辑器的“存储槽”选项卡中,你可以通过点击“加号”按钮来创建新的存档参数,这些参数将构成你游戏项目的存档结构。你还可以通过编写触发器,将这些存档数据上传到云服务器进行存储,并通过开发者平台来配置存档。
每个存档参数包括四个部分:槽位、数据类型、数据名称和初始值。数据名称和数据类型可以通过双击进行修改,初始值则通过单击添加。
7.4.3 排行榜清空与拉黑
-
获取权限:首先,您需要有权限来清空排行榜。如果您没有这个权限,可以联系游戏运营团队申请。
-
数据隔离:请记住,排行榜数据和玩家的存档数据是分开存储的,它们之间不会相互影响。这意味着,清空排行榜上的数据并不会影响到玩家的实际游戏存档,只有排行榜上显示的数据会被清除。如果您需要清空特定的存档槽数据,需要通过特定的游戏事件(ECA)来实现。
-
误操作恢复:如果您不小心清空了排行榜数据,可以选择恢复到最近一次删除前的状态。
排行榜有拉黑功能,玩家被加入黑名单后,无法更新存档数据到排行榜,但存档数据是正常更新。排行榜中原有的数据如果也不想看到则需要手动删除操作
八、防作弊设置
8.1 启用防作弊功能
防作弊配置主要用于解决玩家通过本地作弊程序修改与存档有关的内存值,然后将修改后的结果上报存档服务器导致的存档异常增加的情况。打开存档设置界面,你可以点击新建策略组来创建一个防作弊策略。
请注意,防作弊配置目前仅适用于数值型的存档槽位,且每个存档槽位只能被一个防作弊策略约束。如果你无法创建新的策略,检查是否有数值型存档槽位尚未配置防作弊策略。
创建防作弊策略后,你可以在策略条目中查看和编辑防刷分规则,正在编辑策略的存档槽位会在下拉列表中显示。勾选存档槽右边的仅增加,服务器将会把这个存档槽中所有导致下降的操作否决。
编辑防作弊规则:存档槽下面的界面对应着防刷分策略的表单,点击“加号”可以创建一条防作弊配置。比如下图配置了四个地图等级区间的玩家每天经验存档槽最大的增加量。在每天新增上限的基础上,你还可以通过点击每日最大值右侧的加号,创建单局新增的限制。
- 在1-10级的地图上,玩家每天最多获得100点经验;11-30时,每天最多获得100点经验,以此类推。
- 在1-10级的地图上,在前600秒玩家最多只能获得10点经验,在600到1800,最多获得50点经验,超过1800秒最多获得100点经验。
- 玩家等级超过配置的最大地图等级时,不再受到防刷分规则的约束。
8.2 物品掉落限制
这是一种游戏设计策略,其中随机掉落的逻辑不是在玩家的本地设备上执行,而是在服务器上执行,这样可以减少玩家通过修改本地游戏数据来操纵掉落结果的可能性。
相关ECA | 描述 | 参数说明 | 返回值/行为 |
---|---|---|---|
存档 | 使玩家以服务器掉落策略执行掉落(在服务器上计算,以确保公平性和防止作弊) | 包含一个匿名函数:动作列表,这些操作会在服务器完成掉落计算后执行 | 如果发送掉落请求的客户端不是参数中指定的玩家,那么这个掉落请求将不会生效,但动作列表仍执行(如日志记录或错误处理) |
特殊 - 获取服务器执行结果 | 仅在存档ECA的动作列表中可以看到 | 返回整数。0:成功,1:不满足触发间隔, 2:不满足每日限制,999:服务器链接问题 | |
特殊 - 遍历服务器掉落结果做动作 | 仅在存档ECA的动作列表中可以看到,有几个物品掉落,就遍历几次 | 见第4和第5条 | 执行失败时,列表为空,对应动作不执行 |
特殊 - 获取遍历到的掉落影响存档所在槽位 | 获取当前遍历到的掉落物品将影响的存档槽位的id | 返回一个整数,代表玩家存档中的一个特定槽位的id,这个槽位将被掉落物品更新 | |
特殊 - 获取遍历到的服务器掉落的存档影响值 | 获取当前遍历到的掉落物品对存档槽位的实际增量值。 | 返回整数,代表对应玩家存档id的实际增量 |
8.3 Y3地图防作弊策略
-
避免随机性数据延迟存档:避免将随机生成的数据(如抽奖结果、属性洗练结果、开箱结果等)延迟存储。
之前讲过,当表格数据被设置为允许覆盖时,其存档模式就变成非实时存档,会有一分钟的存档上传间隔,使用这类类数据的存档槽也就不是实时更新的。当玩家对随机结果不满意,可以在数据上传之前结束游戏进程(“杀端”),从而避免不想要的结果被存档。使用禁用覆盖操作的表格存档槽或其它类型存档槽可避免此情况。 -
使用加密表保护关键数据:使用ECA接口表->加密表格可通过特殊算法对指定表中的数据进行加密,提高数据的安全性。但是此项操作性能成本较高,故仅推荐对关键数据表进行使用。
-
开启反作弊检查:官方提供了一些作弊检查机制,可在运行时识别一些作弊情况。比如使用ECA接口单位->开启属性作弊检查即可开启对某一单位的检查。如果官方机制识别到作弊情况,可通过监听->玩家 -> 检测到作弊 进行监听。
- 若检测到的单位为空单位则代表存档作弊,否则为单位属性作弊。
- 注意!!!检测到存档作弊后,默认会禁止该玩家在本局游戏中再上传所有类型的存档,不过在此事件触发期间仍允许上传(仅限该事件期间,可通过存档对玩家进行例如标记黑名单等方式处理)。
- 设置存档槽限制规则:根据业务需求,合理设置存档槽的限制规则。
- 上传日期限制/上传时间段限制:限定某个存档槽只能在星期几或某个时间段被修改,适用于一些仅在周期性活动投放的数值。
- 单局分数限制
- 地图等级、每日成长限制
-
使用服务器随机池:使用服务器随机池代替本地逻辑,配置掉落个数、每日限制、触发间隔等参数。开发者可以为不同的掉落物品设置不同的概率权重,还可以以此更新玩家存档中的特定数值,如玩家的积分、货币或其他资源,减少被玩家恶意串改的可能。
-
利用多人环境的不同步回调进行防作弊检测
如果地图异步问题解决的很好,异步率能够控制在万分之几的状态,且是一个强PVP玩法,可以考虑利用不同步回调进行防作弊逻辑;或者通过GameAPI.add_detail_log指令增加自定义存档检测逻辑,进行多玩家的存档检测,从而防止作弊。
-
其它方式
- 自定义的加密方式:使用特殊的加密方法来隐藏游戏数据,让作弊者难以理解。
- 使用实数类型存档:在存储游戏数据时,尽量使用实数而非简单的整数,因为实数类型在编辑器内部进行了加密逻辑,无法通过界面上显示的值进行内存定位,能够提高破解难度。
- 使用加密表存档:将游戏的存档数据加密,即使作弊者看到这些数据,也无法直接使用。
- 存档表中的值改成字符串:作弊工具(CT代码)会寻找并修改游戏中用于设置数值的函数,然后只需要简单地修改内存中的数值,就可以改变游戏状态。为了应对这种情况,开发者将数值转换为自定义的字符串格式(相当于用自己的方式进行加密)。这样,即使作弊者能够找到这些数值在内存中的位置,他们也无法直接识别和修改这些数值,因为它们不再是简单的数字,而是加密或编码后的字符串。
-
正在制作的防作弊机制
- 指定存档槽数值修改的gamemode:例如仅限gamemode=天梯时修改
- 随机只读存档:通过服务器生成一个随机数值,仅能通过服务器修改
- 请求服务器扣除存档槽数值回调:向服务器请求减少某个存档槽的数值。如果扣除失败,则返回失败;如果扣除成功,则在回调中响应后续逻辑。该机制可以避免被作弊器修改/锁定货币数值的情况。
- 限制存档槽值只能被服务器修改:禁止存档槽的值被客户端修改。通过服务器随机池和请求服务器扣除数值回调配合使用。
比如玩家获得货币的过程不是在客户端计算的,而是通过服务器的随机池来决定。当玩家需要使用货币时,这个过程也需要通过服务器的接口来完成。玩家的请求会发送到服务器,服务器会处理这个请求,并在服务器端扣除相应的货币数量。这意味着所有的计算和数据变动都在服务器端进行,客户端只负责显示结果。
- 预设存档槽数值变化行为:在编辑器中提前配置多个数值类存档槽的变化行为逻辑,如: 行为ID=1 :元宝-2,金创药 +5。通过纯服务端逻辑,避免客户端自行修改存档槽数值时可能出现的作弊可能。
相关文章:

Y3编辑器教程8:资源管理器与存档、防作弊设置
文章目录 一、资源管理器简介1.1 界面介绍1.2 资源商店1.3 AI专区1.3.1 AI文生图1.3.2 AI图生图1.3.3 立绘头像 二、导入导出2.1 文件格式2.2 模型导入2.2.1 模型制作后导出2.2.2 模型文件导入Y3编辑器2.2.3 Y3编辑器角色、装饰物模型要求 2.3 纹理导入2.4 材质贴图2.4.1 材质支…...

智慧社区电子商务系统:实现社区资源的数字化管理
2.1vue技术 Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式JavaScript框架。 [5] 与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项…...

精准提升:从94.5%到99.4%——目标检测调优全纪录
🚀 目标检测模型调优过程记录 在进行目标检测模型的训练过程中,我们面对了许多挑战与迭代。从初始模型的训练结果到最终的调优优化,每一步的实验和调整都有其独特的思路和收获。本文记录了我在优化目标检测模型的过程中进行的几次尝试&#…...

【LLM论文日更】| 训练大型语言模型在连续潜在空间中进行推理
论文:https://arxiv.org/pdf/2412.06769代码:暂未开源机构 :Meta领域:思维链发表:arxiv 研究背景 研究问题:这篇文章要解决的问题是如何在大语言模型(LLMs)中实现一种新的推理范式&…...

智能家居实训室中,STC单片机驱动的“互联网+”智能家居系统设计
一、引言 随着经济的快速发展,人们对家居环境的智能化、网络化需求日益增强,智能家居的研究也因此受到了国内外相关机构的广泛关注。STC单片机凭借其卓越的性能和广泛的应用领域,成为了智能家居系统设计的优选方案。作为一种先进的微控制器&…...
《C++ 赋能强化学习:Q - learning 算法的实现之路》
在当今科技飞速发展的时代,人工智能无疑是最热门的领域之一,而强化学习作为其中的重要分支,正逐渐改变着我们解决复杂问题的方式。Q - learning 算法作为强化学习中的经典算法,在众多领域如游戏、机器人控制、资源管理等有着广泛的…...
三维模型中的UV展开是什么意思?它有什么优势?
UV展开涉及将三维模型的表面展开为一个或多个二维区域,以便将纹理图像正确地映射到模型上。这个过程类似于将一个立体物体的表面切割并平铺开来。UV坐标是用于在二维纹理图像中定位颜色和细节的坐标系统,U和V分别代表纹理图像的水平和垂直轴。 UV展开它…...
怎么在ubuntu系统上安装qt项目的打包工具linuxdeployqt
引言 安装linuxdeployqt方案一方案二 在ubuntu系统上开发的项目最后需要完成打包,qtcreator本身就用一个打包工具,在ubuntu系统上是linuxdeployqt。本文主要记录一下怎么在ubuntu系统上安装qt打包工具linuxdeployqt。 安装linuxdeployqt 前提是已经安装…...

SQL语句整理五-StarRocks
文章目录 查看版本号:SPLIT:insert 和 update 结合 select:报错:1064 - StarRocks planner use long time 3000 ms in memo phase:字段增删改: 查看版本号: select current_version(); current…...
【C#】try-catch-finally语句的执行顺序,以及在发生异常时的执行顺序
try-catch-finally语句 执行顺序 执行 try 块:程序首先尝试执行 try 块中的代码。如果在此期间没有发生异常,则跳过 catch 块,直接执行 finally 块(如果存在)。 发生异常时的处理: 如果在 try 块中发生了…...
【vue】vite + ts +vue3 安装pinia
vue3 TS 安装使用pinia状态管理_vue3 ts pinia-CSDN博客...
PointPillars:数据预处理
在 PointPillars 算法中,将点云划分为点柱(Pillars)是核心步骤之一,用于将稀疏点云数据转换为规则的张量表示,方便后续 2D 卷积操作。以下是点云划分为点柱的具体方法和实现步骤: 1. 点云划分为网格 将 3D…...
node.js的异步工作之---回调函数与回调地狱
回调函数:在 Node.js 中,很多 API 都是异步的,通常通过回调函数来处理操作完成后的结果。这种回调模式虽然非常高效,但会导致代码逐渐变得难以维护,尤其是当有多个异步操作嵌套时(即回调地狱)。…...
Mac Android studio 升级LadyBug 版本,所产生的bug
当Build 出现,这样的文字以后: Your build is currently configured to use incompatible Java 21.0.3 and Gradle 7.3.3. Cannot sync the project. We recommend upgrading to Gradle version 8.9. The minimum compatible Gradle version is 8.5. …...
stm32 hex文件烧写
STM32的HEX文件烧写是将编译后的程序代码(以HEX格式存储)下载到STM32单片机中的过程。以下是对STM32 HEX文件烧写的详细解释: 一、HEX文件简介 HEX文件,即Intel HEX文件,是一种由文本行组成的ASCII文件,每…...

【编译原理】编译原理知识点汇总·属性文法和语法制导翻译
🌈 个人主页:十二月的猫-CSDN博客 🔥 系列专栏: 🏀编译原理_十二月的猫的博客-CSDN博客 💪🏻 十二月的寒冬阻挡不了春天的脚步,十二点的黑夜遮蔽不住黎明的曙光 目录 1. 前言 2. …...

【unity c#】深入理解string,以及不同方式构造类与反射的性能测试(基于BenchmarkDotNet)
出这篇文章的主要一个原因就是ai回答的性能差异和实际测试完全不同,比如说是先获取构造函数再构造比Activator.CreateInstance(type)快,实际却相反 对测试结果的评价基于5.0,因为找不到unity6确切使用的net版本,根据c#9推测是net5…...
VSCode 插件开发实战(八):创建和管理任务 Task
前言 VSCode 的扩展能力使得开发者能够根据个人需求定制工作环境,自定义插件和任务管理是 VSCode 强大功能的一部分,通过这些功能,开发者可以自动化常见工作流,简化日常开发任务,提高整体开发效率。本文将详细介绍如何…...
在 Node.js 中正确处理 `async/await` 及数组迭代
在使用 Node.js 开发应用程序时,我们常常需要处理异步操作。例如,当我们从数据库获取数据、调用外部API或执行文件读取时,这些操作都可能需要一些时间才能完成。在这种情况下,我们通常会使用 async/await 语法来简化异步编程的复杂…...
本科阶段最后一次竞赛Vlog——2024年智能车大赛智慧医疗组准备全过程——13使用Resnet-Bin
本科阶段最后一次竞赛Vlog——2024年智能车大赛智慧医疗组准备全过程——13使用Resnet-Bin 根据前面的内容,目前已经可以获取到resnet的bin模型 1 .Resnet的bin测试 这里给大家一个测试视频里面黑线的demo,大家可以用来测试自己的黑线识别精度 …...

低功耗MQTT物联网架构Java实现揭秘
文章目录 一、引言二、相关技术概述2.1 物联网概述2.2 MQTT协议java三、基于MQTT的Iot物联网架构设计3.1 架构总体设计3.2 MQTT代理服务器选择3.3 物联网设备设计3.4 应用服务器设计四、基于MQTT的Iot物联网架构的Java实现4.1 开发环境搭建4.2 MQTT客户端实现4.3 应用服务器实现…...
【PCIe总线】 -- PCI、PCIe相关实现
PCI、PCIe相关概念和知识点 【PCIe总线】-- PCI、PCIe基础知识点整理 【PCIe】非常适合初学的pcie博客(PCIe知识整理) PCIe具体实现 【PCIe】如何获取PCIe的BAR空间大小?...

C# 快速检测 PDF 是否加密,并验证正确密码
引言:为什么需要检测PDF加密状态? 在批量文档处理系统(如 OCR 文字识别、内容提取、格式转换)中,加密 PDF 无法直接操作。检测加密状态可提前筛选文件,避免流程因密码验证失败而中断。 本文使用 Free Spire…...
Flink 高可用集群部署指南
一、部署架构设计 1. 集群架构 graph TDClient([客户端]) --> JM1[JobManager 1]Client --> JM2[JobManager 2]Client --> JM3[JobManager 3]subgraph ZooKeeper集群ZK1[ZooKeeper 1]ZK2[ZooKeeper 2]ZK3[ZooKeeper 3]endsubgraph TaskManager集群TM1[TaskManager 1…...

AI书签管理工具开发全记录(十三):TUI基本框架搭建
文章目录 AI书签管理工具开发全记录(十三):TUI基本框架搭建前言 📝1.TUI介绍 🔍2. 框架选择 ⚙️3. 功能梳理 🎯4. 基础框架搭建⚙️4.1 安装4.2 参数设计4.3 绘制ui4.3.1 设计结构体4.3.2 创建头部4.3.3 创…...
<2>-MySQL库的操作
目录 一,创建数据库 二,查看字符集和校验规则 三,修改数据库 四,删除数据库 五,备份和恢复数据库 六,查看连接 一,创建数据库 创建一个名为bin_db的数据库,并设置字符集为utf8…...

2025年,百度智能云打响AI落地升维战
如果说从AI到Agent是对于产品落地形态的共识,那么如今百度智能云打响的恰是一个基于Agent进行TO B行业表达的AI生产力升维战。 在这个新的工程体系能力里,除了之前百度Create大会上提出的面向Agent的RAG能力等通用能力模块,对更为专业、个性…...

解决uniapp开发app map组件最高层级 遮挡自定义解决底部tabbar方法
subNvue,是 vue 页面的原生子窗体,把weex渲染的原生界面当做 vue 页面的子窗体覆盖在页面上。它不是全屏页面,它给App平台vue页面中的层级覆盖和原生界面自定义提供了更强大和灵活的解决方案。它也不是组件,就是一个原生子窗体。 …...

(33)课54--??:3 张表的 join-on 连接举例,多表查询总结。
(112)3 张表的 join-on 连接举例 : (113) 多表查询总结 : (114)事务 : (115) (116) (117) …...

Nginx + Tomcat负载均衡群集
目录 一、案例环境 二、部署 Tomcat(102/103) 1、准备环境 (1)关闭firewalld 防火墙 (2)安装JDK 2、安装配置 Tomcat (1)Tomcat 的安装和配置 (2)移动…...