小游戏指南

小游戏介绍

产品定位

字节小游戏是基于字节跳动全产品矩阵开发,不需用户进行下载,点开即玩的全新游戏类型。

变现手段

小游戏支持流量广告变现及游戏内道具内购两种收入方式

内容分发

小游戏由于无需下载、玩法简单等属性,与图文、视频等场景有着天然的搭配性。字节跳动全产品矩阵以内容分发为核心,能够通过内容带动小游戏分发,由内容为小游戏带量以及裂变。

方便快捷

相较于 APP,小游戏开发周期短,开发成本低等特性让更多的开发者能够轻松、快速的参与到开发过程中,实现快速上线,快速变现。

小游戏接入指南

注册账号

开发者平台中点击右上角的【快捷登录】进行帐号注册。

注册帐号成功后,系统会自动提示进行小游戏申请。点击自动弹出的【申请】按钮,即可进入小游戏申请页面。(若此次未申请,之后可通过页面中的【进入开发者平台】进入)

在该页面的【选择类型】条目下选择【小游戏】类型,后续内容根据具体情况各自补充。

切记:注册后该账号就是后续提交小游戏的账号,手机号等信息请如实填写

需注意:

  1. 在必填信息中,头条号名称可随意写,不影响游戏通过

  2. 在选填信息中, 小游戏体验路径必填 。无法体验的游戏一律驳回。

小游戏 申请成功发出后,字节小游戏将在两个工作日内通过您留下的邮件地址给予您答复。若您收到邀请邮件,说明您的产品已经通过,可以在后台进行接入。

创建小游戏

再次进入开发者平台,登录您的对应帐号后点击图片中间的【进入开发者平台】,点击【创建一个小程序】

在新页面中创建小游戏,并填入小游戏对应的基础信息。分类请如实填写,将影响小游戏的推荐精准度。

请如实上传相关信息,如果您是个人开发者想以个人的名义来开发小游戏,可以选择个人;

特别提醒,对于企业开发者,请务必选择企业开发者,否则将产生结算困难等问题。

对于个人开发者:上线游戏必须提交姓名、身份证号、身份证照片

对于企业开发者:上线小游戏必须提交姓名、身份证号、身份证照片、企业名、统一社会信用代码、企业执照照片

填写完成后,系统会自动发验证码至申请该帐号的手机号上,输入后来到管理后台。

点击管理后台的对应小游戏,可以对该小游戏进行数据监控、版本发布等行为。

添加协作者/管理员


进入协作栏,点击添加按钮即可添加管理员/协作者,点击添加之后会出现邀请页面,没有注册过的用户可通过邮箱邀请,通过以下权限管理选择给其添加的权限,点击完成则添加成功,受邀者邮箱会收到信息,从邮箱点击进行操作即可。

获取Appid、AppSecret

  • 进入对应的小游戏【开发】栏——选择开发即可获得游戏Appid及AppSecret

审核流程

点击发布,来到小游戏【发布】页面。在该页面中点击【更新】,系统将提示开发者使用 IDE 工具上传游戏包。

目前字节小游戏支持主流引擎,如,白鹭、Laya、Cocos ,只需要现将工程文件打包成 小游戏包的目录结构要求与主流平台保持一致,目录下要有project.config.json , game.json

重点: 在上传游戏后系统将提示上传三张图,三张图必须包含一张游戏标题,一张游戏内主要游戏画面

示例:

若游戏内没有含有游戏标题的页面,亦可使用加载页面、海报图等含有游戏标题的页面,样式如下:

具体接入文档参照字节跳动小游戏技术接入文档:https://developer.toutiao.com/docs/framework/

审核要求见小游戏注意事项中的开发者自审标准

上传游戏包成功后即可开始调试,调试流程见 "真机测试"。 调试完成后,开发者点击 提审 ,即进入审核流程。

特别提醒:小游戏在提审前会有自测环节,为了保证通过率,请开发者提审前通过自测环节进行自查。

在审核过程中,开发者请遵循后台中的提示进行操作补全对应信息。

审核通过后,发布按钮亮起,开发者点击发布,小游戏即进入线上版本。

重点:小游戏首次上线前的审核都需进行 qa 回归,预计在 1-2 个工作日

当小游戏提审后,务必于后台配置"安全域名",不然将影响游戏上线。安全域名必须为https://及wss://,非加密传输的请修改伺服器域名。

  1. request合法域名
  2. socket合法域名
  3. uploadFile合法域名
  4. downloadFile合法域名

设置搜索关键词与分享

当发布未配置搜索关键词与分享内容版本时,会弹出提示与跳转地址,点击【前往配置】。

如果已有搜索关键词和分享内容,想要查看或进行修改,可以在小程序详情页中的【设置】进行相应的配置。 配置搜索关键词:提交的搜索关键词应符合 小游戏关键词搜索

通过审核并且配置过搜索关键词与分享内容的版本,在【审核版本】中点击发布即可将小游戏发布至线上。

可以在小程序列表中看到相应小游戏线上的版本号。

内容转发

小程序/小游戏支持转发图文、游戏视频和分享口令等不同形式的内容。

获取分享素材 ID

开发者可以提前通过开发者后台配置分享图片、标题、文案,并由平台进行审核。审核通过的素材会生成对应的 templateId,给到开发者调用。

提示

审核通过的分享内容,在线上的转发行为依然会受平台监管,请开发者遵守运营规范相关要求。

获取路径:开发者平台 -> 选择对应小程序 -> 设置 -> 分享设置 -> 添加新分享 -> 获取分享 IDimage.png

分享内容定义

分享内容 字段 名称 使用建议 内容定义 最低版本
分享标题 title 自定义分享标题 不超过 14 个中文字符 一句话介绍小游戏
分享图片 imageUrl 自定义分享图片 图片规格:适应各场景 突出小游戏特点的图片,能够配合文案
分享文案 desc 自定义分享文案 不超过 28 个中文字符 结合游戏特征、分享场景,以玩家口吻邀请好友加入游戏 1.30.0.1

各宿主建议长度

字段 头条 抖音
title 14 个汉字以内 8 个汉字以内
desc 28 个汉字以内 14 个汉字以内

分享内容指定方式

平台支持不同形式来指定转发的内容(图片、标题、文案),最终按照优先级规则进行选择

  1. 代码指定分享内容(title、desc、imageUrl)
  2. 代码指定审核通过的模板素材 templateId

分享内容优先级

场景 优先级
端内分享 代码指定 > 模板指定 > 平台默认
端外分享 模板指定 > 平台默认

使用场景介绍

