团结引擎+Addressable+Instant Game打包抖音小游戏

我们在上一篇文件中讲了团结引擎对接抖音小游戏的情况,链接如下:

团结引擎发布抖音小游戏(十万个坑已踩完) - 威少小二orz - 博客园

这篇我们主要讲加入Addressable+Instant Game之后的问题点。

1、Instant Game打包,Copy对应的CDN地址,请注意这个CDN地址是绑定UOS官方后台的CDN地址,需要在后台开启。

2、在Profile配置如下:

首包资源只能选择Package,目前首包选择CDN打包会有一个文件路径找不到而被中断。

首包前缀可不填,但一般还是填一下,和Instant Game中的CDN地址一致。这是从build里走打包。

另外,还可以从TT的SDK工具上走打包流程,点图上的ByteGame-TT SDK Tools-Build Tool,先点构建WebGL,再点转换WebGL包。

但是我从这里走经常出现打包报错。所以建议使用上面的Build Setting里的Build。

3、https://dummy.dummy.dummy/问题的处理,这个问题是由于adressable的地址没有被instant game自动接管导致的,可能抖音没有进行特殊处理,在微信SDK和最新版的京东SDK里就不会有这个问题。

在Unity里创建一个.cs文件,SkipUnityLogo.cs,不需要挂在任意脚本上,只要放在工程的Assets目录下,

原理是用CDN地址来替换dummy的占位符。

如果你能很好去调整addressable的地址,也就不用管这个问题,最简单的方式是adressable都改为默认地址,这里用CDN的全地址来替换。

如果出现了地址中资源404的情况,是因为CDN那边没有上传或者没有做版本管控,这个在替换地址中去掉release_by_badge/latest这一段即能解决,但我们不要这么做,按正常方式走,接下来会说这个。

复制代码
#if !UNITY_EDITOR
using UnityEngine;
using UnityEngine.Rendering;
using UnityEngine.Scripting;
 using UnityEngine.AddressableAssets;
using UnityEngine.ResourceManagement.ResourceLocations;
/**
 * 跳过unity-logo
 */
[Preserve]
public class SkipUnityLogo
{
    [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSplashScreen)]
    private static void BeforeSplashScreen()
    {
#if UNITY_WEBGL
        Application.focusChanged += Application_focusChanged;
#else
        System.Threading.Tasks.Task.Run(AsyncSkip);
#endif
    }
 
[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)]
private static void FixDouYinAddressablePath()
{
   Debug.Log("启动dummy替换0");
#if UNITY_WEBGL
        Debug.Log("启动dummy替换1");
         Addressables.InternalIdTransformFunc = location =>
        {
            string internalId = location.InternalId;

            // 核心:强制把 dummy 域名删掉
            if (internalId.StartsWith("https://dummy.dummy.dummy/"))
            {
                internalId = internalId.Replace("https://dummy.dummy.dummy/", "https://a.unity.cn/client_api/v1/buckets/xxxxxxxxxxxxxxxxxxxxxxxx/release_by_badge/latest/content/");
            }
             Debug.Log("启动dummy替换2");

            // 修复重复路径问题 StreamingAssets/StreamingAssets
            if (internalId.Contains("StreamingAssets/StreamingAssets"))
            {
                internalId = internalId.Replace("StreamingAssets/StreamingAssets/", "StreamingAssets/");
            }

            return internalId;
        };
         Debug.Log("启动dummy替换3");
#endif
}

#if UNITY_WEBGL
    private static void Application_focusChanged(bool obj)
    {
        Application.focusChanged -= Application_focusChanged;
        SplashScreen.Stop(SplashScreen.StopBehavior.StopImmediate);
    }
#else
    private static void AsyncSkip()
    {
        SplashScreen.Stop(SplashScreen.StopBehavior.StopImmediate);
    }
#endif
}
#endif

4、在UOS的存储桶的页面,下载CLI工具,windows版本。

下载之后,使用命令行打开,

第1步:

在cmd里输入:(根据你的路径去修改)

cd /d C:\Users\admin\Downloads\uas_win_V1.0.9 && uas.exe

第2步输入:

(自己替换xxxx的ID,分别为uos的appid和app secret,uos后台直接复制全命令即可)

uas auth login --uos_app_id xxxxxxxxxx --uos_app_secret xxxxxxxxxxxx

第3步输入:

(xxxxx为你存储桶的ID,也是CDN地址中v1/buckets/后面的一段)

(respath为你build结束后的webgl的目录C:\MyGame\ByteGameOutput\webgl)

uas entries sync --bucket xxxxxxxxxxxxx respath

例:

uas entries sync --bucket xxxxxxxxxxxxx C:\MyGame\ByteGameOutput\webgl

这样会上传你当前的build里的资源,但是没有做版本管理。

第4步:增加版本管理

(xxxxx为你存储桶的ID,也是CDN地址中v1/buckets/后面的一段)

uas releases create --bucket xxxxxxxxxxxxxx --notes "LastestUpload"

这4步上传完成后,就等于资源全部上传完了。

然后用抖音扫码进入游戏,如果CDN上不这么处理,你可能拉不到新资源,每次都拉到旧版。

注意需要填写一下不缓存的资源如下:

json

xml

db

version

相关推荐
Unity官方开发者社区1 年前
团结引擎开源车模 Sample 发布:光照渲染优化 & 动态交互全面体验升级
shader graph·团结引擎·团结引擎1.5
Unity官方开发者社区1 年前
团结引擎 OpenHarmony 平台全面支持 UAAL,实现引擎能力嵌入原生应用
团结引擎·团结引擎1.4·uaal
伊二1 年前
鸿蒙next ui安全区域适配(刘海屏、摄像头挖空等)
华为·harmonyos·鸿蒙·openharmony·团结引擎·huamony next
幽满谷2 年前
Unity3D 太空大战射击游戏
游戏·unity·团结引擎
幽满谷2 年前
团结引擎的安装
团结引擎