百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT知识 > 正文

揭秘!你玩的字节抖音小游戏制作流程公布

liuian 2025-03-23 21:06 33 浏览

  • 1.1 注册字节开发者后台
  • 1.2 Unity版本说明
  • 1.3 检查AppID是否有效
  • 2.1 创建项目
  • 2.2 接入SDK
  • 3.1 发布安卓Apk
  • 3.2 发布双端WebGL
  • 3.3 IOS15.4版本问题

字节抖音小游戏是一种基于字节跳动产品生态开发且无需下载安装即可使用的全新游戏应用,实现了客户端“点开即玩”的优质用户体验。小游戏拥有开发轻便快捷,发布流程简单的特点,同时依托字节跳动生态优势,让小游戏天然具备较强的内容分发能力,支持小游戏开发者快速推广与变现。

一,准备工作

1.1 注册字节开发者后台

进入字节小程序开发者后台,在开发者平台中点击右上角的「快捷登录」进行帐号注册。在登录后需要通过【申请创建】提示完成申请流程即可。

然后等着字节小游戏通过注册时的手机号或邮箱给予的答复。工作日提交的话一般在几个小时之内就有答复,最长时间为两个工作日之内。

注册后按照要求填写资质信息:公司就写企业全称,个人开发者填写个人姓名,然后其他内容根据要求填写。

其中需要注意的是小游戏体验路径:一般是一个可用的测试链接或者是一个网盘地址里面放一个可以玩的apk。(我们写过苹果商店地址审核失败了,应该是IOS的不行)


1.2 Unity版本说明

如果使用 natvie 方案:确认游戏工程运行在 Unity 2019.4.8f1 或者 Unity 2019.4.35f1

如果使用 wasm 方案:建议使用 unity 最新版,比如 2021.2 之后的版本,在 wasm 方面做了很多优化

可以用 2019.4.8 构建 native 版本,用 2021.x 构建 wasm,一起发布。

我前几天测试了2019.4.35f1c1,2019.4.8f1,Unity2021.3.3f1c1版本都是可以使用的,

不过在7月26号看到有开发者反馈说2019.4.8f1不好用了,官方回复:最近因为Android 12 的普及新增崩溃太多了,所以发新版需要升级了。

因为插件本身也在开发中,所以建议在开发是加入意见反馈群(在官方文档文末),及时关注动态,以免重复趟坑。

我这里用的是Unity2021.3.3f1c1版本:

发布Android就在下载时添加:Android Build Support 模块:

发布WebGL的话就在下载时添加:WebGL Build Support 模块: (想上线IOS的话只能使用WebGL的方式进行发布)

1.3 检查AppID是否有效

审核通过后就可以在应用中心看一个以07结尾且长度是20位AppID,若不是需要重新申请(后面打包时用)


二,开始集成

2.1 创建项目

下载字节SDK:开发者后台,建议先读一遍文档,因为当你看的时候有可能有更新:

导入后在工具栏选:ByteGame --> ByteGame Develop Tools

打开后下载:StarkSDKStarkSDKUnityTools两个包:

下载完成后目录大致如下:


2.2 接入SDK

发布抖音小游戏,只需要一个录屏分享功能即可上线。所以这里只提供录屏和分享功能示例,其他功能可按需接入,官方文档地址。

逻辑也非常简单,创建三个按钮分别为开始游戏,游戏结束,分享录屏来模拟游戏过程中的功能实现;带有详细注释的接入代码如下:

using System.Collections;
using System.Collections.Generic;
using StarkSDKSpace;
using UnityEngine;
using UnityEngine.UI;

public class StarkSDKTest : MonoBehaviour
{
    public Button startBtn;
    public Button endBtn;
    public Button shareBtn;
 
    void Start()
    {
        startBtn.onClick.AddListener(StartVideo);
        endBtn.onClick.AddListener(StopVideo);
        shareBtn.onClick.AddListener(ShareVideo);
    }

    void StartVideo()
    {
        Debug.Log("抖音 开启录制视频 ...");
        // 是否录制声音,默认为录制声音
        // 最大录制时长,单位 s。小于等于 0 则无限制。默认为10分钟
        // 视频录制开始回调
        // 视频录制失败回调
        bool isStart = StarkSDK.API.GetStarkGameRecorder().StartRecord(true, 200,
            StartCallback, FailedCallback, SuccessCallback);
        Debug.Log("视频开启录制结果 ..." + isStart);
    }