今日头条
入口 场景 图示
端内-【转发到头条】 点击【转发到头条】后,触发微头条发布器,生成小游戏链接 1.png
端外-【分享其它平台】 选择平台后,跳转选择对话框,发送气泡式链接 2.png
端内-【发头条图文】 选择发图文后,跳转图文发布器 3.png
端外-【口令分享】 开发者在游戏内调用口令分享功能,点击对应按钮后即生成口令 4.png
端内-【录屏分享】 玩家在游戏中录屏后,跳转至小视频发布器 5.png
抖音
入口 场景 图示
端内-【私信好友】 选择端内联系人,发送小游戏链接 呈现页(中间页)
6.png
呈现页(对话框) 7.png
端外-【图片二维码】➡️ 使用图片口令 选择端外平台,生成分享图片,选择“保存并分享”后跳转 分享页
8.png
回流页 9.png
端内-视频详情页-小游戏组件 玩家发送的游戏录屏或相关视频详情页中 呈现页(视频详情)
10.png
端内-视频详情页-小游戏大卡 玩家发送的游戏录屏或相关视频详情页中 呈现页(弹出大卡) 11.png
端内-评论区 显示在视频详情页的评论区顶部 呈现页(评论区) 12.png

游戏内接入转发能力

通过 tt.shareAppMessage 转发图文、视频和口令等不同形式的内容,具体用法参考 API 文档

使用审核通过的分享素材,指定 templateID

代码示例

// 以默认链接分享方式为例
tt.shareAppMessage({
  templateId: "1fidnqkeari9dnd18o", // 替换成通过审核的分享ID
  query: "",
  success() {
    console.log("分享成功");
  },
  fail(e) {
    console.log("分享失败");
  },
});
代码指定分享内容

代码示例
注:代码指定分享内容也可以同时指定素材 templateID, 平台会按照优先级规则选定分享内容

// 以默认链接分享方式为例
tt.shareAppMessage({
  templateId: "1fidnqkeari9dnd18o", // 替换成通过审核的分享ID
  query: "",
  title: "画家活下去",
  desc: "在这里爱上画画",
  imageUrl: "",
  success() {
    console.log("分享成功");
  },
  fail(e) {
    console.log("分享失败");
  },
});

链接分享

// 以默认链接分享形式为例
tt.shareAppMessage({
  templateId: "1fidnqkeari9dnd18o", // 替换成通过审核的分享ID
  query: "",
  title: "画家活下去",
  desc: "在这里爱上画画",
  imageUrl: "",
  success() {
    console.log("分享成功");
  },
  fail(e) {
    console.log("分享失败");
  },
});

图文分享

⚠️ 抖音不支持图文分享

// 以图文分享为例
tt.shareAppMessage({
  channel: "article",
  templateId: "1fidnqkeari9dnd18o", // 替换成通过审核的分享ID
  query: "",
  title: "画家活下去",
  desc: "在这里爱上画画",
  imageUrl: "",
  success() {
    console.log("分享成功");
  },
  fail(e) {
    console.log("分享失败");
  },
});

游戏录屏分享

代码示例

// 视频分享
tt.shareAppMessage({
  channel: "video",
  query: "",
  templateId: "1fidnqkeari9dnd18o", // 替换成通过审核的分享ID
  title: "画家活下去",
  desc: "在这里爱上画画",
  extra: {
    videoPath: "ttfile://temp/test.mp4", // 可用录屏得到的本地文件路径
    videoTopics: ["画家活下去"],
  },
  success() {
    console.log("分享视频成功");
  },
  fail(e) {
    console.log("分享视频失败");
  },
});

口令分享

代码示例

tt.shareAppMessage({
  channel: "token", // 口令分享
  templateId: "1fidnqkeari9dnd18o", // 替换成通过审核的分享ID
  title: "画家活下去",
  desc: "在这里爱上画画",
  query: "",
  success() {
    console.log("分享成功");
  },
  fail(e) {
    console.log("分享失败");
  },
});

真机调试

请直接使用小游戏开发者工具 开发者工具下载

有问题请在论坛中查询及反馈:字节跳动开放社区

调试流程

当小游戏更新完成后,将会生成对应的二维码;

  1. 手机重新安装今日头条线上最新版,kill 掉进程重启,打开 App 左右滑动 tab 页,正常浏览 app 几秒。

  2. 使用安装测试 App 的手机扫码(测试某个应用,则使用对应的应用扫码),扫码后 Android 下使用 Chrome、iOS 使用 Safair 打开对应网址,点击打开小程序即可唤起,请务必使用 Chorme 和 Safair ,不然不能正常唤起;

  3. 如果打不开游戏,请 kill 掉进程,重启 app 再试一次

  4. 如果显示 App 版本不支持建议确认 App 版本,手机内是否有多个头条 App。建议全部卸载后重新安装

  5. 如果提示系统版本不支持,检查手机 app 版本,安卓大于等于 5.0,iOS 高于 9.0;

  • 如需要进一步定位问题,可以使用 ADB 方式,教程如下:

a. 需要安装单独的 CP 分支的头条 App 同上方法;

b. 确保游戏加载完成,出现 "开始游戏" 按钮,先不要点击该按钮

a. 安装 Android 调试桥(adb)

b. 打开调试机的开发者模式

c. 使用 adb 命令建立端口映射

adb forward tcp:9229 tcp:9229

d. 在 Chrome 中打开调试页面 chrome://inspect

e. 选中 "Discover network targets" 选框

f. 点击 "Configure..." 按钮,在弹出的"Target discovery settings" 对话框中添加 "localhost:9229"

g. 点击 "Done",返回调试页面,会出现

h. 点击 "inspect" 链接即可打开调试界面,此时只运行了启动引导代码还未加载游戏代码

i. 选中 "Pause on exceptions" 按钮,确保能捕获异常

j. 点击设备上的 "开始游戏" 开始运行游戏并调试

登录&获取用户信息

  1. 如果需要获取用户信息(getUserinfo 文档:获取已登录用户的相关信息),调用之前那请务必使用login(文档:获取临时登录凭证);

  2. 由于头条用户存在未登录情况,所以使用 login 及 getUserinfo,需要兼容未登录用户的情况,避免出现未登录用户反复弹出登录框,不能进入小游戏的情况;

  3. 以及请依据你的小游戏设计需要来合理选择是否调用获取 getUserinfo ;

必接功能

内容安全检测(若游戏无用户可输入内容可不接)

游戏内录屏功能(可参考录屏分享参考规范)

游客登录功能(开场调用登录行为时,force 传 false 将不会调起登录框)

不接入上述功能,将在审核时被打回

后续小游戏接入

已经有小游戏通过审核的开发者,后续小游戏的接入直接在后台创建并上传即可。当一个账号的创建名额满后,申请新帐号需重走后台申请流程。

小游戏注意事项

小游戏流量入口

名词解释

  1. 隶属功能入口:所填写的功能在哪个入口能看到?例如:搜索入口、feed 流、小程序中心等;
  2. 功能说明介绍:所填写的功能的端上截图+功能描述。截图可以多张,体现出操作步骤;功能描述中需要包括:
    • 功能以用户的角度如何操作找到;
    • 从头条 app 哪个版本开始支持此功能;
  3. 功能获取方式:所填写的功能开发者如何获取,例如:需要配置 or 需要申请 or 自动生效。
    • 需要配置:需要说明配置需要填写哪些内容,并且需要说明配置时候是否有前置条件,例如:
      • 无需前置条件
      • 需要前置条件:小程序需要发布上线;XXXX 功能需先开通;
    • 需要申请:需要说明申请时填写的信息,例如:feed 需要提供:内容形式、每日可上传量等
    • 自动生效:无需配置申请,小程序上线后直接生效
  4. 文档链接说明:所填写的功能或者功能涉及的接口的文档链接地址。

