【抖音小游戏】 Unity制作抖音小游戏方案 最新完整详细教程来袭【持续更新】

请添加图片描述

      • 前言
  • 【抖音小游戏】 Unity制作抖音小游戏方案 最新完整详细教程来袭【持续更新】
    • 一、相关准备工作
      • 1.1 用到的相关网址
      • 1.2 注册字节开发者后台账号
    • 二、相关集成工作
      • 2.1 下载需要的集成资源
      • 2.2 安装StarkSDK和starksdk-unity-tools工具包
      • 2.3 搭建测试场景
    • 三、构建发布
      • 3.1 发布Native
      • 3.2 发布WebGL
  • 总结

请添加图片描述


前言

  • 之前有篇文章讲过怎么使用Unity来制作微信小游戏:如何使用 Unity制作微信小游戏,微信小游戏制作方案 最新完整详细教程来袭
  • 那本篇文章来介绍怎样使用Unity引擎来制作和发布抖音小游戏
  • 无论是制作微信小游戏还是抖音小游戏,核心还是使用Unity引擎完成各项工作,只不过在某些功能上加了一些限制,如本地加载资源文件等等。
  • 在制作之前可以前往各自对应的官方平台查阅文档注意事项即可。
  • 实现步骤其实很容易,简单分为三步:获取APPID集成SDK构建发布游戏。下面一起看看是怎么操作的吧。

【抖音小游戏】 Unity制作抖音小游戏方案 最新完整详细教程来袭【持续更新】

一、相关准备工作

1.1 用到的相关网址

  • 字节小程序开发者后台地址 字节小游戏
  • 抖音开发者平台
  • StarkSDK_Unity文档
  • StarkContainer游戏发布
  • Uid获取方法
  • StarkContainer游戏发布失败FAQ

1.2 注册字节开发者后台账号

前往字节小程序开发者平台,进行账号注册,然后创建小游戏,选择即玩Unity&UE小游戏并填写一些基本信息。
在这里插入图片描述

游戏必须完成「主体认证」和「基本信息」两项才能发布上线。
主体认证里面有主体资质、对公打款验证及申请CA签章,这里就挨个点击然后按要求填写就好了,都是一些基础的个人信息,其中申请CA签章时可根据需求选择个人还是公司都可以。
在这里插入图片描述

然后等待平台审核即可,一般工作日都是很快就审核完毕了。

基本信息 里面可以设置小游戏的简介、图标、类别等, 还需要有软著和游戏自身自查报告才可以进行保存,若是想加入支付模块则还需要提交版号信息。

测试使用的话就不需要填写这一块了,了解一下即可,不填写也可以在抖音构建发布并测试。

此时点击回到开发者平台就可以看到我们创建的应用了,并拿到对应的AppID,这个才是最终目的!
在这里插入图片描述


二、相关集成工作

2.1 下载需要的集成资源

这一步我们将集成字节提供的SDK,简单来说就是下载一个包并将其导入到Unity中。

下载字节SDK的地址可以来此文档中:StarkSDK_Unity文档
在这里插入图片描述

然后将下载的.unitypackage包导入我们自己的Unity工程中。
在这里插入图片描述

2.2 安装StarkSDK和starksdk-unity-tools工具包

在菜单栏点击 ByteGame ->ByteGame Develop Tool
然后点击StarkSDK和starksdk-unity-tools进行下载安装。
在这里插入图片描述

2.3 搭建测试场景

在Unity中 搭建一个测试场景,主要是测试一下几个API的用法。
在这里插入图片描述

代码如下:

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

public class StarkSDKDemo : MonoBehaviour
{
    public Button btn_StartRecord;
    public Button btn_StopRecord;
    public Button btn_ShareGame;
    public Button btn_FollowDouYinUser;
    public Button btn_CreateShortcut;
    public Button btn_GetAccount;
    public Button btn_OpenCustomer;

    public Text des;

