UUG杭州站 | 团结引擎1.5.0 OpenHarmony新Feature介绍

news2025/5/18 22:37:15

PPT下载地址:https://u3d.sharepoint.cn/:b:/s/UnityChinaResources/EaZmiWfAAdFFmuyd6c-7_3ABhvZoaM69g4Uo2RrSzT3tZQ?e=2h7RaL

在2025年4月12日的Unity User Group杭州站中,Unity中国OpenHarmony技术负责人刘伟贤带来演讲《团结引擎1.5.0 OpenHarmony新Feature介绍》。

今天带来关于我们在OpenHarmony平台上的一些更新,我会着重介绍团结引擎从1.4.X到1.5.0,在OpenHarmony上做了哪些东西。

OpenHarmony平台基本介绍

首先用一张图简单地表达OpenHarmony、HarmonyOS以及HarmonyOS NEXT的关系。

其实从很早期开始,OpenHarmonyOS就已经是基于OpenHarmony系统内核打造的,当然它本身还与一部分AOSP(安卓)捆绑在一起,这是以前的鸿蒙系统。

OpenHarmony是鸿蒙系统的底座和内核,在新的HarmonyOS NEXT版本里把安卓部分剔除了。我们从2023年就已经开始在适配OpenHarmony系统,到今天为止已经经过了一年多的开发。我们基本上把系统的能力已经全面适配,而且也一直持续地跟进OpenHarmony SDK的适配。

同时,我们在无缝迁移方面做了很多努力,希望能够让很多原有项目快速触达到这个新平台。

我们在OpenHarmony平台上支持直接读取安卓平台的AssetBundle,同时在切换平台时,我们的OpenHarmony平台会无缝将贴图压缩格式读取过来。所以大家如果已经有针对安卓和iOS的成熟项目,现在要切到OpenHarmony的话,只要打开团结引擎这个项目,再切换一下平台去构建,就能直接迁移到这个平台上了。而且,我们还提供了特有的Package的支持。

目前,我们已经有30多款多个品类的游戏移植到了开源鸿蒙平台。不管是MMO、RPG,还是三国杀、捕鱼、跑酷这类轻量级、中重度,或大型游戏,都能够通过团结引擎无缝迁移到开源鸿蒙平台。

因为这一平台的发展速度实在太快了,它的SDK更新迭代也非常快,所以开发者通常都会问我,到底选用哪个团结引擎的版本,或者选用哪个SDK的版本,能够更好地适配这个平台?

我简单地通过这一张图展示了我们整个SDK的对应关系。

从1.0.0开始,我们每一个大版本都在更新SDK。1.5.0版本支持最新的SDK 5.0.2,也就是API 14版本。如果你准备进入或者马上要有项目进入这个平台,推荐大家都选用我们最新的版本,因为这适配了最新的SDK。

从1.4.X到1.5.0

在SDK 5.0之前的版本,可以像安卓一样直接点build得到一个API,并且装在任意一台手机上。但在最新的SDK中,在没有任何证书的情况下,没有办法直接把它build and run到这个设备上。

这就意味着在OpenHarmony平台上,整体发展趋势会越来越趋向于iOS,系统的开放程度可能会与苹果更相近。在这次SDK版本中,大家如果想要把构建后的应用装到手机上,必须要先申请证书,在Editor里我们也提供了这样的配置项,与安卓基本上是一样的keystore的配置界面,大家把从网站上申请的证书配置到这个界面里,就可以直接一键build出安装包,然后装到你的设备上。

在新SDK版本中还有很多变更,一个最重要的变更是它会要求更多地使用ETS。

之前在OpenHarmony上主要的胶水代码语言与安卓不一样,安卓是Java,但在OpenHarmony上是TypeScript(TS)。TS是一种动态语言,它为了提升性能和安全性推出了ETS,ETS做的是把一些动态语言的特性进行了改进,例如把它改成强类型,把很多动态语言本来很灵活的特性固化,通过编译器的优化达到更好的性能。

所以在新的SDK版本里,OpenHarmony会要求胶水层的代码尽可能全部用ETS。上图左边是之前老的适配平台的胶水代码,都是“.ts”后缀,但新的版本里已经从“.ts”后缀全部切换成“.ets”后缀,更加安全,运行效率更加高。