1.自然搜索结果

隶属功能入口:

搜索入口

功能说明介绍:

截图:

说明:
小程序通过审核,并发布上线后,可以在自然搜索结果中获得展示。 当小程序名称或配置的搜索标签词被用户检索到,会根据算法匹配,在搜索结果里展示相应的小程序用户可以点击该条搜索结果,直接打开小程序。

功能获取方式:

小程序名称搜索结果自动获取。

搜索标签词需要进行配置,配置地址:点击配置;配置内容:标签词文字。

需要前置条件:小程序需发布上线。

文档链接说明:

点击查看搜索标签词配置规范及说明

2.我的小程序

隶属功能入口:

我的-小程序

功能说明介绍:

截图:

说明:
小程序通过审核,并发布上线后,可以在我的小程序搜索结果中获得展示。
当小程序名称及近似名称被用户检索到,会根据算法匹配,在搜索结果里展示相应的小程序。
小程序通过审核,并发布上线后,将有运营进行多维度的筛选,通过筛选的游戏将获得首屏 banner大家都在用编辑精选新品速递数个展示位。
小程序通过审核,并发布上线后,将通过算法对游戏进行排序,在猜你喜欢展示算法对游戏的排序结果。

功能获取方式:

小程序名称搜索结果自动获取。
需要前置条件:小程序需发布上线。

文档链接说明:

3.小游戏盒子

隶属功能入口:

头条小游戏

功能说明介绍:

截图:

说明:
小程序通过审核,并发布上线后,将有运营进行多维度的筛选,通过筛选的游戏将在编辑精选展示。
小程序通过审核,并发布上线后,将通过算法对游戏进行排序,排序的游戏将在更多游戏中展现。

功能获取方式:

数据推荐
需要前置条件:小程序需发布上线。

文档链接说明:

4.搜索面板的小程序

隶属功能入口:

搜索面板-头条小程序

功能说明介绍:

截图:

说明:
小程序通过审核,并发布上线后,将根据用户的使用顺序,由近及远的于竖杠前排序。 小程序通过审核,并发布上线后,将通过算法对游戏进行排序,排序的游戏将在竖杠后展现。

功能获取方式:

运营配置
需要前置条件:小程序需发布上线

文档链接说明:

5.feed 流推荐卡片位置

隶属功能入口:

头条 feed 流

功能说明介绍:

截图:

说明:
小程序通过审核,并发布上线后,将通过算法对游戏进行排序,此处展示算法对游戏的排序结果。

功能获取方式:

算法筛选
需要前置条件:小程序需发布上线,于开发者后台-流量-推广卡片中上传图片并审核通过

文档链接说明:

6.小视频秒玩入口

隶属功能入口:

小视频页面 秒玩、秒玩面板

功能说明介绍:

截图:

说明:
小程序通过审核,并发布上线后。用户通过游戏中的录屏功能或直接通过游戏的分享功能分享视频,可以在视频中带上左侧的分享面板及右侧的秒玩按钮。

功能获取方式:

游戏需要接入录屏功能,需要从游戏中发布视频
需要前置条件:小程序需发布上线

文档链接说明:

7.话题秒玩入口

隶属功能入口:

小视频话题页

功能说明介绍:

截图:

说明:
小程序通过审核,并发布上线后,会自动创建对应话题,该话题会自动带上秒玩入口。

功能获取方式:

需要前置条件:小程序需发布上线

文档链接说明:

8.文章详情页入口

隶属功能入口:

头条号

功能说明介绍:

截图:

说明:
小程序通过审核,并发布上线后,相关官号或合作 kol 可自行再文章中插入小程序卡片,卡片共分为两种样式,一是普通样式,二是图文样式。

功能获取方式:

文章中插入小程序卡片有以下两种获取方式:

  1. 插入小程序首先需要绑定小程序,后可自行在发布文章时进行插入:
  • 创作者可通过头条号后台「今日头条-功能实验室-小程序」进入小程序管理页;
  • 点击右上角「新增绑定」,输入正确的头条小程序 ID 后,点击「确定绑定」;
  • 经小程序开发者和平台审核通过后,绑定成功。 绑定成功后,创作者可在头条号后台「图文-发表文章」页面,点击编辑器菜单栏的「插入小程序」,选择已绑定的小程序插入;点击「高级设置」,即可修改小程序的介绍文案、设置落地地址。
  1. 通过机器自动插入:将头条号 mid、小程序 appid 发送至邮件组bytedance_microapp@bytedance.com,说明许可将该头条号发布的所有文章都自动在文末加上小程序卡片,经审核后配置。
文档链接说明:

https://www.toutiao.com/i6692697263837282823/

9.个人主页入口

头条号

隶属功能入口:
功能说明介绍:

截图:

功能获取方式:
  1. 需要先进行绑定,操作路径与文章相同:
  • 创作者可通过头条号后台「今日头条-功能实验室-小程序」进入小程序管理页;
  • 点击右上角「新增绑定」,输入正确的头条小程序 ID 后,点击「确定绑定」;
  • 经小程序开发者和平台审核通过后,绑定成功。
  1. 绑定成功后,创作者可在头条号后台「个人中心 - 帐号设置 - 自定义菜单」页面,选择「选择小程序」,并设置落地地址。
文档链接说明:

https://www.toutiao.com/i6692697263837282823/

10.微头条入口

隶属功能入口:

微头条

使用范围:

小游戏&小程序通用

功能说明介绍:

截图:

说明:
微头条有以上两种样式:一是直接分享微头条卡片,二是通过小程序内的「发头条」入口发布,点击可进入

功能获取方式:

该入口为自然入口,在小程序发布上线后即可使用,点击右上方按钮,选择分享/发头条,即可编辑内容并发布。

文档链接说明:

开发者自审标准

标准
P0(只要出现,直接拒绝);P1(2 个以上拒绝);P2(期望有)

测试机型
iPhone7p;OPPO R9P;努比亚 Z17; 华为 Nova2S;iPhoneXS; iPhoneX;小米MIX2; 华为 Nova3; 魅族 16th; 华为 P10;
iPhoneXR; 小米 9; 小米 6x; 小米MIX2s;魅族 pro6s; 华为p20; iPhone6; 华为 mate10;小米8se;iphone8;华为mate20; 华为p30; iphone7