    void Start()
    {
        btn_StartRecord.onClick.AddListener(StartRecord);
        btn_StopRecord.onClick.AddListener(StopRecord);
        btn_FollowDouYinUser.onClick.AddListener(FollowDouYinUser);
        btn_CreateShortcut.onClick.AddListener(CreateShortcut);
        btn_ShareGame.onClick.AddListener(ShareVideo);
        btn_GetAccount.onClick.AddListener(Login);
        btn_OpenCustomer.onClick.AddListener(OpenCustomer);
    }

    /// <summary>
    /// 开始录制视频
    /// </summary>
    void StartRecord()
    {
        des.text = ("抖音 开启录制视频 ...");
        StarkSDK.API.GetStarkGameRecorder().StartRecord(true, 200, StartCallback, FailedCallback, SuccessCallback);
    }

    /// <summary>
    /// 停止录制视频
    /// </summary>
    void StopRecord()
    {
        des.text = ("抖音 停止录制视频 ...");
        StarkSDK.API.GetStarkGameRecorder().StopRecord(SuccessCallback, FailedCallback, null, false);
    }

    void StartCallback()
    {
        des.text = ("视频开始录制回调执行 ...");
    }

    void SuccessCallback(string videoPath)
    {
        des.text = ("视频录制完成实际路径:" + videoPath);
    }
    void FailedCallback(int errCode, string errMsg)
    {
        des.text = ("录制视频失败回调执行 ... 错误码是:" + errCode + " ,错误消息是:" + errMsg);
    }

    /// <summary>
    /// 分享视频
    /// </summary>
    void ShareVideo()
    {
        des.text = "开始 分享视频";
        StarkSDK.API.GetStarkGameRecorder().ShareVideo(SuccessCallback, FailedCallback, CancelledCallback);

        void SuccessCallback(Dictionary<string, object> dictionary)
        {
            des.text = "视频分享成功回调 ...";
        }

        void CancelledCallback()
        {
            des.text = "取消分享回调 ...";
        }

        void FailedCallback(string errMsg)
        {
            des.text = ("分享视频失败回调执行 ... " + " ,错误消息是:" + errMsg);
        }
    }

    /// <summary>
    /// 绑定抖音号
    /// </summary>
    void FollowDouYinUser()
    {
        des.text = "开始 绑定抖音号";
        StarkSDK.API.FollowDouYinUserProfile(OnFollowAwemeCallback, OnFollowAwemeError);
        void OnFollowAwemeCallback()
        {
            des.text = "完成打开抖音号的回调";
        }
        void OnFollowAwemeError(int errCode, string errMsg)
        {
            des.text = ("录制视频失败回调执行 ... 错误码是:" + errCode + " ,错误消息是:" + errMsg);
        }
    }

    /// <summary>
    /// 创建快捷方式
    /// </summary>
    void CreateShortcut()
    {
        des.text = "开始 创建快捷方式";
        StarkSDK.API.CreateShortcut(OnCreateShortcut);
        void OnCreateShortcut(bool bSuccess)
        {
            des.text = string.Format("创建快捷方式: {0}", bSuccess);
        }
    }

    /// <summary>
    /// 登陆
    /// </summary>
    void Login()
    {
        des.text = "开始 登陆";
        StarkSDK.API.GetAccountManager().Login(OnLoginSuccessCallback, OnLoginFailedCallback,true);

        void OnLoginSuccessCallback(string code, string anonymousCode, bool isLogin)
        {
            des.text = "临时登录凭证:" + code + "。用于标识当前设备:" + anonymousCode + "。当前 APP(头条、抖音等)是否处于登录状态:" + isLogin;
        }
        void OnLoginFailedCallback(string errMsg)
        {
            des.text = " 登录失败 错误消息:" + errMsg;
        }
    }

    /// <summary>
    /// 打开客服聊天页
    /// </summary>
    void OpenCustomer()
    {
        des.text = "开始 打开客服聊天页";
        StarkSDK.API.OpenCustomerServicePage(
        (flag) =>
        {
            if (flag)
            {
                des.text = ("打开客服页成功");
            }
            else
            {
                des.text = ("打开客服页失败");
            }
    });
    }
}