    void StopVideo()
    {
        Debug.Log("抖音 停止录制视频 ...");
        bool isStop = StarkSDK.API.GetStarkGameRecorder().StopRecord(SuccessCallback, FailedCallback, null, false);
        Debug.Log("停止录制视频状态 ..." + isStop);
    }

    void StartCallback()
    {
        Debug.Log("视频开始录制回调执行 ...");
        // 开始回调逻辑,比如:显示录屏中按钮
    }

    void FailedCallback(int errCode, string errMsg)
    {
        Debug.Log("录制视频失败回调执行 ... 错误码是:" + errCode + " ,错误消息是:" + errMsg);
        // 失败回调逻辑,比如:隐藏录屏中按钮
    }

    void SuccessCallback(string videoPath)
    {
        Debug.Log("视频录制完成实际路径:" + videoPath);
        // 成功回调逻辑,比如:隐藏录屏中按钮
    }

    void ShareVideo()
    {
        Debug.Log("ShareVideo ShareVideo ...");
        // 只有回调,不带预定义标题和话题
        StarkSDK.API.GetStarkGameRecorder().ShareVideo(SuccessCallback, FailedCallback, CancelledCallback);

        // 分享成功回调
        // 分享失败回调
        // 分享取消回调
        // 分享视频的标题,如不需要设置标题,可以传null或空字符串
        // 分享视频的话题,如不需要设置话题,可以传null或空列表
        //StarkSDK.API.GetStarkGameRecorder().ShareVideoWithTitleTopics(SuccessCallback, FailedCallback,
        //    CancelledCallback, "自定义标题", new List() {"自定义话题1", "自定义话题2"});

        void SuccessCallback(Dictionary dictionary)
        {
            Debug.Log("视频分享成功回调 ...");
            // 成功回调逻辑,比如:弹窗提示并发放奖励
        }

        void CancelledCallback()
        {
            Debug.Log("取消分享回调 ...");
            // 取消回调逻辑,比如:弹窗提示
        }

        void FailedCallback(string errMsg)
        {
            Debug.Log("分享视频失败回调执行 ... " + " ,错误消息是:" + errMsg);
            // 失败回调逻辑,比如:弹窗提示
        }
    }
}

最后将代码挂载到游戏场景中并将上面创建的三个按钮赋值给代码中预留的公开变量。

然后运行:点击开始游戏按钮 -——> 调用录屏逻辑 -——> 游戏中出现:开发阶段...文字提示,-——> SDK接入成功 -——> 进入真机测试阶段。


三,发布游戏

在工具栏选择 ByteGame --> StarkSDKTools --> Build Tool 即可打开打包的工具面板

3.1 发布安卓Apk

在面板的运行框架选择Native,然后按照需求填写,构建即可。


3.2 发布双端WebGL

在面板的运行框架选择WebGL,然后选择构建WebGL:

构建完成后,会在指定目录生成 --> 一个webgl的目录和一个压缩包,如下图:

然后在3.1图1中选择发布WebGl:

最后按需填写完成后,选择发布,等待发布完成即可在弹出二维码,使用抖音扫描就可以进行测试了。


3.3 IOS15.4版本问题

测试IOS时发现,使用IOS15.4版本的测试机,不能成功加载出游戏场景,报错如下:

报错原文:

10:08:30.703 exception thrown: RuntimeError: Out of bounds memory access (evaluating 'dynCall_ii(index,a1)'),.wasm-function[59627]@[wasm code] .wasm-function[146029]@[wasm code] .wasm-function[83839]@[wasm code] wasm-stub@[native code] invoke_ii@blob:file:///ce3cf2cf-9cb3-4723-a499-98a7b0c93a71:3:413696 .wasm-function[83839]@[wasm code] .wasm-function[19042]@[wasm code] .wasm-function[1057]@[wasm code] .wasm-function[66513]@[wasm code] .wasm-function[4560]@[wasm code] .wasm-function[118584]@[wasm code] wasm-stub@[native code] invoke_iii@blob:file:///ce3cf2cf-9cb3-4723-a499-98a7b0c93a71:3:411844 .wasm-function[118584]@[wasm code] .wasm-function[2239]@[wasm code] .wasm-function[63653]@[wasm code] .wasm-function[18940]@[wasm code] .wasm-function[541]@[wasm code] .wasm-function[540]@[wasm code] .wasm-function[111580]@[wasm code] .wasm-function[134747]@[wasm code] .wasm-function[18950]@[wasm code] .wasm-function[118583]@[wasm code] wasm-stub@[native code] invoke_iiii@blob:file:///ce3cf2cf-9cb3-4723-a499-98a7b0c93a71:3:412366

