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.pswp.cn/news/922060.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/922060.shtml
英文地址,請注明出處:http://en.pswp.cn/news/922060.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

在kotlin中如何使用像java中的static

在 Kotlin 中,沒有直接的 static 關鍵字,但有幾種等效的方式來實現 Java 中靜態成員的功能: 1. 伴生對象 (Companion Object) - 最常用 class MyClass {companion object {// 靜態常量const val STATIC_CONSTANT "constant value"…

如何在 Spring Boot 中指定不同的配置文件?

介紹 Spring Boot 提供了多種方式來管理和加載配置文件,特別是在多環境配置下,比如開發、測試和生產環境。通過指定不同的配置文件,可以靈活地調整應用程序的行為,以適應不同的需求。本文將介紹在 Spring Boot 中如何指定使用不同…

在centOS源碼編譯方式安裝MySQL5.7

一、前言 在生產環境中部署數據庫時,很多人會選擇直接使用 yum/apt 包管理器 安裝 MySQL,這樣簡單快速,但缺點是版本受限,靈活性不足。對于需要指定版本、啟用特定編譯參數或優化的場景,源碼編譯安裝 MySQL 就顯得非常…

探討Hyperband 等主要機器學習調優方法的機制和權衡

本篇文章Master Hyperband — An Efficient Hyperparameter Tuning Method in Machine Learning深入探討了Hyperband這一高效的超參數調優方法。文章的技術亮點在于其結合了多臂老虎機策略和逐次減半算法,能夠在大搜索空間中快速剔除表現不佳的配置,從而…

Mysql:InnoDB 關鍵特性

目錄 一、插入緩沖(Change Buffer)→ 快遞驛站的 “臨時存放區” 二、兩次寫(Double Write)→ 重要文件的 “備份存檔” 三、自適應哈希索引(AHI)→ 圖書館的 “熱門書快捷查找區” 四、異步 IO&#x…

STM32-----SPI

SPI簡介SCK:和I2C中SCL的時鐘線一個作用,都是在高電平拿出數據,在低電平寫數據MOSI:主機輸出從機輸入MISO:主機輸入從機輸出,只有當對應從機的SS為低電平,從機的MISO引腳才能設置推挽輸出,當從機SS為高電平時&#xff…

華為考試:HCIE數通考試難度分析

隨著信息技術的飛速發展,網絡技術已成為支撐各行各業運轉的重要基礎,市場對高水平網絡技術人才的需求持續增長。HCIE作為華為認證體系中的最高級別認證,代表了網絡技術領域的專業頂尖水平。本文將對HCIE數通認證的考試內容、難度及備考策略進…

一些常用的激活函數及繪圖

深度網絡的一些常用激活函數,并通過matplot繪制出來: import matplotlib.pyplot as plt import numpy as npdef relu(x):return np.maximum(0, x)def leaky_relu(x, alpha0.01):return np.where(x > 0, x, alpha * x)def gelu(x):return 0.5 * x * (1…

AE蘋果手機iPhone 17展示動畫片頭模板 App Promo Phone 17 Pro

專為 App 發布會、電商促銷、新品宣傳 打造的 iPhone 17 Pro 動畫展示 AE 模板。 4K 超清分辨率 26 張可替換照片位,無需第三方插件,拖拽即可輸出專業級手機宣傳片。 核心亮點 4K 超清:38402160 分辨率,大屏投放與社媒高清壓縮無…

基于Python的云原生TodoList Demo 項目,驗證云原生核心特性

以下是一個基于 Python 的云原生 TodoList Demo 項目,涵蓋 容器化、Kubernetes 編排、CI/CD、可觀測性、彈性擴縮容 等核心云原生特性,代碼簡潔且附詳細操作指南,適合入門學習。項目概覽 目標:實現一個支持增刪改查(CR…

go 日志的分裝和使用 Zap + lumberjack

自帶的log無法滿足 按大小輪轉 ,按天數清理舊日志 ,自動壓縮 ,限制備份數量 ,防止磁盤寫滿 ,生產環境推薦 等 使用 Zap lumberjack package mainimport ("go.uber.org/zap""go.uber.org/zap/zapcore&q…

【.Net技術棧梳理】01-核心框架與運行時(CLR)

文章目錄1 .NET Runtime(CLR-公共語言運行時)1.1 中間語言 IL1.1.1 從源代碼到通用中間語言(IL)1.1.2 運行時加載:CLR登場1.1.3 核心步驟:即時編譯 (JIT Compilation)1.1.4 執行與內存管理(GC&a…

Claude Code 平替:OpenAI發布 Codex CLI ,GPT-5 國內直接使用

openai推出的命令行編程工具codex已經可以使用最新 GPT-5 模型,擁有可媲美 Claude Code 的 AI 編碼能力。本文將指導你在 Windows 系統上部署原生的 Codex CLI 程序,并接入超低價中轉 API,讓你在國內直接用上超高性價比的 OpenAI Codex CLI 應…

在VS2022的WPF仿真,為什么在XAML實時預覽點擊 ce.xaml頁面控件,卻不會自動跳轉到具體代碼,這樣不方便我修改代碼,

在VS2022的WPF仿真,為什么在XAML實時預覽點擊 WpfApp1\FunctionalModule\08Replace\Replace.xaml頁面控件,卻不會自動跳轉到具體代碼,這樣不方便我修改代碼,

Git Bash 別名

有些常用的指令參數非常多,每次都要輸入好多參數,我們可以使用別名。Linux 系統中很多 shell,包括 bash,sh,zsh,dash 和 korn 等,不管哪種 shell 都會有一個 .bashrc 的隱藏文件,它就…

Centos7部署ceph存儲

一、準備5臺centos7主機 node節點雙網卡&#xff08;1個內部檢測&#xff0c;1個外部使用&#xff09;node節點都添加新網卡關閉防火墻和上下文都需要添加hosts文件都需要cat > /etc/hosts << EOF > 127.0.0.1 localhost localhost.localdomain localhost4 loca…

2025.9.10總結

今日感悟&#xff1a;刷到00后下班去菜市場撿菜的熱點視頻&#xff0c;確實挺有意思&#xff0c;不得不說&#xff0c;又省錢又好玩。雖然每天晚上能免費領個25塊錢的水果回去&#xff0c;但確實沒有什么新鮮感了。別人下班還能撿撿菜放松下&#xff0c;我下班&#xff0c;除了…

【數據結構與算符Trip第2站】稀疏數組

稀疏sparsearray數組 什么是稀疏數組&#xff1f; 稀疏數組是一種特殊的數據結構&#xff0c;用于高效存儲和表示大部分元素為零&#xff08;或默認值&#xff09;的數組。它通過只存儲非零元素的位置和值來節省內存空間。是一種壓縮數組。 實現原理 在Go語言中&#xff0c;稀疏…

Sub-GHz無線收發單片機,低功耗物聯網通信的硬件“基石”

隨著物聯網應用持續向規模化部署、廣域化覆蓋與高效化協同邁進&#xff0c; 作為IoT終端設備實現無線交互的核心通信單元之一——Sub-GHz無線收發單片機&#xff08;Sub-GHz射頻收發芯片與單片機高度集成&#xff09;已成為系統設計中進一步簡化外圍元件數量、縮小硬件體積、降…

用Typescript 的方式封裝Vue3的表單綁定,支持防抖等功能

在 Vue3 中結合 TypeScript 封裝表單綁定方案時&#xff0c;需要綜合考慮類型安全、功能擴展性和開發體驗。以下是一個包含防抖功能、支持多種表單控件、具備完整類型推導的封裝方案&#xff0c;全文約 2300 字&#xff1a; 方案設計思路 組合式函數封裝&#xff1a;使用 Vue3 …