提示:如果发布WebGL记得修改字体,默认的Arial字体在发布WebGL之后经常会出现字体不显示或者乱码的问题。
方案:Windows电脑直接在C:\Windows\Fonts将某个字体复制到Unity项目中测试即可。


三、构建发布

将上述两个包安装之后,在菜单栏的ByteGame中会多出一个选项StartSDKTools ,在StartSDKTools 中有三个选项:Build Tool、Wasm Split及Publishing Tool。

  • Build Tool 是构建工具,负责打包相关设置。
  • Publishing Tool 是发布工具,负责发布设置。

更多发布相关的内容可查阅官方文档:StarkContainer游戏发布

在这里插入图片描述

打开菜单栏 ByteGame -> StartSDKTools -> Build Tool打开Build的面板。

运行框架有 NativeWebGL 两种,Native只能打包成APK在Android中使用,而WebGL支持Adnroid和IOS。目前相对来说Native更稳定一些,可根据实际情况构建并发布。

3.1 发布Native

选择架构为Native,设置AppID和路径。

点击仅构建APK或者发布APK都可以,我们这里点击发布APK则会跳转到PublishTool发布工具面板。

然后填写Uid和AppID,Android发布方案选择Native并选择打包的APK然后点击发布即可。
在这里插入图片描述

若是出现发布失败提示让我们下载正确的Unity版本,那就点击查看然后根据文档的信息下载对应的Unity版本尝试重新发布。

StarkContainer游戏发布失败FAQ
官方公布的原因:考虑到安全性,引擎共享等因素,sc游戏只允许特定版本的unity引擎进行发布。

3.2 发布WebGL

选择架构为WebGL,选择输出目录然后点击构建。

等待构建完成后点击发布WebGL,然后填写Uid、AppID等信息,发布方案记得选择WebGL。
在这里插入图片描述

发布完成后会生成对应的二维码,打开抖音APP扫码就可以试玩打包的项目了。
在这里插入图片描述

试玩截图效果展示
在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述

有些API需要上面我们把相关基本信息全部填写完了之后才能使用,具体的使用方法可以前往上面发的相关文档查看,使用中出现报错也可以查看前面的报错相关文档查看。

下面是打包了一个小游戏构建发布到抖音APP可以扫码玩的,可以看一下效果:

请添加图片描述


总结

  • 本文整理了怎样通过Unity制作并发布抖音小游戏的流程。
  • 整体来说比Unity制作微信小游戏的流程要少很多。
  • 核心原理就是通过开发者平台提供的SDK来构建和发布对应的小游戏。
  • 关于更多抖音小游戏的功能可以前往开发者平台提供的文档中查阅。
  • 本文就到这里结束啦,快去使用Unity制作各种好玩的小游戏然后发布到各个平台玩吧!

资料白嫖,技术互助
请添加图片描述

学习路线指引(点击解锁)知识定位人群定位
🧡 Unity系统学习专栏 🧡入门级本专栏从Unity入门开始学习,快速达到Unity的入门水平
💛 Unity实战类项目 💛进阶级计划制作Unity的 100个实战案例!助你进入Unity世界,争取做最全的Unity原创博客大全。
❤️ 游戏制作专栏 ❤️ 难度偏高分享学习一些Unity成品的游戏Demo和其他语言的小游戏!
💚 游戏爱好者万人社区💚 互助/吹水数万人游戏爱好者社区,聊天互助,白嫖奖品
💙 Unity100个实用技能💙 Unity查漏补缺针对一些Unity中经常用到的一些小知识和技能进行学习介绍,核心目的就是让我们能够快速学习Unity的知识以达到查漏补缺

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/55428.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【深度学习】MAT: Mask-Aware Transformer for Large Hole Image Inpainting

