团结云打包

最近在出鸿蒙包,最终去水印需要使用团结云打包,记录一下团结云打包的大概流程

官方文档 欢迎使用团结云开发! | Unity 云开发

需要使用的工具

  1. Tuanjie Devops 团结引擎控制项目和云打包的,以下简称 TD
  2. Platstic SCM 类似git,用于上传本地工程 ,以下简称 PSCM

整体流程

  1. 使用TD添加工程
  2. 将工程上传到PSCM中
  3. 添加工作流和打包脚本
  4. 使用TD触发云打包
  5. TD打包完成后下载制品(导出的鸿蒙工程)
  6. 本地打ab,然后把首包资源拷贝到导出的工程里
  7. 打鸿蒙包
  • 热更新包就直接在本地按原生方式就可以了, 团结云打包只有整包的时候才有用,通过它导出的工程就是没有水印的
  • 大概原理就是把工程上传到PSCM,然后使用TD云打包,团结云会分配一个云打包机,然后把工程拉到本地,然后再执行打包,最终输出的内容(制品)在TD里可以下载

使用TD添加工程

有三种方式,从Git同步、本地同步、Plastichub迁移项目,我使用的是本地同步,其余两种具体方式在官方文档中有。打开TD,登录完成以后,按官方文档操作即可 连接本地项目 | Unity 云开发

将工程上传到PSCM中

使用PSCM上传工程即可,和Git类似,但是要注意看下忽略列表,可能会把工程的某些文件给忽略了,这个有点坑

添加工作流和打包脚本

打包脚本按文档来即可

团结云打包的工作流配置文件,我这里打的是鸿蒙包,使用的鸿蒙配置文件

配置文件中前面可以都不用修改,在构建的步骤里可以根据自己的需求来修改

name: Devops Build
# 更多有关构建工作流的信息,请参考 <https://devops.u3dcloud.cn/help/docs/advanced/yaml>
# 您也可以访问注释中的其它链接来了解更多关于 云构建 action 的使用方法

# 在提交至代码库时触发云构建任务
on: [push]