测试项目 case 期望结果 优先级 备注
登录 未登录情况下进入游戏,弹出登录框,选择登录 登录后能正常进入游戏 P0
未登录情况下进入游戏,弹出登录框,选择不登录 能正常进入游戏 P0
未登录情况下进入游戏 在进入游戏主页面用户操作游戏功能之前不允许自动弹出登录框 P0
若游戏有必须登录才可使用的功能 首次点击该功能拉起登录后,若取消,下次点击需提示必须登录 P1
权限弹框 弹出拿取用户名和头像的弹框,选择允许 正常拿到头像和名字进入游戏,游戏中头像和名字显示正常 P0
弹出拿取用户名和头像的弹框,选择不允许 拿不到头像和名字,以神秘用户或者默认的用户进入游戏 P0
多次弹出授权 不能在同一个页面连续多次弹出授权 P0
背景音乐音效 游戏中观察背景音乐是否会循环播放 背景音乐会循环播放 P1
游戏中观察背景音乐和音效 背景音乐和音效正常,不会有卡顿或时大时小的情况 P1
分享 点击框架自带的右上角的分享 弹出分享面板,可分享到各个渠道 P0
检查游戏中所有分享按钮的实现方式和分享结果 游戏内的分享也应该与右上角的实现方式一致,分享时显示后台配置的图片与文案 P0 如果游戏还未上线分享至微头条会被隐藏,所以真机测试时只要能正常吊起转发页面即可
分享流程可跳过 不允许出现需要分享才能继续游戏的逻辑 P0 如果游戏还未上线分享至微头条会被隐藏,所以真机测试时只要能正常吊起转发页面即可
分享失败 toast 显示对勾 分享失败显示正确的错误 ui P0
游戏内若录屏,录屏结束但游戏未进入间断场景 不能直接弹出分享面板打断游戏进程 P0
渲染 游戏中,游戏切换前后台 回到游戏页面时页面渲染正常,不会出现黑屏白屏等 P0
游戏中,持续游戏 10 分钟以上 不会出现黑屏白屏等现象,也不会出现闪退 crash P0
游戏平台白色页面消失后不会出现黑屏 不能出现黑屏 P0
页面检查 针对 Android/iOS 刘海屏,检查所有界面的左/右上角 不该有任何元素跑到刘海屏中去 P1
检查所有界面,UI 界面不能和框架功能按钮重合 UI 界面不能和框架功能按钮重合 P0
用户名不能长于其预设框 若用户名长于其预设框,应选择截断而非溢出 P0
游戏内出现该游戏名 该游戏名不能进行精简 P1
排行榜中出现头像不全 不允许有空头像 P0
录屏 游戏中可以正常开始和结束录屏 如果有不能录屏的对战局数,需要告诉用户为什么本局没有录屏或将录屏分享的入口隐藏 P0 单局游戏,每局游戏后有分享按钮,不管时间长短;如果是设计直接到某个时长强制停止的录屏,最少要 15s
游戏结束后点击分享 拉起头条发布器,并将视频导入发布器编辑功能 P0 单局游戏,每局游戏后有分享按钮,不管时间长短;如果是设计直接到某个时长强制停止的录屏,最少要 15s
录屏时间少于 3 秒需要有提示 录屏少于 3 秒时,点分享不能没反应,需要有弹框提示录屏时间过短 P0
对于游戏有分享视频得奖励的,或者分享得奖励的 分享出去后必须能拿到奖励 P0
游戏录屏按钮路径不可过深 需要在游戏主要界面中存在或有强引导 P1
是否自动录屏 期望游戏自动录屏 P2
自动录屏结果能否直接弹出 可直接弹出,但不可影响游戏正常进程 P0
录屏发布入口明确 每局结算(录屏结束)需要有发布录屏入口 P2
单一录屏可用次数 单一录屏仅可获得一次奖励,用户分享录屏后,分为两种情况 1.结算界面分享录屏后,分享录屏按钮消失/变灰(即不可点)2.游戏过程中分享后,分享按钮需变为录制 3.若分享行为本身不获得任何收益,则不强求开发者只能让用户分享一次 P0
录屏分享时出现的场景 必须直接使用游戏内的录屏,不能调起用户的摄像头 P0
敏感词过滤 如果游戏有起名字或聊天的功能,需要进行敏感词测试 使用 API 接口校验的形式确认是否接入敏感词 P0
开发者模式 游戏页面不应该出现日志,调试之类的 P1
版权 游戏简介不能蹭线上其他游戏的 P0
广告 banner 广告不能在游戏中的页面(如,具体某一关页面),可以设置在结算页、开始页 P0
横屏游戏(横屏游戏 banner 广告图特殊处理) 横屏游戏 banner 广告图可以不居中显示,未遮挡功能键就可以 P1
banner 广告不能对游戏内容有遮挡包含不限于操作按钮,游戏操作热区 P1
广告播放完毕时,点击关闭广告,可正常获得激励,需要提示用户获得奖励 P0 广告未播放完毕,不能获得奖励
需要做好对没有 banner 广告或者视频激励广告的处理(如,视频激励广告次数用尽) 一个没有广告的账户进入点击看广告会提示今日没有广告,不能直接没有响应 P0 广告未播放完毕,不能获得奖励
广告不能自动弹出 需要用户点击才能弹出视频广告 P0
广告可跳过 不应存在需要点击广告才能继续游戏的场景 P0
广告不能诱导点击 不看广告的选项按钮颜色不能很浅或尺寸很小;看视频广告的按钮必须有相关点击提示 P1
如果存在类似签到等用户本身就付出了成本的行为 必须有可以不看广告领取的按钮,可以存在看广告领取双倍 P0
看广告、分享内容等行为获得多倍奖励 实际奖励与奖励文案不允许有偏差 P0
游戏逻辑 从点击游戏内的任意模块进去,点退出 需能够回到上级模块 P0
交互 视觉上可交互按钮点击无反应 若按钮不可点击,需从视觉上去除 P0
结算页面有继续按钮 若游戏有主界面,需要有能够回到主界面的按钮 P1
通过广告、图文分享获得奖励 一个位置在一局内只能获得一次奖励,不可允许用户重复点击 P1
点击按钮后唤起下载 小游戏不允许唤起任何下载 P0
游戏中有可输入内容的板块 若输入敏感词可通过则拒绝 P0
游戏功能完成 声明的功能模块必须要实现、无 bug、符合预期 如分享复活、分享领取金币要能正常复活、领取金币,按钮点击要有效果 P0
文案 游戏中出现功能相关介绍 文案介绍需与实际效果一致 P0
游戏中出现的任何文案 尽量不要有错别字 P2
游戏内出现的任何文案 不能带有qq,微信等非头条的功能。在某一宿主内文案只允许出现该宿主的相关功能。 P2
支付功能 安装支付宝客户端 选择支付宝支付 "能调起支付宝客户端,点击取消,返回提示支付失败"
没有安装支付宝客户端 选择支付宝支付 "能打开支付宝 H5 页面,点击取消,返回提示支付失败"
安装微信客户端 选择微信支付 "能调起微信客户端,点击取消,返回提示支付失败"
没有安装微信客户端 选择微信支付 "能打开微信 H5 页面,点击取消,返回提示支付失败"

字节跳动广告展现规范

违规展示
  1. 游戏进程界面摆放 banner 广告

错误示例:

诱导点击
  1. icon(文案)和 banner 广告位置部分操作区域重合,导致用户误触

违规示范:

正确示例:

  1. 不告知用户看视频领取奖励/没有视频播放图标

违规示例:

正确示例:

  1. 惯性点击