另外还有一点是,OpenHarmony SDK 5.0.2的SDK本身可能有一些问题,导致现在无法直接Build And Run。这个问题我们也已经反馈给厂商,他们会在后续版本快速修复。同时,大家可以在这个新版本里使用Commnadline Tools里的SDK来避免这个问题。

这都是SDK5.0.2之后变更的影响,接下来我们介绍团结引擎在这些部分的主要更新。

第一,贴图压缩格式继承。在老项目迁移时有很多问题,例如从安卓平台切换到OpenHarmony平台,原来在安卓平台里所有的setting到OpenHarmony里都变成了default setting。

这不利于我们将一个老的安卓应用快速迁移到新平台,所以我们做了改进,在导入这些老项目的时候,当你切换OpenHarmony平台,它会自动把安卓平台这些texture settings全部写到OpenHarmony平台上。

其次,在这个版本里我们还做了很多系统接口的调用优化。因为在OpenHarmony早期版本里,很多系统接口并没有在Native层开放,更多在TS层。跨语言调用一直以来都是一个性能开销的大头,在后面的这些版本里,OpenHarmony的SDK开放了更多Native接口,所以我们的引擎可以直接在C++层直接调用到它的Native接口。

这里列举了其中的一些例子,例如DisplayInfo、Sensor、DeviceInfo等,频繁地获取一些与设备、系统交互的接口,然后从TS接口转到原生接口,能够大大地提升整体的调用效率。

最后,我们为了方便大家在打包项目的时候进行配置或者自定义,我们在这个版本中推出自定义支持Ability文件,这个ability就相当于安卓层面的activity。

以前如果你要去改一个UnityPlayerActivity,可能只能export project到安卓studio里改。但现在如果你已经有一个自己写好的UnityPlayerActivity或者团结PlayerActivity,可以直接通过我们的Editor工具进行替换。

我们也支持了Module.json5,Module.json5也是OpenHarmony的一个配置文件,类似于安卓的Manifest,但是它没有配置文件与配置文件中的合并功能,我们在Editor里把这部分功能进行了完善。大家可以通过我们的Editor方便地自定义这些平台相关模板。

最后,我们在这个版本里也做了一个原来没有的功能,就是支持命令行的传参。

在这个版本里,我们可以通过hdc的命令,去hdc shell,然后aa start。这个命令行与安卓有点像,但hdc就像安卓的adb,命令其实都一样。如果通过他们的DevEco Studio,即IDE工具,大家可以通过配置面板将这个启动的命令行参数配置进去。

另外,在这个版本里,我们还针对VSync做了优化。

在早期的系统版里,VSync的支持比较弱,而引擎帧与帧之间的计算基本上还是依赖引擎,根据系统获取的时间进行帧之间的时间运算。在新系统版本里,他们开放了更多VSync接口回调,我们把这一部分系统能力对接到了引擎里。所以我们能够非常好地对齐系统的VSync信号。

这样游戏在OpenHarmony平台上帧率会更加平滑。从这张图可以看到,30帧的时候,基本上每隔一个VSync就可以对应一个引擎的上频。

此外,在之前的版本里,我们的游戏最多支持60帧,但是在1.5.0的版本上已经支持高刷了。

我们在新的版本里,可以支持高达90FPS或120FPS。开启自定义绘制帧率很简单,只要关闭垂直同步,设置targetFrameRate为90或者120,就能达到高刷帧率。如果targetFrameRate<0的话,它将使用跟安卓一样的设置,默认是30FPS。

除此以外,我们在OpenHarmony平台上对new input system进行了更加完善的支持,补全了之前部分缺失逻辑,特别在平板或者其他设备的输入上。

最后,我们还有一个非常重要的更新,在OpenHarmony平台上支持像安卓一样的UAAL的模式,也就是Used As A Library。

这对于所有的应用开发者都是非常重要的功能,意味着我们可以很容易把一个3D引擎通过模块化放到一些原生的应用上。

在OpenHarmony底下左边有一个开发的tad视图,右边是一个编译后的包视图。我们在早期适配时,更多是直接粗暴地把我们所有代码塞到一个Entry Module里,它基本上和所有的应用业务或逻辑都是混淆在一起的,这不利于原生应用的直接接入。

所以在1.5.0版本里,我们把这一块单独全部拎出来做了一个新的Module,叫TuanjieLib。