论文&#xff1a;https://arxiv.org/abs/2203.15270 代码&#xff1a;https://github.com/fenglinglwb/MAT 文章目录 AbstractIntroductionRelated WorkMethod总体架构卷积头Transformer主体Adjusted Transformer Block Multi-Head Contextual Attention Style Manipulation Mo…

探索Vue组件通信的秘密:打破隔阂,实现数据共享

一、Vue组件通信 每个组件都有自己的数据, 提供在data中, 每个组件的数据是独立的, 组件数据无法互相直接访问 (合理的)但是如果需要跨组件访问数据, 就需要用到组件通信 要是有一万个商品&#xff1f;&#xff1f;&#xff1f;&#xff1f;就要写一万个吗&#xff1f;函数调用…

KubeSphere 3.4.0 发布:支持 K8s v1.26

2023 年 07 月 26 日&#xff0c;KubeSphere 开源社区激动地向大家宣布&#xff0c;KubeSphere 3.4.0 正式发布&#xff01; 让我们先简单回顾下之前三个大版本的主要变化&#xff1a; KubeSphere 3.1.0 新增了“边缘计算”、“计量计费” 等功能&#xff0c;将 Kubernetes 从…

myeclipse的Debug模式

1.表示当前实现继续运行直到下一个断点&#xff0c;快捷键为F8。 2.表示打断整个进程 3.表示进入当前方法&#xff0c;快捷键为F5。 4.表示运行下一行代码&#xff0c;快捷键为F6。 5.表示退出当前方法&#xff0c;返回到调用层&#xff0c;快捷键为F7。 6.表示当前线程的…

kotlin 编写一个简单的天气预报app(五)增加forcast接口并显示

参考资料 OpenWeatherMap提供了一个/forecast接口&#xff0c;用于获取未来几天的天气预报。你可以使用HTTP GET请求访问该接口&#xff0c;并根据你所在的城市或地理坐标获取相应的天气数据。 以下是一个示例请求的URL和一些常用的参数&#xff1a; URL: http://api.openwe…

我的创作纪念日——256天

机缘 最开始我写博客没有什么特别的原因&#xff0c;主要是因为以下几点&#xff1a; 练习自己的语言组织能力 记录自己学习生活中学到的知识 为和我同一个学习阶段的朋友提供帮助 事实上最开始我根本不指望我的博客有多少人看&#xff0c;主要是想找一个好的保存 Markdown 笔…

花费7元训练自己的GPT 2模型

在上一篇博客中&#xff0c;我介绍了用Tensorflow来重现GPT 1的模型和训练的过程。这次我打算用Pytorch来重现GPT 2的模型并从头进行训练。 GPT 2的模型相比GPT 1的改进并不多&#xff0c;主要在以下方面&#xff1a; 1. GPT 2把layer normalization放在每个decoder block的前…

PHP最简单自定义自己的框架(一)

为啥要定义自己的框架&#xff1a; 定制化需求&#xff1a;每个项目都有不同的需求和特点&#xff0c;使用通用的框架可能无法满足所有的要求。自定义框架可以根据具体需求进行定制&#xff0c;提供更加灵活和符合项目需求的解决方案。学习和成长&#xff1a;自定义框架是一个很…

STM32存储左右互搏 I2C总线读写EEPROM ZD24C1MA

STM32存储左右互搏 I2C总线读写EEPROM ZD24C1MA 在较低容量存储领域&#xff0c;EEPROM是常用的存储介质&#xff0c;不同容量的EEPROM的地址对应位数不同&#xff0c;在发送字节的格式上有所区别。EEPROM是非快速访问存储&#xff0c;因为EEPROM按页进行组织&#xff0c;在连…

一文搞懂Redis架构演化之路

目录 从最简单的开始&#xff1a;单机版 Redis 数据持久化&#xff1a;有备无患 主从复制&#xff1a;多副本 哨兵&#xff1a;故障自动切换 分片集群&#xff1a;横向扩展 总结 这篇文章我想和你聊一聊 Redis 的架构演化之路。 现如今 Redis 变得越来越流行&#xff0c;…

图为科技加入深圳市智能交通行业协会 ,打 …