错误示例:图一升级按钮用户会频繁且高度点击,在金币不足,会弹免费金币弹框见图二,但是该页面下 banner 广告位上移,导致用户惯性点击触发 banner 广告

  1. 字体过于小

错误示例:

视频广告

违规展示
  1. 强制广告展示,影响游戏体验

错误示例:观看试玩,不看广告无法进行游戏

  1. 看视频可隐藏 banner 广告

  2. 未经过用户允许直接触发广告

错误示例:当用户砸金蛋到力度条满时,直接拉取视频广告

诱导点击
  1. 虚假红包,看视频可以获得相应金额,但无法提现

  2. icon/文字和视频广告触发按钮重叠

广告图设计与优化规范

字节小游戏新游上线后,平台会给予保底的冷启动曝光量,帮助产品验证数据。

为了使小游戏能更好地被推荐与曝光,请及时在开发者后台配置小游戏信息流广告图、小游戏搜索结果图,配置途径为:点击【流量】-【新增入口】-【推广卡片(竖版)】/【搜索页面】进行配置。

为了帮助开发者更好地理解字节小游戏平台资源情况,与有效地进行调优,我们整理相关优化规范如下:

【推广卡片(竖版)】-冷启动强相关

  • 该资源位与新游冷启动强相关,当小游戏满足“已上线”+“已配置推广卡片(竖版)”两个条件,算法会自动给予保底3万+的冷启动曝光流量(头条端)。
  • 当产品基础数据与转化率等数据表现优秀,小游戏会被算法持续滚动推荐至更大的流量池里。

图片尺寸规范
  1. 图片尺寸:494*670px(分辨率建议150px以上)
  2. 图片大小:不超过120k
  3. 图片规范:
    • 顶部50px与底部100px不放置主要内容;
    • 字体字号大小不低于14号;
    • 若有按钮内容,素材与大小需清晰可见;
    • 广告图应有设计感,不可品质过差(详见下例)。
图片审核与优化建议

有如下情况,广告图会存在移动端显示不清,或转化率较低的情况,可能会被审核打回。为了提高资源转化率,图片设计请注意以下事项:

(设计原则:注意移动端小屏幕手机的兼容)
优秀案例:

【加载图】

该图片应用于小游戏包加载过程中,可以有效降低小游戏取消率。


图片尺寸规范
  1. 图片尺寸:竖版-6401385px、横版-1385640px(分辨率建议150px以上)
  2. 图片大小:不超过120k
  3. 图片审核规范:同上
    • 文字/图片请勿标注“进度”状态;
    • 文字/图片请勿出现游戏货币/等级/经济 等数据内容信息,避免玩家造成误解。

【搜索页面】

图片尺寸规范
  1. 图片尺寸:345*150px(分辨率建议150px以上)
  2. 图片大小:不超过80k
  3. 图片审核规范:同上

【信息流入口】

该资源是将小游戏内容以文章、资讯等形式,在信息流中向阅读者进行曝光,严禁广告向、夸张宣传等性质内容。


  1. 图片审核规范:同上
  2. 配置路径:点击【流量】-【新增入口】-【信息流入口】
  3. 建议开发者每款游戏,每周以5-20条内容条数新增的频次,进行更新,保持高质曝光。
  4. 文案与图片优化规范:https://forum.microapp.bytedance.com/topic/1509

合同签署与收入结算

合同签署

合同形式
  1. 字节小游戏平台合同签署为依据具体合作形式签订,合同均为统一模板,条款固定无法修改。
    • 广告合同:(请联系商务同学进行获取)
    • 内购合同:(请联系商务同学进行获取)
    • 个人开发者合同:(请联系商务同学进行获取)
  2. 注意事项:
    • 合同时间会覆盖到小游戏的上线时间,不受合同签署时间影响。
    • 企业主体首次签合同无需填写附件,后续新增游戏只需填写附件内容作为补充协议,请勿重复签署主体合同。
发送合同邮件与纸质合同盖章
  1. 开发者根据合作形式,下载以上小游戏合作合同进行填写与寄送,字节小游戏平台收到纸质合同后将进行盖章,并将合同寄返至合同所填通讯地址中。
  2. 注意事项:
    • 附件为补充协议模板,首次签署合同不需填写;
    • 合作期限为小游戏上线后的一年;
    • 若接入多款游戏,需填写每款游戏的名称;
    • 首发游戏请额外再发邮件申请:首发游戏在游戏上线前一周申请即可,请邮件提交头条版本测试二维码,并按照合同模板要求,提交相关产品材料,如因游戏开发进度暂时未能提供,可后续重新再提交申请。
    • 开发者完成合作协议签署后,该主体小游戏方可进行结算申请;若合同流程未启动或仍在流程中,需等待合同流程结束后,才可进行结算申请操作。

下载结算单

开发者如有相关游戏需要申请结算,可在开发者后台自助下载小游戏结算单,确认结算金额无误后,进行发票开具与寄送即可。

  1. 结算单下载路径:
    • 广告:【流量主】-【数据总览】-下载结算单
    • 内购:【支付】-【支付数据】-【支付总览】-下载结算单
  2. 注意事项:游戏分成与首发免渠道费确认:均以合同为依据。

发票开具与寄送

请开发者确认结算单开票金额后,进行打印与盖章,并根据结算金额开具“增值税专用发票”,寄送给平台进行后续打款操作。

纸质发票与结算单盖章打印件,请寄送至以下地址:
北京市海淀区北三环西路43号中航广场1号楼今日头条小邮局
收件人:字节小游戏 联系电话:15210282916 邮编:100190

注意事项:

  • 结算金额以合同约定公式计算为准,结算单纸质盖章打印件1份即可;
  • 发票开据以合同签约主体信息为准,目前流程仅支持“增值税专用发票”,开票内容可为服务费;
  • 开发者企业主体等信息,需要与合同一致;
  • 个人开发者无需开具发票,平台已代为扣除预缴个税;个人开发者需打印纸质结算单,签字盖印并寄送。
  • 发票快递寄送请勿使用到付形式。

平台打款

  1. 在收到开发者开具的结算发票后,平台将于每月下旬25日,定期统一提交结算打款申请:
    • 每月25日前寄达的发票,预计在之后的五个工作日内,完成打款申请。
    • 发票寄送逾期的,则延顺至下个双周的结算节点,提交打款申请。
  2. 注意事项
    当周放行的款项当周都会完成处理,具体到账时间取决于银行系统交换时间。

首发游戏申请指引

如小游戏符合以下两点条件,即可申请字节小游戏平台首发,经平台方评测后,将有机会被确定为平台的“首发游戏”。首发期限自合作游戏在平台上线之日起半年止,免除渠道费,并额外获得部分比例分成比。

申请条件

首发小游戏需满足以下条件:
  1. 玩法、美术等方面有亮点;
  2. 未在任何小游戏平台上线(小游戏平台包括:微信小游戏平台、QQ轻游戏平台(玩一玩、玩吧等)、百度小游戏平台、快手电丸、快手小游戏平台、OPPO小游戏平台、vivo小游戏平台、华为小游戏平台等),开发者向平台方申请且经平台方评测后确定为平台的“首发游戏”。