可以看到左边是原有的结构,它基本上在entry module下,把所有东西都塞在里面。但现在我们除了entry module外,还有一个TuanjieLib module。有了这个Module,我们就可以直接把这一整块Module拷到其他一些原生的3D应用里面去。

而且,我们已经把所有的控件都做了封装和改进。对于所有的开发者来讲,只需要把Module拷到原生的ability project里,并且在这个配置文件里把这个依赖加上,就可以在页面index的ETS上直接把TuanjiePlayer View加上。这样你就完成了一个3D player的接入,就能够让原生应用得到一个3D的能力。

最后,我们对ETS胶水代码做了大量的重构,提供了更加便利的Module注册方式。我们也有了更加统一的C#/ETS的跨语言调用。特别是我们在做ETS时,需要关注线程间的调用能力,因为我们的引擎是跑在另一条线程上的,它本身的UI又在一条UI线程上。从UI线程到我们引擎的主线程,中间会有非常多线程间的调用能力。

我们提供了一个叫POST_MESSAGE_TO_HOST和POST_MESSAGE_TO_WORKER。POST_MESSAGE_TO_HOST就是send message to host,host就是我们的UI或者main线程,指应用本身的主线程;send message to worker,这个worker就是我们的tuanjie main的线程。

接下来再介绍一下OpenHarmony专有的两个Package。

第一个Package叫OpenHarmony SDK Kit Package,早期的SDK Kit的Package基本上只涵盖登录和游戏服务,涵盖了API和推送。在最新版本的SDK Kit Package里,我们把包括消息通知、ADS的能力都完整地放到了SDK Kit Package里。所以大家如果想到这个平台,但是TS、ETS对大家来讲有一定的学习成本,可以下载这个Package,里面有我们封装好的一系列C# API,也有一些内置的Demo Scene,可以通过这个Demo Scene快速完成这个平台SDK的接入工作。

下面我们可以通过一个视频来看一下,这是真机实录的视频。

看到的这些demo和样例,都可以通过SDK Kit Package来提供,所以把SDK Kit Package装到你的项目里,就可以把这些Demo Scene build出来,看到里面怎么样使用C#接口,完成平台的账号登录、内购、广告、推送、消息提示等等能力。

另外一个专有的Package叫OpenHarmony Hilog Package。这个Package更多是针对开发者的,能够通过Editor直连真机,在真机里面实时看log。

另外,如果出现闪退,我们可以提供一个工具帮你还原堆栈,同时还支持显示实时内存占用,还可以抓取ArkUI的Dump。这个工具可以把整个应用UI的Layout都Dump下来,然后看到里面的Layout层级到底是什么样的。

白色的都是我们最早的版本提供的能力,在新的版本里面,我们提供了Native Performance Tools的支持。我们把一系列这个平台特有的真机profiling工具都集成在Editor里,可以拿到真实CPU的用量、电池的用量、GPU的用量等数据。

下面我们通过两个视频,来看一下OpenHarmony Hilog Package能做的事情。

第一个是直接连接真机,查看log,还支持筛选Bug level,支持自定义查询。这里还有Stacktrace Utility,可以快速把一个闪退的堆栈进行还原,最后还有一个实时内存占用的工具,查看这一部分的内存状况,而这些都是基于真机获取的一些信息。

最后,这里面是dump出来的ArkUI的一个Dump,可以看到整个layout到底是怎么样的。

下面一个视频,展示了Hilog Package里面关于Native Performance的一些功能,它也需要连接真机,可以拿到Device name、电量、温度、网络等信息。同时还新增了一个Performance界面,可以将GPU Usage、GPU Frequency这些信息都抓取到,这意味着大家不用使用原生工具,就可以获得同样的体验,而这些东西都在这个Package里可以使用。包括一些特定时刻的详细数据,都能够很详细地展开。大家只需要在Package Manager里面搜索Hilog,即可下载体验。

你们的声音都很重要

对于OpenHarmony这个新平台而言,或者说对于团结引擎而言,你们的声音都非常重要,我们非常需要听到你们的反馈。有了开发者的反馈,我们才能把我们的引擎、我们的工具做得更好。

所以这里我也把反馈的渠道告诉大家。

