HarmonyOS 鸿蒙Next团结引擎交互
HarmonyOS 鸿蒙Next团结引擎交互
背景说明
当前关于团结引擎与鸿蒙系统通信的开发资料较为零散,官方文档存在不匹配情况。本文旨在提供一个完整的开发实例,帮助开发者快速实现团结引擎与鸿蒙系统的通信功能。
环境配置
最新版团结引擎已自动配置OpenHarmony SDK路径,无需手动设置。
关键开发要点
1. 鸿蒙插件目录结构
- 必须在Assets目录下创建
Plugins/OpenHarmony
文件夹存放插件
2. 注册函数规范
注册函数命名格式必须为:“Register”+插件名称
基本示例:
export class ClassObjectTest {
intFunc(a, b) {
return a + b;
}
}
export function RegisterTestClass() {
var register = {}
register["ClassObjectTest"] = new ClassObjectTest();
return register;
}
3. 文件类型注意事项
官方文档存在两个版本说明:
- 插件可使用
.tslib
、.ts
或.ets
扩展名,但必须放在Plugin/OpenHarmony
目录下 - 在
Plugins/OpenHarmony
下可创建.etslib
插件导出类,并能直接引入.ets
文件
实际开发建议:
- 使用
.etslib
作为插件主文件 - 将业务类分离到
.ets
文件中 - 在
.etslib
文件中进行注册
4. 通信实现方案
团结引擎提供了两种与鸿蒙通信的方式:
方案一:Callback回调方式(推荐)
Unity端代码:
using UnityEngine;
class CallbackScript : MonoBehaviour
{
private void Start()
{
OpenHarmonyJSObject openHarmonyJSObject = new OpenHarmonyJSObject("ClassObjectTest");
OpenHarmonyJSCallback Callback = new OpenHarmonyJSCallback(CallbackFunc);
openHarmonyJSObject.Call("intFunc", Callback);
}
private string CallbackFunc(params OpenHarmonyJSObject[] args)
{
if(args.Length == 0 || args[0] == null) {
return "{\"error\":\"Invalid arguments\"}";
}
OpenHarmonyJSObject result = args[0];
Debug.Log($"CallbackFunc: {result.Get<int>("value")}");
return "{\"status\":\"success\"}";
}
}
鸿蒙端代码:
ClassObjectTest.ets
import { hilog } from '@kit.PerformanceAnalysisKit';
import { Callback } from '@kit.BasicServicesKit';
interface CallBackInterface {
value: number;
}
export class ClassObjectTest {
test(): Promise<number> {
hilog.info(0xFF00, "测试11:", `${JSON.stringify(globalThis.context)}`);
return new Promise(resolve => {
hilog.info(0xFF00, "测试,调用promise函数:", '执行test');
resolve(666)
})
}
async intFunc(callback: Callback<CallBackInterface>) {
const result = await this.test();
callback({ value: result as number });
}
}
TestClass.etslib:
import { ClassObjectTest } from './ClassObjectTest';
export function RegisterTestClass(): ESObject {
let register: ESObject = {}
register["ClassObjectTest"] = new ClassObjectTest();
return register;
}
方案二:tuanije.so发送message(我们unity开发说不推荐,如果有需要不好找的可以回帖我再加上)
更多关于HarmonyOS 鸿蒙Next团结引擎交互的实战教程也可以访问 https://www.itying.com/category-93-b0.html
鸿蒙Next的团结引擎是鸿蒙系统的核心交互框架,基于ArkTS/TypeScript实现,提供高效的多设备协同能力。它采用分布式软总线技术,支持跨设备任务迁移和统一交互协议。引擎内置原子化服务调度机制,可实现应用的无缝流转。在UI渲染方面,采用声明式开发范式,通过ArkUI实现高性能界面渲染。团结引擎还集成AI能力,支持意图识别和智能交互。其事件处理机制采用统一的消息队列模型,确保低延迟响应。
更多关于HarmonyOS 鸿蒙Next团结引擎交互的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
关于HarmonyOS Next与Unity引擎的交互开发,关键点总结如下:
- 目录结构必须规范:
- 插件必须放在Assets/Plugins/OpenHarmony目录下
- 建议使用.etslib作为主文件,业务逻辑分离到.ets文件
-
注册函数命名必须遵循"Register"+插件名称的格式,如示例中的RegisterTestClass
-
推荐使用Callback回调方案进行通信:
- Unity端通过OpenHarmonyJSObject和OpenHarmonyJSCallback实现调用
- 鸿蒙端需要实现Callback接口处理异步返回
- 使用Promise处理异步操作更佳
- 调试技巧:
- 鸿蒙端可使用hilog.info输出日志
- Unity端通过Debug.Log查看回调结果
- 注意参数校验和错误处理
当前示例已经展示了最常用的Callback方案,这种异步通信方式能更好地处理跨平台调用。如需使用其他方案,建议先评估具体业务场景需求。