补充说明
  1. 首发期限内,不影响首发游戏在其他非字节系平台上线。
  2. 首发游戏所产生的可分配广告收益,双方按照合同分成比例结算。
  3. 首发游戏在游戏上线前一周申请即可,不接受上线后申请。

申请流程

首发申请请提交头条版本测试二维码,并按照合同要求,提交相关产品材料,如因游戏开发进度暂时未能提供,可后续重新再提交申请。

1.开发者需发送产品详细计划和申请内容至首发游戏指定邮箱

  1. “产品详细计划”为邮件附件,建议是word或PPT文档。需包含:公司介绍、产品介绍等。建议附上游戏视频。
  2. “申请内容”为邮件正文,按下述表格填写:《字节小游戏-首发申请》
邮件标题

格式:【游戏名】申请字节小游戏首发游戏。如:【连连看】申请字节小游戏首发游戏。

评估

字节小游戏运营团队将根据产品品质、产品玩法等维度进行综合评估,一周内确认是否为首发游戏。

不接受无邮件申请的临时需求
请附上联系方式

申请邮件发送至收件人:mgame@bytedance.com,抄送liangzhiqi@bytedance.comqiusimin@bytedance.comzhouyuxiang@bytedance.comliuxiaoren@bytedance.comwangchuwen@bytedance.comzhangyulong.1812@bytedance.com

排行榜运营活动

该功能预期帮助游戏提升:新增、留存、在线时长、arpu、录屏分享等数据项。

功能概述

  1. 开发者通过平台提供的各端(头条/抖音等)排行榜,进行游戏内成绩排列
  2. 依据排行榜成绩,给用户提供一些游戏内奖励如:荣誉称号/限定皮肤/专属相框/游戏货币等

适用游戏类型

  1. 单机玩法,每局有分数统计,如《别碰红点》
  2. io类游戏,如《贪吃蛇大作战》
  3. 跑酷类游戏,如《汤姆猫跑酷》

实验案例及收益——《别碰红点》

  1. 活动时间:活动时间1-3天
  2. 榜单逻辑:可以设置成3天总榜;或每天单榜
  3. 活动奖励:活动期间/活动期间每天全服前xx名,会有活动奖励。x名-xx名是什么奖励,以此类推
  4. 排行逻辑:每天活动结束前/活动周期结束前,排行榜实时更新,玩家可通过反复参与游戏而获得更高分数,从而获得更高奖励
  5. 参与规则:可保留游戏普通模式前提下,设置单独的运营副本-冲榜模式,玩家初次进入游戏会有3点体力用于冲榜,每局比赛可看一次视频复活一次;每局结束后分享一次视频可以获得3点体力,玩家在单天的活动时间内可无限次分享视频,获得体力刷新比赛成绩。(可依据游戏实际情况自行设定,也可将游戏日常模式直接改为运营活动模式)
  6. 活动引导:每局结束后需要提示玩家,当前分数,排名(只提示1000名内,未进榜单的用户,提示他继续加油,冲进榜单领取奖励;分数在1000名内的用户,告知排名及可获得奖励,并激励再次游戏获得更好成绩)
  7. 涉及页面:入口(首页);排行榜;活动规则;结算页等
  8. 发奖操作:日榜:每天23:00之后,锁榜,按照排行榜玩家名单发放奖励,也可以等活动周期结束统一发放;总榜:活动周期结束后,按照排行榜玩家名单发放奖励
    *以上所有数值/时间,均可自行定义
  9. 实验数据效果:提升明显 (活动期间及日常数据变化:基于历史数据及活动期间数据对比)

该功能对开发者的要求

  1. 活动ui设计需醒目,提高活动参与率
  2. 需提前做好活动副本数据打点,收集活动数据,总结活动效果
  3. 奖励提前告知用户,并按时发放
  4. 游戏内录屏及录屏发布的逻辑需要调优可参考: https://shimo.im/docs/SanvLs6jCogeySBH

活动申请流程及要求

  1. 活动形式及接口为全开放形式,所有cp可以根据自家游戏本身玩法及特性设计活动形式,不局限于本文档
  2. 接入活动后的产品可联系平台小游戏运营同学,业务侧会根据产品数据判断是否给与额外资源支持

平台提供接口

申请排行榜key

Notice:

  • 活动排行榜key在活动日期过后失效, 除非重新配置活动时间等信息
  • 设置排行榜更新周期:如果要求每天重新计排行榜,则选“每天”;以此类推

set rank

使用开放数据域接口tt.setUserCloudStorage,其中key为排行榜key,value形如{'ttgame': {'score': 1}} 调用接口示例如下:

const data = {
  "ttgame": {
    "score": 16,
    "update_time": 1513080573
  },
  "cost_ms": 36500
};
tt.setUserCloudStorage({
  KVDataList: [
    { key: 'testRank', value: JSON.stringify(data)}
  ]
})
get rank

使用开放数据域接口tt.getCloudStorageByRelation,其中,type字段填写"group",key为排行榜key 调用接口示例如下:

tt.getCloudStorageByRelation({
    type: 'group',
    keyList: ['testRank'],
    extra: {
        sortKey: 'testRank'
    },
    success(res){},
    fail(e){}
})

接口返回数据示例:

{
    data: [
        // 每一项对应一个用户存储的数据
        { avatarUrl: '', nickname: '', openid: '', KVDataList: [{ key: 'test1', value: '' }...], money: 0},
        ...
    ]
}
获取个人金额

同3接口,遍历,isMe字段等于true为本人

视频激励-录屏分享参考规范

背景

【视频录制及分享】是字节跳动系平台独有的也是最核心的内容展示能力及产品分发能力。我们希望通过平台提供的视频相关 api 接口能,能让小游戏发行和平台能力充分结合,更好的利用,帮助小游戏在本平台获得更多用户及更好收益。

录屏分享目的

新游上线平台会配给一定的冷启动流量作为小游戏上线的起始流量,cp 可以通过使用视频录制能力,充分利用这批冷启动量,通过平台内容分发机制给小游戏带来更多后续流量。

录屏常用接口

这里提供的是最核心的几个视频接口,文档中还有更多接口可供开发者选择使用。通过结合产品场景和接口能力,希望大家可以做出更多好的内容。

https://developer.toutiao.com/docs/game/media/gameRecorder/GameRecorderManager.html

手动录屏

玩家通过主动点击视频录制按钮开启视频及结束录制视频

star(开始)、stop(结束)

https://developer.toutiao.com/docs/game/media/gameRecorder/GameRecorderManager.start.html

自动录屏

star(开始)、stop(结束)

https://developer.toutiao.com/docs/game/media/gameRecorder/GameRecorderManager.start.html

高光时刻

recordClip 这个标记需要裁剪的点

clipVideo 这个输出需要裁剪的视频

https://developer.toutiao.com/docs/game/media/gameRecorder/GameRecorderManager.recordClip.html

保留视频最后 X 秒

clipVideo 这个输出需要裁剪的视频

https://developer.toutiao.com/docs/game/media/gameRecorder/GameRecorderManager.clipVideo.html

