如何设计技能系统
文档版本 修订记录 修订日期 1.0.0 init 2023-1-7 1.0.1 修复部分显示错误 2023-1-7 在你开始阅读这篇文章之前,建议优先了解如下内容,否则会导致部分段落无法理解 ET Luban Luban Excel 配表工具使用推荐及总结 Luban_Example 如何设计角色属性组件 CliToolkit 工具 推荐结合 hepta文档 一同进行阅读,方便理解数据是如何流转…
置顶
|
2023-1-07 22:50
|
|
11002 字
|
1.9 小时
使用 InterpolatedString 减少字符串拼接的 GC
原视频链接 考虑到 Unity 准备在 2024 年前后,推出基于 dotnet Runtime 的版本,本篇文章也标记为 Unity 分类,等后面 Unity 准备好之后,再对新版的客户端进行改造 在日常开发过程中,字符串的拼接通常会占用大量的 GC,通常拼接字符串我们会使用如下几种方法 1. 1 + "/" + 2 + "/" + 3 2. StringBuilder 3. string.Fo…
2023-1-29 15:23
|
|
746 字
|
8 分钟
向一个外部类插入属性
原视频链接 假设我们有如下 Unit 类,仅有一个 name 字段 public class Unit { public string name; } 此时我们有一个需求,所有 Unit 都希望有一个 position 字段 Unit 类可能因为各种原因无法扩展,比如在 dll 里、package 里,或者你本身不希望侵入 Unit 类进行新字段的增加,此时为了解决这个问题,我们有如下定义 pub…
2023-1-14 13:51
|
|
261 字
|
3 分钟
C# 在不同环境下调用 shell 脚本
目标 & 背景 一般在开发一个项目时,往往会分出 N 多个 git 仓库,挨个手动更新会很麻烦,如果希望使用 C# 调用一些 git 相关的命令,通常会使用 Process 这类。由于某些仓库,如配表的导出,我们会写一个比较长的 shell 处理,此时就需要使用 Process 来调用 shell 这个时候问题就出现了,在 Windows/Mac 上,死活找不到 dotnet,两者的处理过…
2023-1-08 13:02
|
|
1247 字
|
8 分钟
CliToolkit 工具
目标 & 背景 在游戏开发过程中,通常我们会为了更好的测试、校验逻辑正确性等,开发很多工具,最常见的就是 GM1 指令,以及一些为运营同学开发的运营工具,如:发送邮件,开启活动等等 这样我们就可以将工具分为两大类 游戏内建 GM 指令 部分工具可以直接丢进 Unity Editor 开发 运营工具(Web) 但是在实际开发过程中,我总是会碰到一些工具放在哪里都不合适,比如:正式服的 AB …
2022-11-20 11:29
|
|
862 字
|
4 分钟
如何设计角色属性组件
目标 & 背景 本篇文章是对 ET1 中 NumericComponent 的介绍和补充,会围绕实际开发过程中可能会碰到的一些问题,给一个解题思路,并且会结合 Luban2 给出一个策划和程序都开心的方案 猫大曾经对 NumericComponent 做出过如下评论 单 NumericComponent 就可以完成 80% Moba 类游戏的设计了 属性组件作为游戏战斗中最底层的设计,拥有…
2022-11-06 11:48
|
|
1959 字
|
11 分钟
如何设计游戏登录流程
目标 & 背景 一般来说,游戏的开启,到登陆成功,进入游戏主页,中间的过程是十分复杂的,为了适应各种各样的突发情况、运营需求等,整体登录流程的设计,需要考虑到非常多的情况 我们期望达成的目标可以粗暴的分成下面三个分支,接下来我们一点点对功能进行补充 正常线上玩家 白名单 审核 开始之前 推荐客户端优先使用 HybridCLR1 和 YooAsset2 这两个工具来解决,代码热更和资源热更的…
2022-10-28 15:55
|
|
1717 字
|
7 分钟
定制 Unity BuildIn Package
目标 & 背景 在 内网 Package 管理 这篇文章中我们提到了如何自建 npm 工具包,整合 unity 官方 package 和公司自定义的私有 package 此时就会碰到一个新的问题,如果我们修改了 unity 内建的 package 时,就必须要考虑如何适配的问题 比如:项目中自定义的 UI 框架中,需要对现有的 com.unity.ugui 源码进行修改,此时需要使用项目自…
2022-10-28 13:43
|
|
426 字
|
2 分钟
内网 Package 管理
目标 & 背景 一般来说,商业公司可能出于各种考量,会使用内网的开发环境,此时针对 Docker、NuGet、UMP 的服务全部都无法正常使用,同时公司也会自行维护一些自有的框架,也要解决包管理的问题 这篇文章希望通过介绍 SonaType Nexus1(下面简称为 Nexus) 的具体使用场景,补全一些网络上教程的空白,后面主要对 UMP 的使用场景进行介绍 从这些问题存在的角度上来看,…
2022-10-20 16:39
|
|
1133 字
|
6 分钟
C# Task 指南
目标 & 背景 前段时间在不同的技术交流群中,发现很多开发者在使用 async 时,多多少少会犯各种各样的错误,而这些错误想要纠正并不是三言两语能讲明白的,再加上很多资料也多少有些误导初学者使用的问题 希望本篇文章可以帮助你理解 async,并减少一些基础错误,本文中涉及的部分代码已经推送到 AsyncTutorial 仓库 理解 Task-like 引用 c#的await/async的优…
2022-10-11 16:14
|
|
2985 字
|
27 分钟
内存加密
目标 & 背景 抵御市面上常见的内存模糊搜索工具 没有致命性能问题 在手游的内存搜索工具上,一般来说 Android 需要 root 权限,iOS 需要越狱,但是在 PlayCover1出现后,打破了这个平衡 现在在 iOS 的版本下,对当前 iPA 进行砸壳后,使用 PlayCover1 运行,可以直接用 CE2 等工具,在开启 SIP3的情况下,可以直接对当前游戏进行内存搜索和修改,这…
2022-9-22 11:38
|
|
1403 字
|
8 分钟
UWA Pipeline 使用前的准备工作
Pipeline1 简介 后面简称为 ppl ppl 是集合了目前 UWA所有产品功能为一身的工具,可以用很小的成本,从一些真机自动化等机械性重复性劳动中解放出来,如:自动化性能测试、可靠性真机测试等等,当然里面功能很多,如果不了解 ppl,推荐去官网1 了解一下具体功能,或者找 UWA 的工作人员申请一下试用 目前整体使用下来,对我们项目而言,最重要的是解放重复性劳动,以及整体项目的性能把控上。…
2022-8-26 13:26
|
|
1650 字
|
13 分钟
粒子性能持续监测
最近受到 UWA 的启发,有一个非常不错的粒子性能持续检测的思路,这里需要使用使用 UWA 的 GOT,后续的完全自动化,需要使用 UWA 的 Pipeline 最终结果呈现如下,这里的每个间隔代表了每个特效的实际渲染耗时,可以非常直观的看到,到底哪个特效存在问题 目标 & 背景 测试项目完全与客户端工程隔离 美术资源完全复用 前两项是为了隔离美术工程和客户端工程,一般来说,美术不应该接触…
2022-8-20 13:12
|
|
649 字
|
6 分钟
如何设计本地化组件
在我们项目开始初期,面临一个问题,就是本地化组件到底要不要重新造一次轮子。为了回答这个问题,首先我们需要仔细分析一下,本地化究竟需要哪些功能 业务逻辑动态扩容语言支持 运行时热切换语言,无需重启 对于代码赋值的部分,无法做到实时变化,需要等下一次赋值 任意多种资源类型的本地化 文字 图片等 配表字段自动本地化 代码动态赋值本地化 避免手输 string,提供动态生成翻译 key 常量代码工具 脚本…
2022-8-14 12:14
|
|
3227 字
|
34 分钟
TextMeshPro 填坑
最近在项目里碰到字体开启描边后缩放很小时,会有清晰的轮廓线,查了半天也没弄明白到底因为啥,最后看了 Unity 的论坛发现, Padding 最好设置为当前子大小的 10%,也就是下面的第二条 这是和我碰到同样问题的小哥贴的图 原文1 requently Asked Questions (in the process of being revised / edited) 1. When I cha…
2022-8-08 16:12
|
|
1356 字
|
9 分钟
ET Entity Tree 工具
目标 对整体 Entity 组件的树形图进行绘制 多个 Child 要有效区分,如 Unit、Scene 选中 Entity 时,可以查看 Entity 的属性 有办法查看 Unit 上挂载的 NubericComponent 中具体的属性 具体实现 第一条树形图的绘制没什么好说的,本身就是 Unity 自带的 TreeView 的基础实现,这里直接略过,感兴趣可以自行阅读源码 不同实体区分 日常…
2022-8-06 11:45
|
|
1066 字
|
16 分钟
对资源的规范化我们能做什么
游戏开发中,资源的管理是一项非常精细的活,不同类型的资源往往拥有完全不同的管理方式和配置方式,本文希望从 5 个不同的管理级别对资源管理进行解构 致命资源错误不让保存 保存了不让提交 提交了可以快速发现问题 发现问题可以快速修复 版本问题记录 对于可以使用 AssetPostprocessor 解决的问题,这里就不做介绍了,这种问题一般都非常简单,如果不清楚如何使用,可以搜一下相关实现 本文提到的…
2022-7-30 23:24
|
|
2478 字
|
19 分钟
基于 ECS 设计下的加载管理
之前在 Addressable 迁移 YooAsset 这篇文章中做了分层设计的相关介绍,本文为分层中详细的解析,以及为什么要这么设计 目标 & 背景 我们当前使用的框架,需要设计成一个基础库,以 Package 的形式进行使用,方便公司中其他项目后续的接入,所以泛用性要求很高,此外,开发者的水平可能会参差不齐,可能会有应届生刚刚接触 Unity 等现实因素的考量,因此我们需要达成如下目标…
2022-7-16 11:13
|
|
2075 字
|
24 分钟
一些关于代码积累的记录
UPM 开始之前 通用框架要解决什么问题? 什么内容有资格放进框架中? 这种设计会不会给开发者带来额外的负担? 内网!内网! OpenSSH 标准的 ssh 管理 最后 当你需要新开一个项目时,往往需要从一些旧项目中拿走一些现成的框架,但这里的代码,如果没有好好管理,新开项目时往往要大费周章从旧有项目中剔除很多没必要的内容 如果将框架直接放在业务逻辑中,往往会出现一些开发者胡乱修改框架内容,或者图…
2022-7-02 12:59
|
|
2272 字
|
9 分钟
为什么抛弃了 Addressable
外链 多人协作灾难 自动 Import git hook 禁止提交 Missing Reference 资源地址撞 key 源码异常难懂 偶现的首包 ab 错误 https 校验问题 动态切换 CDN 源 Addressable 做的好的地方 YooAsset 个人使用和关注 Addressable 有段时间了,对 Addressable 的缺点容忍了很久,最终在一次打包时加班到 11 点后,决定…
2022-6-24 15:17
|
|
1733 字
|
7 分钟