一.在哪里
商店配置相关文件在Resources\ExcelOutput\ShopConfig.json文件中
二.功能解析
该数据结构用于定义游戏内商店系统的完整配置体系,包含以下核心功能:
- 商店分类管理:通过
ShopMainType
划分主商店/NPC商店,ShopType
定义76种细分商店类型(抽卡/材料/活动等) - 动态解锁控制:
LimitType1
配合LimitValue1List
实现等级/任务进度等解锁条件 - 多语言支持:Hash字段实现文本本地化索引
- 资源动态加载:
ShopIconPath
实现UI图标按需加载 - 运营控制:通过
IsOpen
和ScheduleDataID
控制商店开放状态和时间 - 安全验证:
ServerVerification
标记需要服务端验证的交易
三.关键字段数据解析
字段名 | 数据类型 | 示例值 | 核心作用 |
---|---|---|---|
ShopID | int | 101 | 商店唯一标识符(范围101-999) |
ShopType | int | 1-76 | 商店功能类型(1=抽卡,3=材料,17=剧情等) |
ShopMainType | string | Main/Npc | 商店主分类(主界面/NPC关联) |
LimitType1 | string | Level/MainMission | 解锁条件类型 |
LimitValue1List | int[] | [4010105] | 解锁所需等级/任务ID |
ScheduleDataID | int | 300101 | 时间计划配置ID |
ShopIconPath | string | SpriteOutput/… | 图标资源路径 |
IsOpen | bool | true | 当前开放状态 |
ShopSortID | int | 1 | 界面排序优先级 |
四.关键字段技术细节
- Hash映射系统:
ShopName.Hash
(32位)和Hash64
(64位)共同构成本地化键- 使用CityHash算法生成,示例:-33573267 → “抽卡商店”
- 实现方案:
TextManager.GetText(hash)
- 资源加载路径:
// Unity资源加载示例
Sprite icon = Resources.Load<Sprite>(shopConfig.ShopIconPath);
3.条件验证流程:
graph TD
A[访问商店] --> B{ServerVerification?}
B -->|是| C[请求服务器验证]
B -->|否| D[本地检查LimitValue]
C --> E[返回验证结果]
D --> F[通过本地条件]
五.数据结构示例
{
"LimitValue1List": [4010105],
"ShopIconPath": "SpriteOutput/TabIcon/Shop/ShopLightConIcon.png",
"ShopBar": "Shop202Page",
"ShopName": {
"Hash": -33573299,
"Hash64": 12905818303918459561
},
"ShopID": 202,
"ShopType": 17,
"ShopMainType": "Main",
"LimitType1": "MainMission",
"ScheduleDataID": 300202,
"IsOpen": true,
"ShopSortID": 10
}
六.数据结构全字段解析
字段 | 类型 | 必填 | 说明 | 技术细节 |
---|---|---|---|---|
ShopID | int | ✔ | 商店唯一ID | 范围100-9999,按类型分段 |
ShopType | int | ✔ | 商店类型代码 | 预定义枚举值 |
ShopMainType | string | ✔ | 主分类 | Main/Npc/Activity |
LimitType1 | string | ✔ | 解锁条件类型 | Level/MainMission/Quest |
LimitValue1List | int[] | ✔ | 解锁参数 | 支持多条件配置 |
LimitValue2List | int[] | 备用条件 | 目前未使用 | |
ShopIconPath | string | ✔ | 图标路径 | 需严格匹配资源目录 |
ShopBar | string | ✔ | UI页面名称 | 对应预制体名称 |
ScheduleDataID | int | 时间计划ID | 关联ScheduleTable | |
ServerVerification | bool | 服务端验证 | true时需二次确认 | |
HideRemainTime | bool | ✔ | 隐藏倒计时 | 控制UI元素显示 |
ShopSortID | int | ✔ | 排序权重 | 数值越小排序越靠前 |
ActivityModuleID | int | 活动模块ID | 仅活动商店有效 |
七.运行逻辑
- 初始化流程:
- 资源预加载:根据
ShopIconPath
加载所有商店图标 - 条件检查:遍历
LimitValue1List
验证玩家进度 - 状态同步:通过
ScheduleDataID
获取服务器时间校验开放状态
- 资源预加载:根据
- 商店访问流程:
sequenceDiagram Player->>Client: 打开商店界面 Client->>Server: 请求商店状态(SyncShopStatus) Server->>Client: 返回开放状态和商品数据 Client->>UI: 按ShopSortID排序显示 UI->>Localization: 通过Hash获取本地化文本
- 购买验证流程:
bool CanPurchase(ShopConfig shop) {
if (shop.ServerVerification) {
return Server.VerifyPurchase(shop.ShopID);
}
return CheckLocalCondition(shop.LimitValue1List);
}
八.修改指南
- 新增商店:
- ID分配:按类型选择合适区间(常规商店300-500,活动商店500-600)
- 图标规范:PNG格式,尺寸256×256,存放至指定目录
- 示例配置:
{ "ShopID": 601, "ShopType": 76, "ShopMainType": "Event", "LimitType1": "Level", "LimitValue1List": [30], "ShopIconPath": "UI/EventShop/SummerEvent.png" }
- 修改建议:
- 避免修改已发布的ShopID
- LimitValue1List数组长度不超过3
- 新增ShopType需同步更新枚举定义
- 测试流程:
- 本地JSON校验
- 资源路径验证
- 多语言覆盖率检查
- 服务端同步测试
九.代码示例
// 商店配置1:主界面抽卡商店(初级)
{
"LimitValue1List": [1], // 解锁条件:玩家等级≥1级
"LimitValue2List": [], // 预留条件(当前未使用)
"ShopIconPath": "SpriteOutput/TabIcon/Shop/ShopDrawcardIcon02.png", // 卡池图标(蓝色主题)
"ShopBar": "Shop101Page", // 对应的UI页面预制体名称
"ShopName": { // 本地化文本哈希
"Hash": -33573267, // 短哈希(兼容旧系统)
"Hash64": 16829471444158351973 // 长哈希(对应"初级抽卡商店")
},
"ShopID": 101, // 商店唯一ID(1开头表示抽卡类)
"ShopType": 1, // 商店类型1=基础抽卡
"ShopMainType": "Main", // 主界面常驻商店
"LimitType1": "Level", // 解锁条件类型=等级限制
"ShopDesc": { // 商店描述文本哈希
"Hash": 1455825039, // 短哈希
"Hash64": 5242659586514105497 // 长哈希(如"新人专属卡池")
},
"ScheduleDataID": 300101, // 时间计划ID(永久开放配置)
"HideRemainTime": true, // 隐藏倒计时显示
"IsOpen": true, // 是否开放(总开关)
"ShopSortID": 1 // 界面排序第1位(最左侧标签页)
},
// 商店配置2:主界面抽卡商店(进阶)
{
"LimitValue1List": [1], // 解锁条件:玩家等级≥1级
"LimitValue2List": [], // 预留条件(未使用)
"ShopIconPath": "SpriteOutput/TabIcon/Shop/ShopDrawcardIcon01.png", // 卡池图标(金色主题)
"ShopBar": "Shop102Page", // 对应的UI页面预制体
"ShopName": {
"Hash": -33573268, // 短哈希
"Hash64": 10929922468647682746 // 长哈希(对应"进阶抽卡商店")
},
"ShopID": 102, // 商店唯一ID
"ShopType": 1, // 同属抽卡类型
"ShopMainType": "Main", // 主界面常驻
"LimitType1": "Level", // 相同等级条件
"ShopDesc": {
"Hash": 1455825042, // 短哈希
"Hash64": 14517118949767098567 // 长哈希(如"稀有角色概率UP")
},
"ScheduleDataID": 300102, // 时间计划ID(永久开放)
"HideRemainTime": true, // 隐藏倒计时
"IsOpen": true, // 启用状态
"ShopSortID": 2 // 界面排序第2位(右侧相邻标签页)
}
提示
本商店修改教程应当配合以下教程食用
综合讲解看以下文章
© 版权声明
文章版权归作者所有,未经允许请勿转载。
暂无评论内容