视频录制示例

开局自动录屏(推荐使用)

适用游戏类型

实时对战类、io 类、关卡类、音游类等节奏较快的游戏。

录屏规则

本局游戏开始时,cp 主动调起自动录屏接口,玩家游戏过程中不打扰用户体验,本局游戏结束,即视频录制自动结束。(结算界面用弹框或面板形式给玩家展示,并引导玩家"分享录屏"按钮。)

录屏提示

自动录屏时,icon 可为"录屏中"或其它进行时形式,根据游戏实际页面需要,也可选择隐藏;

注意事项

录屏时长最长为 300 秒-目前仅开放安卓版本权限,300 秒后录制自动停止,不打断用户操作体验;

录屏时间低于 3 秒,请提示"录屏失败:录屏时长低于 3 秒";

玩家发布视频时长,应控制在 11-30 秒内,超出或不够均无法获得较好的推荐;

交互样式

文案引导+奖励刺激

参考游戏

贪吃蛇大战

设定精彩点启动录屏(高光时刻,推荐使用)

适用游戏类型

moab、io 类、闯关类、RPG 类、回合制对战类等。

录屏规则

自动录屏接口+高光时刻接口

录屏接口使用

自动录屏状态下,研发设定某几个点为高光点,可以取这些点前 x 秒后 y 秒,最终将几段视频拼凑成一个完整视频。可以直接取 30s,用户免剪辑;也可以有多少高光时刻拼凑多长,玩家自己进行剪裁。

注意事项

录屏时长最长为 300 秒,300 秒后录制停止,应静默停止录制,且不打断用户操作体验;最终视频保留长度不得低于 15 秒。

玩家发布视频时长,应控制在 11-30 秒内,超出或不够均无法获得较好的推荐;

自动录屏时,icon 可为"录屏中"或其它进行时形式,根据游戏实际页面需要,也可选择隐藏;

交互样式:

参考游戏

极速大作战

保留最后 X 秒(推荐使用)

适用游戏类型

关卡最后有 boss 出现;有大量【僵尸】出现;巢穴崩塌;家园摧毁等

录屏规则

自动录屏接口+保留最后 X 秒

录屏接口使用

研发设定某 1 个点为开始录屏点,同时调取自动录屏和保留最后 X 秒接口,单局/关卡结束后录屏自动暂停,保留从结束录屏往前 X 秒,为最终展示给用的发布视频,时间建议 20-40 秒之间,用户需要裁剪;也可以保留 20-30 秒免用户裁剪。

注意事项

同上

用户手动录屏(可以强制引导,作为每日任务或运营活动)

适用游戏类型

通用

录屏规则

游戏界面,有较强引导提示;

注意事项

录屏时长最长为 300 秒,300 秒后录制停止,应静默停止录制,且不打断用户操作体验;

玩家发布视频时长,应控制在 11-30 秒内,超出或不够均无法获得较好的推荐;

录屏 icon 有"录屏"、"录屏中"两种状态,录屏中可为 icon 样式或其它进行时展示;

交互样式

同上

参考游戏

天天喂鸡

录屏分享形式

结算前弹框形式引导(推荐使用)

使用情形

想要有更强烈的引导效;'结算界面 UI 内容量过多,无法嵌入过多内容情况下;

分享逻辑

当局结束后,结算界面出现前弹出"分享视频可获得 XX 奖励"的弹框界面(文案结合图文,精彩瞬间分享给更多的人,炫耀你的神操作等等),用户操作结束后,回到结算界面。(用户手动录屏情况下使用此逻辑,建议录制按钮做好录屏有奖形式,录屏前后一起引导)

注意事项

结算界面提醒用户"分享录屏有奖",分享有奖每天限 5 次,超过 5 后建议变为纯图文信息分享或直接不再弹出此弹窗直接进入结算页面。

玩家发布视频时长,应控制在 11-30 秒内,超出或不够均无法获得较好的推荐。

获得奖励后需要有一个正反馈:提示用户获得 XX 奖励;

交互样式

无,自由设计。

结算界面激励引导

适用情形

通用

分享逻辑

结算界面,添加分享录屏有奖按钮,鼓励用户发布视频内容。

注意事项

结算界面提醒用户"分享录屏有奖",分享有奖每天 5 次,超过次数限制后建议变为纯图文信息分享或看视频获得更多奖励。

玩家发布视频时长,应控制在 11-30 秒内,超出或不够均无法获得较好的推荐。

获得奖励后需要有一个正反馈:提示用户获得 XX 奖励;

交互样式

体验中弹出发布(不建议)

用户体验过程中不建议弹出发布操作,体验较差。

录屏+运营活动配合引导(可选)

限时活动形式

适用游戏类型

长线留存较好,玩法较重度的小游戏。

活动逻辑

游戏主界面,每日首次登陆/现实出现 "录屏有奖励"icon,以限时任务形式出现,当任务完成后 icon 会消失,引导用户进行分享。

交互样式

日常任务形式(功能暂未开放,敬请期待)

适用游戏类型

通用

活动逻辑

在日常活跃/任务列表里,添加分享录屏任务,培养用户分享习惯。

交互样式

图片资源使用注意事项

不规范的资源管理方式,容易导致游戏加载速度慢、运行内存大,影响游戏的体验和性能。下面列出一些需要注意的地方:

优先 png 格式

UI 输出资源时,应该优先使用 png 格式而不是 jpg 格式。png 格式采用无损压缩算法,jpg 使用的是有损压缩算法,用 png 格式输出资源,获得的图片质量是好于使用 jpg 格式的。如果图片的大小比较大,可以使用 tinypng、pngquant 这类的工具提高压缩率(有损压缩)或者使用 ect2 等格式的压缩纹理。但是最好使用初始的 png 图片而不是用 tiny 等工具压缩后的 png 图片生成压缩纹理,因为压缩纹理也是采用有损压缩算法。多次对图片使用有损压缩算法进行压缩,会进一步降低图片质量,导致资源效果差。

控制尺寸

在保证外观效果的情况下,尽可能地减小图片尺寸。以脸萌冲撞游戏,球的脸表情为例,最初版本为 512x512 尺寸,后面优化成 128x128 尺寸。80 张 512x512 尺寸的 RGB888 png 图片,需要占用 80x512x512x3byte = 60M 内存,而优化成 128x128 尺寸后,仅需要 80*128*128*3byte = 3.75M 内存。占用内存减少了 93.75%。像海水这种模式重复的场景,也尽量使用较小尺寸的纹理。

修剪透明部分

下面左边的图片,一半的面积,都是透明部分,浪费大量的空间,在 UI 输出资源时应该尽量避免,或者用工具修剪掉透明部分。右边是修剪后的图片。尺寸由 750*375 变为 466*284,占用内存减小 50%。

合并图片