应该unity引擎有些代码变动导致,一个相关说明

解决方法:升级IOS版本就不会有问题啦。


相关推荐

总结下SpringData JPA 的常用语法

SpringDataJPA常用有两种写法,一个是用Jpa自带方法进行CRUD,适合简单查询场景、例如查询全部数据、根据某个字段查询,根据某字段排序等等。另一种是使用注解方式,@Query、@Modi...

解决JPA在多线程中事务无法生效的问题

在使用SpringBoot2.x和JPA的过程中,如果在多线程环境下发现查询方法(如@Query或findAll)以及事务(如@Transactional)无法生效,通常是由于S...

PostgreSQL系列(一):数据类型和基本类型转换

自从厂子里出来后,数据库的主力就从Oracle变成MySQL了。有一说一哈,贵确实是有贵的道理,不是开源能比的。后面的工作里面基本上就是主MySQL,辅MongoDB、ES等NoSQL。最近想写一点跟...

基于MCP实现text2sql

目的:基于MCP实现text2sql能力参考:https://blog.csdn.net/hacker_Lees/article/details/146426392服务端#选用开源的MySQLMCP...

ORACLE 错误代码及解决办法

ORA-00001:违反唯一约束条件(.)错误说明:当在唯一索引所对应的列上键入重复值时,会触发此异常。ORA-00017:请求会话以设置跟踪事件ORA-00018:超出最大会话数ORA-00...

从 SQLite 到 DuckDB:查询快 5 倍,存储减少 80%

作者丨Trace译者丨明知山策划丨李冬梅Trace从一开始就使用SQLite将所有数据存储在用户设备上。这是一个非常不错的选择——SQLite高度可靠,并且多种编程语言都提供了广泛支持...

010:通过 MCP PostgreSQL 安全访问数据

项目简介提供对PostgreSQL数据库的只读访问功能。该服务器允许大型语言模型(LLMs)检查数据库的模式结构,并执行只读查询操作。核心功能提供对PostgreSQL数据库的只读访问允许L...

发现了一个好用且免费的SQL数据库工具(DBeaver)

缘起最近Ai不是大火么,想着自己也弄一些开源的框架来捣腾一下。手上用着Mac,但Mac都没有显卡的,对于学习Ai训练模型不方便,所以最近新购入了一台4090的拯救者,打算用来好好学习一下Ai(呸,以上...

微软发布.NET 10首个预览版:JIT编译器再进化、跨平台开发更流畅

IT之家2月26日消息,微软.NET团队昨日(2月25日)发布博文,宣布推出.NET10首个预览版更新,重点改进.NETRuntime、SDK、libraries、C#、AS...

数据库管理工具Navicat Premium最新版发布啦

管理多个数据库要么需要使用多个客户端应用程序,要么找到一个可以容纳你使用的所有数据库的应用程序。其中一个工具是NavicatPremium。它不仅支持大多数主要的数据库管理系统(DBMS),而且它...

50+AI新品齐发,微软Build放大招:拥抱Agent胜算几何?

北京时间5月20日凌晨,如果你打开微软Build2025开发者大会的直播,最先吸引你的可能不是一场原本属于AI和开发者的技术盛会,而是开场不久后的尴尬一幕:一边是几位微软员工在台下大...

揭秘:一条SQL语句的执行过程是怎么样的?

数据库系统能够接受SQL语句,并返回数据查询的结果,或者对数据库中的数据进行修改,可以说几乎每个程序员都使用过它。而MySQL又是目前使用最广泛的数据库。所以,解析一下MySQL编译并执行...

各家sql工具,都闹过哪些乐子?

相信这些sql工具,大家都不陌生吧,它们在业内绝对算得上第一梯队的产品了,但是你知道,他们都闹过什么乐子吗?首先登场的是Navicat,这款强大的数据库管理工具,曾经让一位程序员朋友“火”了一把。Na...

详解PG数据库管理工具--pgadmin工具、安装部署及相关功能

概述今天主要介绍一下PG数据库管理工具--pgadmin,一起来看看吧~一、介绍pgAdmin4是一款为PostgreSQL设计的可靠和全面的数据库设计和管理软件,它允许连接到特定的数据库,创建表和...

Enpass for Mac(跨平台密码管理软件)

还在寻找密码管理软件吗?密码管理软件有很多,但是综合素质相当优秀且完全免费的密码管理软件却并不常见,EnpassMac版是一款免费跨平台密码管理软件,可以通过这款软件高效安全的保护密码文件,而且可以...