jobs:
  build:
    name: Build OpenHarmony
    # 为了让工作流可以正常触发,需要指定正确的 runs-on 标签
    # <https://devops.u3dcloud.cn/help/docs/advanced/yaml#%E8%A7%A6%E5%8F%91%E5%B7%A5%E4%BD%9C%E6%B5%81>
    runs-on: windows-server-2022-tuanjie-1.2.6-oh-32c-64g
    steps:
      # 从 Unity Devops Version Control 签出项目 <https://devops.u3dcloud.cn/help/docs/advanced/action#actionscheckout-plasticscm>
      - name: Check out project repository
        uses: actions/checkout-plasticscm@v1
        with:
          path: tjcloudbuild

      # 检查签出内容
      - name: List repository content
        run: ls -l ./tjcloudbuild

      # 构建 <https://devops.u3dcloud.cn/help/docs/advanced/action#actionstj-builder>
      - name: Build project
        uses: actions/tj-builder@v3
        id: build-action
        with:
          targetPlatform: OpenHarmony
          openHarmonyApiVersion: 11
          projectPath: ./tjcloudbuild
          buildMethod: Editor.Build.TuanjieCloudBuild.BuildProject
          customParameters: -自定义参数名称1 自定义参数值1 -自定义参数名称2 自定义参数值2 ....
          buildsPath: ./tjcloudbuild/CloudBuild

      # 检查构建结果是否成功生成
      - name: Check build result
        run: ls -l ${{ steps.build-action.outputs.buildsPath }}

      # 上传制品 <https://devops.u3dcloud.cn/help/docs/advanced/action#actionstj-upload-artifact>
      - name: Upload artifact
        uses: actions/tj-upload-artifact@v2
        with:
          name: Build-${{ steps.build-action.outputs.buildVersion }}
          path: ${{ steps.build-action.outputs.buildsPath }

runs-on: windows-server-2022-tuanjie-1.2.6-oh-32c-64g

    name: Build OpenHarmony
    # 为了让工作流可以正常触发,需要指定正确的 runs-on 标签
    # <https://devops.u3dcloud.cn/help/docs/advanced/yaml#%E8%A7%A6%E5%8F%91%E5%B7%A5%E4%BD%9C%E6%B5%81>
    runs-on: windows-server-2022-tuanjie-1.2.6-oh-32c-64g

这里需要注意,windows-server-2022-tuanjie-1.2.6-oh-32c-64g 表示你要选择的云打包机配置,一定要先看这个,不然可能会出现云打包机不支持你本地的团结版本 云构建服务器 | Unity 云开发

actions/tj-builder@v3

# 构建 <https://devops.u3dcloud.cn/help/docs/advanced/action#actionstj-builder>
      - name: Build project
        uses: actions/tj-builder@v3
        id: build-action
        with:
          targetPlatform: OpenHarmony
          openHarmonyApiVersion: 11
          projectPath: ./tjcloudbuild
          buildMethod: Editor.Build.TuanjieCloudBuild.BuildProject
          customParameters: -自定义参数名称1 自定义参数值1 -自定义参数名称2 自定义参数值2 ....
          buildsPath: ./tjcloudbuild/CloudBuild

主要就是这一段,with下方的参数中可以填哪些在上方文档里有说明,其余参数可以参照官方文档按需填写,这里主要说一下比较重要的两个参数

  • buildsPath:在这个路径里的内容在云打包结束后我们可以下载,比如我们记录的版本文件什么的就需要放到这个目录下,在打包完成后再手动上传到PSCM中,便于下次打包使用。打包完成的更新包等等,也需要修改目录到这个文件下,这样在打包完成后才能下载到本地。个人测试后推荐方式为都放到统一目录,最后结束的时候拷贝到buildsPath目录下
  • customParameters:格式上放有,我之前的打包方式是通过jenkins,会有一堆环境变量需要获取,在云打包上就只能通过这里来传递,比如以下两个参数
set BuildAll=1  是否打整包
set UpdateApp=0 是否打兼容更新包

现在改为 customParameters: -BuildAll 1 -UpdateApp 0

实际代码中也需要修改,接入云打包之前就直接使用Environment.GetEnvironmentVariable获取Bat里配置的环境变量,现在需要区分团结云打包

public static string GetEnvVar(string envName, bool isTuanjieCloudBuild)
{
    if (isTuanjieCloudBuild)
        return GetArgValue(envName); 
    
    return Environment.GetEnvironmentVariable(envName);
}

public static string GetArgValue(string arg)
{
    var args = System.Environment.GetCommandLineArgs();
    for (var i = 0; i < args.Length; i++)
    {
        if (args[i].Equals($"-{arg}", StringComparison.OrdinalIgnoreCase) && i < args.Length - 1)
        {
            var value = args[i + 1];
            return value;
        }
    }
    
    return "";
}

actions/tj-upload-artifact@v2

上传制品其实就是buildsPath目录下的内容,上传之后才我们的TD里才能下载

使用TD触发云打包

在把配置文件和打包脚本编写好以后就开始测试云打包了,推荐先用空工程测试,不然特别费时间

TD打包完成后下载制品(导出的鸿蒙工程)

点击即可下载

本地打ab,然后把首包资源拷贝到导出的工程里

每个项目不一样,这个就自己根据实际情况去处理了

打鸿蒙包

通过Deveco手动打包或者鸿蒙命令行工具自动化打包,最终打出来的包就是没有水印的了

### 关于Unity中的敌人实例化 对于创建多个敌人的需求,在Unity中简单复制同一资产并不是最佳实践[^1]。当面对需要大量相同对象的情况时,推荐使用更高效的方法来管理这些游戏物体。 一种常用的技术是对象池(Object Pooling),这可以显著提高性能并减少垃圾回收的压力。通过预先创建一组可重用的对象,并在不再需要时将其返回到池而不是销毁它们,可以在游戏中有效地管理和重复利用资源。 ```csharp using System.Collections.Generic; using UnityEngine; public class EnemyPool : MonoBehaviour { public GameObject enemyPrefab; // 敌人预制体 private List<GameObject> pooledEnemies = new List<GameObject>(); void Start() { InitializePool(); } void InitializePool() { for (int i = 0; i < initialSize; ++i) { var obj = Instantiate(enemyPrefab); obj.SetActive(false); // 初始状态不激活 pooledEnemies.Add(obj); } } public GameObject GetEnemy() { foreach(GameObject go in pooledEnemies){ if (!go.activeInHierarchy){ return go; } } // 如果池内无可用对象,则新增加一个 GameObject newObj = Instantiate(enemyPrefab); pooledEnemies.Add(newObj); return newObj; } } ``` 此脚本展示了如何实现基本的对象池功能,用于动态获取和释放敌人实例。 关于光照效果的学习,可以通过分析具体场景案例深入了解其应用方式[^2]。虽然这段描述主要集中在电影制作上的灯光运用上,但在视频游戏中同样适用类似的原理和技术来进行环境渲染和氛围营造。 至于UI系统的介绍,随着新组件的引入,开发者能够更加便捷地构建图形界面元素,如按钮、文本框等交互控件[^4]。这对于提升用户体验至关重要。 最后提到的是Unity展示柜的信息,它代表了官方举办的各类活动之一,旨在推广最新技术和分享成功案例[^3]。不过这部分内容与技术细节关联不大,更多偏向社区交流方面的话题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值