生命科技城-面包树

前端嵌ue架构


WebInUE前端技术文档

<p>[TOC]</p> <h2>Web与UE的交互</h2> <h3>首先在web端代码的index.html文件中加入下列代码</h3> <pre><code class="language-html">&amp;lt;!DOCTYPE html&amp;gt; &amp;lt;html lang=&amp;quot;en&amp;quot;&amp;gt; &amp;lt;head&amp;gt; &amp;lt;meta charset=&amp;quot;UTF-8&amp;quot; /&amp;gt; &amp;lt;link rel=&amp;quot;icon&amp;quot; href=&amp;quot;./favicon.ico&amp;quot; /&amp;gt; &amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1.0&amp;quot; /&amp;gt; &amp;lt;title&amp;gt;Vite App&amp;lt;/title&amp;gt; &amp;lt;script&amp;gt; // create the global ue4(...) helper function &amp;quot;object&amp;quot; != typeof ue &amp;amp;&amp;amp; (ue = {}), (uuidv4 = function () { return &amp;quot;10000000-1000-4000-8000-100000000000&amp;quot;.replace( /[018]/g, function (t) { return ( t ^ (crypto.getRandomValues(new Uint8Array(1))[0] &amp;amp; (15 &amp;gt;&amp;gt; (t / 4))) ).toString(16); } ); }), (ue4 = (function (r) { return &amp;quot;object&amp;quot; != typeof ue.interface || &amp;quot;function&amp;quot; != typeof ue.interface.broadcast ? ((ue.interface = {}), function (t, e, n, o) { var u, i; &amp;quot;string&amp;quot; == typeof t &amp;amp;&amp;amp; (&amp;quot;function&amp;quot; == typeof e &amp;amp;&amp;amp; ((o = n), (n = e), (e = null)), (u = [t, &amp;quot;&amp;quot;, r(n, o)]), void 0 !== e &amp;amp;&amp;amp; (u[1] = e), (i = encodeURIComponent(JSON.stringify(u))), &amp;quot;object&amp;quot; == typeof history &amp;amp;&amp;amp; &amp;quot;function&amp;quot; == typeof history.pushState //这里与ue通行应该是使用路径路由传参,注意切换history模式会导致刷新白屏。待解决。 ? (history.pushState({}, &amp;quot;#&amp;quot; + i), history.pushState({}, &amp;quot;#&amp;quot; + encodeURIComponent(&amp;quot;[]&amp;quot;))) : ((document.location.hash = i), (document.location.hash = encodeURIComponent(&amp;quot;[]&amp;quot;)))); }) : ((i = ue.interface), (ue.interface = {}), function (t, e, n, o) { var u; &amp;quot;string&amp;quot; == typeof t &amp;amp;&amp;amp; (&amp;quot;function&amp;quot; == typeof e &amp;amp;&amp;amp; ((o = n), (n = e), (e = null)), (u = r(n, o)), void 0 !== e ? i.broadcast(t, JSON.stringify(e), u) : i.broadcast(t, &amp;quot;&amp;quot;, u)); }); var i; })(function (t, e) { if (&amp;quot;function&amp;quot; != typeof t) return &amp;quot;&amp;quot;; var n = uuidv4(); return ( (ue.interface[n] = t), setTimeout(function () { delete ue.interface[n]; }, 1e3 * Math.max(1, parseInt(e) || 0)), n ); })); &amp;lt;/script&amp;gt; &amp;lt;style&amp;gt; * { margin: 0; padding: 0; box-sizing: border-box; } &amp;lt;/style&amp;gt; &amp;lt;/head&amp;gt; &amp;lt;body&amp;gt; &amp;lt;div id=&amp;quot;app&amp;quot;&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;script type=&amp;quot;module&amp;quot; src=&amp;quot;./src/main.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt; &amp;lt;/body&amp;gt; &amp;lt;/html&amp;gt; </code></pre> <h3>web端发送事件给ue4</h3> <pre><code>function SendUE(Message) { ue4(&amp;quot;SendUE&amp;quot;, Message); }</code></pre> <h3>web端接收ue4事件</h3> <pre><code>ue.interface.SendWeb = function(Message) { JSON.stringify(message); };</code></pre> <h2>通信案例</h2> <h3>创建POI</h3> <ul> <li>Web端调用</li> </ul> <pre><code>// 向UE发送‘Hello World’ let msg = &amp;quot;Hello World&amp;quot;; SendUE(msg); // 向UE发送创建POI字段 let msg = {       Command: &amp;quot;CreateCustomPOI&amp;quot;,       Args: {         ID: &amp;quot;CustomPOI&amp;quot;,         Tag: &amp;quot;Video&amp;quot;,         Lat: &amp;quot;30&amp;quot;,         Lng: &amp;quot;120&amp;quot;,       },     }; SendUE(msg); </code></pre> <h3>点击POI回调</h3> <ul> <li>ue发送</li> </ul> <pre><code>{ &amp;quot;Command&amp;quot;: &amp;quot;OnClickCustomPOI&amp;quot;, &amp;quot;Args&amp;quot;: { &amp;quot;ID&amp;quot;: &amp;quot;CustomPOI&amp;quot;, &amp;quot;Tag&amp;quot;:&amp;quot;Video&amp;quot;, &amp;quot;ClickEvent&amp;quot;:&amp;quot;ClickPOI&amp;quot; } }</code></pre> <ul> <li>Web端接收</li> </ul> <pre><code> ue.interface.SendWeb = function (message) {         if (JSON.stringify(message).indexOf('OnClickCustomPOI') === 16) {             alert(message);         }       };</code></pre>

页面列表

ITEM_HTML