合并图片的目的是为了减少引擎读取文件的次数,加快加载速度。合图的关键问题是,合出的大图, 空间利用率是否足够高 ,较低的空间利用率,会造成游戏运行内存的增大。合图要注意的几个问题如下:

  1. 应该尽量只对尺寸比较小的图,进行合图操作。尺寸大于 256x256 的图片,要考虑下。
  1. 合出的整张大图,尺寸不要太大,一般不大于 1024x1024,最好不要超过 2048x2048。
  1. 尽量保证合图的利用率,不要低于 75%(越高越好)。实际上 1 和 2 也是可以提高合图利用率的。合图时,记得打开允许旋转选项,这也能够提升利用率。导出格式选用 RGBA8888。
  1. 尽量保证关联性大的图片合并在一起。比如同一界面的资源,应该优先合在一张图上,而不是放在多张图里,这样子保证可以一次操作就可以读取或者传送整个界面需要的资源。

资源复用

对尺寸比较大的资源,尽量进行复用。像界面背景图片这样的资源,应该抽取出,单独出资源。

九宫格拉伸

当界面资源要显示的图片尺寸比较大,且中间部分是由连续有规则的像素组成时,通常使用九宫格拉伸的办法,大幅度减小图片尺寸的大小。对于可以进行拉伸的图片,划分成以下 9 个部分:

拉伸规则如下:

  1. 四个边角 1、3、7、9 不做任何拉伸
  1. 2、4、6、8 做单向拉伸,2、8 做横向拉伸,4、6 做纵向拉伸
  1. 5 做双向拉伸

下面的图片尺寸是 612*946,格式是 RGBA8888,如果使用九宫格拉伸的办法,那么尺寸可以做到小于 300*300,占用内存减小 80%以上。

压缩纹理

像场景贴图、界面背景图等资源,占用内存比较大,但为了保证效果,不能去减小尺寸,这种情况下可以考虑使用压缩纹理。压缩纹理采用的是有损的压缩算法,一般效果都是可以接受的。下面是两张对比图:左边是 s3tc 格式的压缩纹理资源,右图是未压缩的图片资源。对比下两张资源图,大部分地方肉眼不容易识别出差别,左边图片在边缘细节上,要差一些(可以双击放大看)。

纹理内存优化

内存过大导致的问题

游戏运行时占用的内存大小,是衡量游戏性能的一个非常重要的指标。游戏如果占用的内存过大,会导致以下的问题:

  1. 发热,发烫。过多的内存数据传输,是导致游戏发热的主要原因之一。
  1. 延迟、卡顿。像纹理的加载、传输都需要耗费时间,另外内存资源占用的越多,系统也更加容易触发 gc 操作,导致游戏非预期卡顿。
  1. 闪退。游戏超过一定的内存上限,操作系统会强制杀死进程。

而纹理占用的内存占整个运行内存的比重非常大,并且容易做优化,所以纹理内存占用的大小是需要重点关注的。

纹理加载流程

下面是一张图片加载的整个流程。

可以看出读取非压缩纹理与压缩纹理的主要区别是: 压缩纹理不需要解码 ,数据是可以直接被 gpu 读取;png 等格式图片,不能直接被 gpu 读取,需要解码成未压缩的位数据。不过实际运行中, 并不是所有阶段的数据都需要保存 。非压缩纹理在 cpu 内存里的编码数据(蓝色区域),在解码后,是不需要再保存的。

纹理管理方式

下面列举几种小游戏开发可以使用的纹理管理方案:

  1. 将所有资源都加载进 gpu 内存,那么对于非压缩纹理,只需要在 gpu 内存保存一份解码数据,压缩纹理只需要在 gpu 内存保存一份压缩纹理数据。也就是只需要红色区域的部分。
  1. 将所有资源都加载进 cpu 内存,然后在运行时,将所需要绘制的资源,加载进 gpu 内存,不需要绘制时,可以释放掉。
  1. 将部分资源加载进 cpu 内存,然后在运行时,再将所需要绘制的资源,加载进 gpu 内存。根据需要将资源加载、释放。

那么这三种方式各有什么优缺点呢?

第 1 种方式是运行性能最好的,因为所有的纹理数据都在 gpu 内存,可以直接绘画,无需从 cpu 内存 copy 数据,占用的内存比较大。但是要求你对 webgl 和所使用的引擎,有一定的了解,保证 gpu 内的纹理数据,没有被引擎或者自己释放。游戏引擎在绘制纹理的时候,如果发现 gpu 内存中没有纹理数据,就会从 cpu 内存中寻找数据并拷贝。但是由于这种方式,我们没有在 cpu 内存中放置纹理数据,如果 gpu 中的某些纹理数据被释放了,后面就无法绘制了。如果使用 three.js 这种不自动回收 gpu 资源的引擎,并且整个游戏纹理内存占用不大的情况下,可以用这种方法。

第 2 种方式占用的内存要比第 1 种方式大,并且性能不如第 1 种方式(如果你提前将需要的纹理加载进 gpu 内存,那性能就和 1 一样了)。大部分引擎会在绘制纹理时,负责将纹理数据从 cpu 内存 copy 进 gpu 内存,并且管理释放。如果引擎不释放资源的话,就需要自己去做。

第 3 种方式的优点是,占用的内存小,特别适合做多关卡、多场景游戏。缺点是,需要管理好资源的加载与释放问题。一般在加载关卡进度的时候,完成资源的加载。

纹理大小如何计算

要想优化纹理占用的内存,就要知道如何计算每张纹理的大小。下面用一个例子进行说明。

上面是脸萌的主场景图片,jpg 格式,尺寸为 512*512,颜色空间为 RGB888,大小 100kb。解码后占用的内存大小计算公式为:长 * 宽 * 通道个数 * 通道位数,如果解码成 RGB888 格式,那么占用的内存大小为 512*512*3*8bit = 0.75M。而对应的 etc2 RGB888 格式的压缩纹理占用的内存大小为 512*512*0.5byte = 0.125M(实际大小为 135kb,因为还包含纹理描述信息)。下面的表格列举出几种常用的压缩纹理格式每像素占用的字节数。

减小纹理占用内存的方法

那么减少单张图片占用的内存,有以下几个方案:

  1. 减小图片的尺寸,在满足视觉要求的情况下,尽可能地缩小图片尺寸,比如将一张 256256 图片缩小成 128128 尺寸,就减少了 75%的内存占用。
  2. 降低通道位数,比如 RGB888 格式的图片转换为 RGB565 格式。但是这也依赖于具体的解码方法,现在小游戏引擎,会把图片资源都解码成 RGBA8888 格式,那么即使将 RGB888 格式转换为 RGB565 格式,也不会降低解码后纹理数据占用的内存。
  3. 使用压缩纹理,但是有几个限制点:首先压缩纹理是有损压缩,会降低一些图片质量(一般不明显);其次各个平台、不同图形 api 支持的压缩纹理格式,也不尽相同。比如浏览器上可以支持 s3tc 纹理,手机端支持 etc2 纹理(需要支持 opengles3.0),ios 系统支持 pvrtc 纹理。

像 pngquant、tinypng 等采用 color reduction 方法压缩图片的工具,能够减小文件大小,加快加载速度,编码数据占用的内存也更小。但是在解码方式不变的情况下,并不能减小解码后的图片内存占用大小。