首先在官方社区里可以直接提问,上图有网址链接,只要贴上OpenHarmony的标签,我本人都会亲自去看。

https://developer.unity.cn/plate/tuanjie-engine

另外,在团结的Editor里面选择Help - Report a Bug也可以进行反馈。通过Report a Bug,可以把大家遇到的任何关于团结引擎的问题提给我们,我们会有相关的Q&A同学尝试复现Bug。一旦能复现,我们就会在未来版本上快速把这些BUG修复掉。

我今天关于OpenHarmony平台的分享就到这里,谢谢大家!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vue3——父子组件通信

在Vue开发中&#xff0c;组件通信是核心概念之一。良好的组件通信机制能让我们的应用更加清晰、可维护。 父传子defineProps defineProps是一个编译时宏&#xff0c;仅在内部可用&#xff0c;不需要显式导入。声明的 props 会自动暴露给模板。 还返回一个对象&#xff0c;其中…

游戏引擎学习第276天:调整身体动画

运行游戏&#xff0c;演示我们遇到的拉伸问题&#xff0c;看起来不太好&#xff0c;并考虑切换到更顶视角的视角 我们开始讨论游戏开发中的一些美学决策&#xff0c;特别是在处理动画方面。虽然我们是游戏程序员&#xff0c;通常不负责设计或艺术部分&#xff0c;但因为这是一…

从开发者角度看数据库架构进化史:JDBC - 中间件 - TiDB

作者&#xff1a; Lucien-卢西恩 原文来源&#xff1a; https://tidb.net/blog/e7034d1b Java 应用开发技术发展历程 在业务开发早期&#xff0c;用 Java 借助 JDBC 进行数据库操作&#xff0c;虽能实现基本交互&#xff0c;但需手动管理连接、编写大量 SQL 及处理结果集&a…

Mipsel固件Fuzzing小记

Mipsel固件Fuzzing小记 0x01 准备 1.1 安装必要工具链 首先需要安装 MIPS 交叉编译工具链和相关依赖&#xff1a; sudo apt-get install -y gcc-mipsel-linux-gnu g-mipsel-linux-gnu binwalk qemu-user-static afl这些工具分别用于&#xff1a;交叉编译、固件解包、二进制…

本土DevOps革命:Gitee如何撬动中国企业的数字化转型新动能

在数字化浪潮席卷全球的背景下&#xff0c;中国企业正面临前所未有的转型压力与机遇。随着《数据安全法》和《个人信息保护法》的全面实施&#xff0c;以及信创产业政策的深入推进&#xff0c;研发工具链的自主可控已成为关乎企业核心竞争力的战略命题。在这一关键赛道上&#…

强化学习入门:马尔科夫奖励过程二

文章目录 前言1、动作2、策略总结 前言 最近想开一个关于强化学习专栏&#xff0c;因为DeepSeek-R1很火&#xff0c;但本人对于LLM连门都没入。因此&#xff0c;只是记录一些类似的读书笔记&#xff0c;内容不深&#xff0c;大多数只是一些概念的东西&#xff0c;数学公式也不会…

JVM 双亲委派机制

一、从 JDK 到 JVM&#xff1a;Java 运行环境的基石 在 Java 开发领域&#xff0c;JDK&#xff08;Java Development Kit&#xff09;是开发者的核心工具包。它不仅包含了编译 Java 代码的工具&#xff08;如 javac&#xff09;&#xff0c;还内置了 JRE&#xff08;Java Run…

uniapp -- uCharts 仪表盘刻度显示 0.9999999 这样的值问题处理。