图为科技加入深圳市智能交通行业协会&#xff0c;打造智能交通新生态&#xff01; 交通是国民经济发展的“大动脉”&#xff0c;交通拥堵、事故频发等问题不仅影响了人们的出行体验&#xff0c;也对经济的发展产生了负面影响。安全、高效、便捷的出行&#xff0c;一直是人们的…

【Unity实用插件篇】| 学会使用 可编程瓦片Tile Map,快速搭建2D地图

前言【Unity 实用插件篇】| 学会使用 可编程瓦片Tile Map,快速搭建2D地图一、导入 Tile Map Editor二、创建调色板 Tile Palette三、快速绘制地图四、TilePalette 调色板功能介绍五、TileMap 相关组件属性介绍GirdTilemapTilemap Renderer 瓦片地图渲染器Tile Assets 瓦片资源…

【Git】分支管理策略

文章目录 分支策略bug分支-master分支出现bug怎么办删除临时分⽀小结 分支策略 在实际开发中&#xff0c;我们应该按照⼏个基本原则进⾏分⽀管理&#xff1a; 1.master分⽀应该是⾮常稳定的&#xff0c;也就是仅⽤来发布新版本&#xff0c;平时不能在上⾯⼲活 2.⼲活都在dev…

Reinforcement Learning with Code 【Code 2. Tabular Sarsa】

Reinforcement Learning with Code 【Code 2. Tabular Sarsa】 This note records how the author begin to learn RL. Both theoretical understanding and code practice are presented. Many material are referenced such as ZhaoShiyu’s Mathematical Foundation of Rei…

Elasticsearch 全文检索 分词检索-Elasticsearch文章四

文章目录 官方文档地址refercence文档全文搜索体系match简单查询match 多词/分词单字段分词match多个词的逻辑控制match的匹配精度match_pharse_prefix分词前缀方式match_bool_prefixmulti_match多字段匹配 query string类型Interval类型DSL查询之Term详解聚合查询之Bucket聚合…

RTT(RT-Thread)线程管理(1.2W字详细讲解)

目录 RTT线程管理 线程管理特点 线程工作机制 线程控制块 线程属性 线程状态之间切换 线程相关操作 创建和删除线程 创建线程 删除线程 动态创建线程实例 启动线程 初始化和脱离线程 初始化线程 脱离线程 静态创建线程实例 线程辅助函数 获得当前线程 让出处…

【LeetCode】446. 等差数列划分II -- 子序列

题目链接 文章目录 1. 思路讲解1.1 dp表的创建1.2 状态转移方程1.3 使用哈希表找到k1.4 初始化1.5 返回值1.6 该题坑爹的一点 2. 代码编写 1. 思路讲解 我们要知道以某个位置为结尾的子序列的数量&#xff0c;可以通过它的以上一位置的为结尾的子序列的数量得知&#xff0c;也…

css3 hover border 流动效果

/* Hover 边线流动 */.hoverDrawLine {border: 0 !important;position: relative;border-radius: 5px;--border-color: #60daaa; } .hoverDrawLine::before, .hoverDrawLine::after {box-sizing: border-box;content: ;position: absolute;border: 2px solid transparent;borde…

Linux第八章之进程概念

一、冯诺依曼体系结构 关于冯诺依曼&#xff0c;必须强调几点&#xff1a; 这里的存储器指的是内存不考虑缓存情况&#xff0c;这里的CPU能且只能对内存进行读写&#xff0c;不能访问外设(输入或输出设备)外设(输入或输出设备)要输入或者输出数据&#xff0c;也只能写入内存或…

加强Web应用程序安全:防止SQL注入

数据库在Web应用程序中存储和组织数据时起着至关重要的作用&#xff0c;它是存储用户信息、内容和其他应用程序数据的中央存储库。而数据库实现了高效的数据检索、操作和管理&#xff0c;使Web应用程序能够向用户提供动态和个性化的内容。然而&#xff0c;数据库和网络应用程序…