当前位置: 首页 > news >正文

vue3与ue5通信-工具类

工具

ue5-simple.js

/*** UE5 通信工具* 两个核心方法:发送消息和接收消息*/// 确保全局对象存在
if (typeof window !== 'undefined') {window.ue = window.ue || {};window.ue.interface = window.ue.interface || {};
}/*** 生成 UUID*/
function generateUUID() {return "10000000-1000-4000-8000-100000000000".replace(/[018]/g, function (t) {return (t ^ (crypto.getRandomValues(new Uint8Array(1))[0] & (15 >> (t / 4)))).toString(16);});
}/*** 方法1:发送字符串给 UE5* @param {string} message - 要发送的字符串消息* @param {string} eventName - 事件名称(可选,默认为 'web_message')*/
export function send2Ue(message, eventName = 'web_message') {try {console.log('发送消息给UE5:', message);// 检查是否在 UE5 环境中if (typeof window !== 'undefined' && typeof window.ue === 'object' && typeof window.ue.interface === 'object' && typeof window.ue.interface.broadcast === 'function') {// 直接使用 UE5 的 broadcast 接口window.ue.interface.broadcast(eventName, message, '');return true;} return false} catch (error) {console.error('发送消息给UE5失败:', error);return false;}
}/*** 方法2:接收 UE5 发送的消息* @param {Function} callback - 接收到消息时的回调函数* @returns {Function} 取消监听的函数*/
export function receiveFromUe(callback) {if (typeof callback !== 'function') {console.error('receiveFromUe: callback 必须是一个函数');return () => {};}console.log('开始监听UE5消息');// 创建一个唯一的监听器IDconst listenerId = generateUUID();// 将回调函数注册到全局对象if (typeof window !== 'undefined') {window.ue.interface = window.ue.interface || {};window.ue.interface[listenerId] = callback;}// 监听 URL hash 变化(兼容模式)const hashChangeHandler = (event) => {try {const hash = window.location.hash.substring(1);if (hash) {const decodedHash = decodeURIComponent(hash);const data = JSON.parse(decodedHash);// 如果是来自UE5的消息if (Array.isArray(data) && data.length >= 2) {const [eventName, message] = data;callback({eventName,message,timestamp: Date.now()});}}} catch (error) {// 忽略解析错误,可能不是UE5的消息}};// 添加事件监听器if (typeof window !== 'undefined') {window.addEventListener('hashchange', hashChangeHandler);}// 返回取消监听的函数return function unsubscribe() {console.log('停止监听UE5消息');// 移除全局回调if (typeof window !== 'undefined' && window.ue.interface) {delete window.ue.interface[listenerId];}// 移除事件监听器if (typeof window !== 'undefined') {window.removeEventListener('hashchange', hashChangeHandler);}};
}/*** 检查是否在 UE5 环境中* @returns {boolean}*/
export function isInUE5() {return typeof window !== 'undefined' && typeof window.ue === 'object' && typeof window.ue.interface === 'object' && typeof window.ue.interface.broadcast === 'function';
}// 默认导出
export default {send2Ue,receiveFromUe,isInUE5
};

使用

send2Ue(‘这里是发送的内容-只能是字符串’, ‘发送的事件’);

import { send2Ue, receiveFromUe, isInUE5 } from '@/utils/ue5-simple.js'// 发送 token 给 UE5
function sendTokenToUE5(token) {try {console.log('准备发送 token 给 UE5:', token);// 发送 tokenconst success = send2Ue(token, 'user_login_token');if (!success) {proxy.$modal.msgError('连接 UE5 失败');}} catch (error) {proxy.$modal.msgError('发送 token 给 UE5 时出错:');}
}// 检查 UE5 环境
onMounted(() => {isInUE5();// 开始监听来自 UE5 的消息const unsubscribe = receiveFromUe((data) => {console.log('收到来自UE5的消息:', data);});// 组件卸载时清理监听器onUnmounted(() => {unsubscribe();});
});
http://www.dtcms.com/a/294394.html

相关文章:

  • [C/C++内存安全]_[中级]_[安全处理字符串]
  • ctfshow pwn40
  • 保护板测试仪:守护电池安全的“幕后卫士”
  • 关于SPring基础和Vue的学习
  • Docker 容器中的 HEAD 请求缺失 header?从 Content-MD5 缺失聊起
  • 超声原始数据重构成B扫成像的MATLAB实现
  • 【AI News | 20250722】每日AI进展
  • now能减少mysql的压力吗
  • 【Android】用 ViewPager2 + Fragment + TabLayout 实现标签页切换
  • linux性能调整和故障排查
  • LeetCode热题100--24. 两两交换链表中的节点--中等
  • Linux文件——Ext2文件系统(3)_软硬链接
  • Ubuntu 1804 编译ffmpeg qsv MediaSDK libva 遇到的问题记录
  • #Linux内存管理# 详细介绍madvise函数的工作原理
  • Elasticsearch(ES)安装
  • 分布式电商系统:缓存策略、负载均衡与容灾方案
  • 解决 Electron 中 window.open 打开新窗口的各种“坑”
  • Python 程序设计讲义(6):Python 的基本用法——运算符与表达式
  • API 汇总:ONLYOFFICE 文档最近更新
  • 背包DP之0/1背包
  • 11-1 浅层神经网络及计算前向传播
  • 局部重要性注意力LIA,通过区域重要性图与门控机制实现高阶信息交互,自适应增强有用特征、抑制冗余信息,平衡模型性能与效率。
  • VR-Doh: 革新3D建模的虚拟现实体验
  • DPVR亮相青岛品牌日,崂山科创力量引领AI眼镜新浪潮
  • 基于PLC的轨检小车控制器设计
  • .NET-键控服务依赖注入
  • 【实战】Dify从0到100进阶--文档解读(13)API前端再开发
  • 苍穹外卖DAY11
  • 【LeetCode数据结构】栈和队列的应用——设计循环队列问题详解
  • 【后端】FastAPI的Pydantic 模型