文章目录 🍉问题🍉解决方案🍉问题 在仪表盘上,23.8变成了 23.799999999999997 🍉解决方案 formatter格式化问题 1:在 config-ucharts.js 或 config-echarts.js 配置对应的 formatter 方法 formatter: {yAxisDemo1: function (

BGP团体属性

团体属性&#xff1a; 1、用于限制BGP路由的传递范围 2、类似于IGP协议中的tag值&#xff0c;用于对BGP路由实现标记。 团体属性的分类&#xff1a; 1、公共团体属性&#xff1a; Internet&#xff1a;默认所有路由都有该属性&#xff0c;具有该属性BGP路由发送给所有的BGP邻居…

Redis——三大策略

过期删除策略 Redis可以对key设置过期时间&#xff0c;因此需要有相应的机制将已过期的键值对删除 设置了过期时间的key会存放在过期字典中&#xff0c;可以用presist命令取消key过期时间 过期字典存储在redisDb结构中&#xff1a; typedef struct redisDb {dict *dict; …

Windows 操作系统使用 Tcping 命令检查目标主机端口是否开放

检查目标主机端口是否开放的方法已经很多了&#xff0c;网络上也有第三方网页版的检查工具&#xff0c;这篇文章给大家介绍一个实用小工具 Tcping 。 一、下载安装 Tcping 命令 Tcping 非 Windows 自带命令&#xff0c;我们需要下载 Tcping 可执行文件&#xff0c;然后将该文…

开源RTOS(实时操作系统):nuttx 编译

开源RTOS&#xff08;实时操作系统&#xff09;&#xff1a;nuttx 编译 手册&#xff1a;Installing — NuttX latest documentation 源码&#xff1a;GitHub - apache/nuttx: Apache NuttX is a mature, real-time embedded operating system (RTOS) Installing The fir…

python打包exe报错:处理文件时错误:Excel xlsx file; not supported

背景&#xff1a;最近用python写一个excel解析工具&#xff0c;然后打包成exe可执行文件的时候&#xff0c;遇到这样的问题 1.在我自己编译器运行是可以正常将上传后的excel进行解析&#xff0c;但是在打包成exe后&#xff0c;就无法正常解析excel 问题排查&#xff1a; 1.切换…

VUE3 -综合实践(Mock+Axios+ElementPlus)

目录 前言 目标 1.工程创建 2.Mock 2.1 配置Mock 扩 展 2.2 定义模拟数据 2.3 创建Mock服务器 3.导入ElementPlus 4.表格页面搭建 5.动态路由跳转 6.详情页面的制作 前言 基于前文 VUE3详细入门&#xff0c;我们对VUE3的基本使用有了初步的了解&#xff0c;下…

NDS3211HV单路H.264/HEVC/HD视频编码器

1产品概述 NDS3211HV单路高清编码器是一款功能强大的音/视频编码设备&#xff0c;支持2组立体声&#xff0c;同时还支持CC(CVBS)字幕。支持多种音频编码方式。该设备配备了多种音/视频输入接口&#xff1a;HD-SDI数字视频输入、HDMI高清输入&#xff08;支持CC&#xff09;、A…

LeetCode热题100--206.反转链表--简单

1. 题目 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5] 输出&#xff1a;[5,4,3,2,1] 示例 2&#xff1a; 输入&#xff1a;head [1,2] 输出&#xff1a;[2,1] 示例 3&…

来一个复古的技术FTP

背景 10年前的老代码&#xff0c;需要升级springboot框架&#xff0c;在升级过程中&#xff0c;测试业务流程里&#xff0c;有FTP的下载业务&#xff0c;不管测试环境如何测试&#xff0c;都没有成功&#xff0c;最后只能自己搭建一个FTP服务器&#xff0c;写一个ftp-demo来测试…

OpenWebUI新突破,MCPO框架解锁MCP工具新玩法

大家好&#xff0c;Open WebUI 迎来重要更新&#xff0c;现已正式支持 MCP 工具服务器&#xff0c;但 MCP 工具服务器需由兼容 OpenAPI 的代理作为前端。mcpo 是一款实用代理&#xff0c;经测试&#xff0c;它能让开发者使用 MCP 服务器命令和标准 OpenAPI 服务器工具&#xff…

TRTC实时对话式AI解决方案,助力人机语音交互极致体验

近年来&#xff0c;AI热度持续攀升&#xff0c;无论是融资规模还是用户热度都大幅增长。2023 年&#xff0c;中国 AI 行业融资规模达2631亿人民币&#xff0c;较2022年上升51%&#xff1b;2024年第二季度&#xff0c;全球 AI 初创企业融资规模为 240 亿美金&#xff0c;较第一季…

Linux安全篇 --firewalld

一、Firewalld 防火墙概述 1、Firewalld 简介 firewalld 的作用是为包过滤机制提供匹配规则(或称为策略)&#xff0c;通过各种不同的规则告诉netfilter 对来自指定源、前往指定目的或具有某些协议特征的数据包采取何种处理方式为了更加方便地组织和管理防火墙,firewalld 提供…