UGC Mod
UGC Mod
UGC Mod 需要单独开通,联系我们 启用 UGC Mod 让玩家可以定制和增强游戏体验,创造属于玩家自己的独特世界
什么是 UGC Mod?
UGC Mod
UGC Mod(User Generated Content Modification,用户生成游戏内容模组)是一项让玩家创造和修改游戏内容的扩展功能。通过 UGC Mod,玩家可以将他们的创意融入游戏中,从而为游戏增添更多乐趣和多样性。玩家可以创建新的关卡、角色、道具甚至整个游戏模组,与其他玩家分享他们的作品。UGC Mod 不仅丰富了游戏的内容,也促进了玩家之间的互动和社区建设,为游戏带来更长久的生命力和活力。
UGC Mod 作为 UOS CDN 的扩展产品支持其他玩家也可以通过资源更新的形式下载并体验这些由社区创作的内容,为游戏带来全新的体验和挑战,为创建和管理游戏玩家生成的游戏内容模组提供了端到端的解决方案,包括发布、存储、策展、审核和分发。
UGC Mod 管理后台
为了确保内容的质量和合规性,同时避免潜在的风险问题,游戏玩家发布 Mod 内容后,需要经由审核批准才能正式上线。在启用 UGC Mod 扩展功能后,管理员可以在 UGC Mod 管理后台中,对用户创建的内容进行审核和管理,以确保用户生成内容的安全性和良好体验。UGC Mod 管理后台在整个内容生命周期中起着至关重要的作用,帮助维护游戏平台的秩序和品质。
Mod Bucket 与 Mod Id
游戏玩家在创作 Mod 内容时,UOS CDN 会为每个 Mod 作品创建单独的存储桶,用于创建清晰的工作流程。每一个 Mod Bucket 都会有 Mod Id 作为其唯一标识。玩家可以通过 Mod Id 上传、更新和管理所有相关资源,确保所有与该模组相关的内容都可以方便地集中存放和管理。通过 Mod Bucket 和 Mod Id,玩家可以轻松地对其创作的内容进行版本控制、更新和分享,为游戏玩家的 Mod 创作过程提供了便利和有效的管理工具。
Mod 版本
UOS CDN 为 UGC Mod 提供了灵活的版本控制方案。在 游戏玩家 完成Mod作品的创作后,当他们提交审核时,需要提供版本说明和版本号。版本号的格式可以由用户自行制定,用作当前审核版本的标识。游戏玩家可以记录 Mod 作品的每个不同版本,并在提交审核时提供详细的版本说明,让审核人员了解到Mod作品的更新内容和改动。版本号的设置可以帮助玩家快速识别和区分不同版本的Mod作品,方便管理和追踪每个版本的审核进度和历史记录。
Mod 生命周期
每个 Mod 作品会经历以下生命周期:
草稿箱 (not_start):代表该 Mod 作品已经成功创建,游戏玩家正在对内容进行创作或者修订,尚未提交。
待审核 (ongoing):代表该 Mod 作品已提交,需要管理员对内容进行审核。
已发布 (success):代表该 Mod 作品已审核通过,并正式发布。
已拒绝 (failed):代表该 Mod 作品未审核通过。
SDK 接入
安装依赖
点击左上角的 「+」,选择 「Add package by name」,输入 com.unity.nuget.newtonsoft-json ,版本号 3.0.2 ,点击 「Add」 等待安装完成。
准备工作
下载 UGC Mod Package 并自行导入到工程项目 (目前仅支持 Unity 2021 及以上版本) Package (V0.0.6)
在「UOS -> UGC -> settings」中配置AppId和AppSecret:
注:此处 AppId 和 AppSecret,可在 UOS 网站上获取


调用示例
初始化SDK
UgcSDK.Init();登录 UOS UGC
玩家登录账号后调用,用于获取 UOS UGC 的认证 token
await UgcSDK.Login( provider, providerApp, playerId, playerToken);创建 Mod
await UgcSDK.CreateMod( new CreateModRequest() { Name = "Demo", Author = "Unity", Description = "First" })上传 Mod 文件
调用CreateMod()方法后,可以根据所创建的 Mod 的Id上传相应的 Mod 文件
await UgcSDK.UploadMod(modId, new LocalFile(filename, data)); // 若data为 byte[] 类型上传多媒体资源
多媒体资源可以用于 Mod 的封面、缩略图或演示视频等用途
await UgcSDK.UploadResource(modId, new LocalFile(filename, data)); // 若data为 byte[] 类型更新 Mod 属性
需要注意,Mod的属性信息为 全量更新
await UgcSDK.UpdateMod(modId, new UpdateModRequest(){
Name = "Demo",
Description = "First",
Cover = url, // 封面链接,url为UploadResource的返回值,
Gallery = new List<string>() { url1, url2 }, // 简介的缩略图频链接,url1, url2为UploadResource的返回值
Properties = new Dictionary<string, string>() { { "Map", "Sea" }, { "Mode", "Online" } } // 自定义属性
});提交 Mod
提交后,Mod 会进入等候审核阶段
await UgcSDK.SubmitVersion(_modId, new SubmitVersionRequest(){
Version = "1.0.0",
VersionDesc = "First Version"
});删除 Mod
await UgcSDK.DeleteMod(modId);列出所有已发布的 Mod
await UgcSDK.ListPublishedMods(1, 10) // 列出第1页的mod,每页显示10个列出所有自己的 Mod
await UgcSDK.ListOwnedMods(1, 10) // 列出第1页的mod,每页显示10个按条件查询已发布的 Mod
await UgcSDK.SearchPublishedMods(new SearchModRequest(){
Name = "De", // 根据mod的name和description字段进行模糊搜索
Page = 1, // 页码
PerPage = 10, // 每页显示数量
SortKey = SortKey.SubscriptionCount, // 返回结果的排序依据,默认是更新时间, 可填SortKey.SubscriptionCount / SortKey.LikeCount
SortOrder = SortOrder.Desc, // 排序顺序,默认Desc,可填SortOrder.Desc / SortOrder.Asc
Properties = new Dictionary<string, string>() { { "Map", "Island" } } // 根据属性匹配mod
});列出mod当前的资源
其中,versionId请参考 提交 Mod 时创建的 VersionId 字段
await UgcSDK.ListEntries(modId); // 返回mod当前还未审核通过的资源列表
await UgcSDK.ListVersionEntries(modId, versionId); // 列出mod已发布版本的资源订阅 Mod
await UgcSDK.SubscribeMod(modId,versionId);取消订阅 Mod
await UgcSDK.UnsubscribeMod(modId,versionId);列出已订阅的 Mod
await UgcSDK.ListSubscribedMods();点赞 Mod
await UgcSDK.LikeMod(modId,versionId);取消点赞 Mod
await UgcSDK.UnlikeMod(modId,versionId);列出 Mod 的 flags (是否订阅、点赞过)
await UgcSDK.GetModFlags(modId);列出 Mod 的 flags 统计数据 (订阅数、点赞数)
await UgcSDK.GetModFlagsCount(modId);登出
UgcSDK.Logout();后台管理
在 UOS CDN 的 「UGC Mod」 页面中,可以对玩家上传的 Mod 进行管理和审核
如果 Mod 已经提交进入等候审核阶段(即「待审核」状态的 Mod),那么就可以在 Mod 的详情页中对最新的版本内容进行审核,并提交相应的审核结果。
一旦审核通过,该版本就会发布并被标定为该 Mod 的最新可用版本,供其他玩家下载和体验。