UE4开发HTML5遇到的问题

2023-05-16

最近要做一个基于UE4的HTML5仿真项目,没真正做过HTML5的小白,表示很无所畏惧。

首先,找一篇UE4下H5的教程,简单学习一遍:

    安装,环境,项目配置,(打包:不要pak;rendering:移动MSAA 选择NO MSAA;平台:HTML5,Packaging: 勾选Compress File during shipping package),最后下载一个X64的FireFox,或者Chrome。一个个搞下来,觉得已经七七八八了,信心满满。

二、拿个例子(“策略游戏”,又叫:StrategyGame)试验一下,StrategyGame本身不支持H5,不过难不倒我们,且如此来试试:

1、在支持的平台下拉框,勾选HTML5;

2、选择文件-->打包-->HTML5,选择一个目录,就开始等着吧,我这破机器,粗略估计花了20分钟;

3、在上一步选择的目录中,生成一个HTML5目录,进入该目录,找到HTML5LaunchHelper.exe,执行,启动了测试Web服务器,端口默认8000

4、打开FireFox, 浏览器中输入:http://localhost:8000/StrategyGame.html。看到开始下载进度条,稍等几秒钟,就可以开始游戏啦。

三、用NodeJS的Express框架写了一个简易数据提供服务,执行:Node Sat.js。端口在:8081。链接地址:http://127.0.0.1:8081/A。

四、在UE4中,生成一个Actor,在Actor的BeginPlay()中,用Http模块去访问http://127.0.0.1:8081/A,并将结果AddOnScreenDebugMessage(), Alt+P播放一下,正常显示。

这一切都还是挺正常、挺简单的,然鹅,问题还没开始。

五、当我打包成HTML5以后,再测试,哇塞,没结果。后面便开始了我的漫漫探索之路:

       1、可能是UE4的HTML5不支持“HTTP”请求,这个从之前的经验知道,HTML网页是用ajax请求数据的,又一百度,果然后人在说Emscripten,一个用来实现C语言和JavaScript相互调用的家伙,于是一骨脑的学了过了一遍Emscripten,学完了,也会一些你调我,我调你了。

       2、再找一篇JavaScript的快速入门学习一遍,几天下来,基本语法什么的,都弄得差不多了。

      3、于是:就跑到Actor中去,写一个ajax请求吧,于是,便有了:

#ifdef EMSCRIPTEN
extern "C" {
    EM_JS(void, call_alert, (), {
        alert('hello world!');
        //throw 'all done';
    });

    EM_JS(void, getsatcount, (), {
        $.ajax({
          url: "http://127.0.0.1:8081/a",
          data : {
            zipcode: 97201
          },
          success : function(result) {
            //$("#weather-temp").html("<strong>" + result + "</strong> degrees");
                console.log(result);
                //console.log('hello world!');
                //callback(result)
          },
          error : function(result) {
              console.log(result)
          }
        });
    })
}
#endif

void AHttpActor::BeginPlay()
{
    Super::BeginPlay();

#ifdef EMSCRIPTEN
    getsatcount();

#endif
}

4、打包HTML5,漫长的等待之后,结果出来了,还是挺好的。

接下来的问题是,如何把返回的结果回调啊,再度娘吧。。。就在漫无目的的求索中的时候,

突然发现,UE4中有HTML5的实现,有个文件叫:HTML5HTTP.cpp,啊,原来前面的猜测都是错误的吗?

于是,迫不及待的翻了翻UE4的源码:...\Epic Games\UE_4.23\Engine\Source\Runtime\Online\HTTP\Private\HTML5目录

翻完之后,便又有了这一段代码:

void AHttpActor::MyHttpCall()
{
#ifdef EMSCRIPTEN
    TSharedRef<IHttpRequest> Request = TSharedRef<IHttpRequest>(FHTML5PlatformHttp::ConstructRequest());
#else
    TSharedRef<IHttpRequest> Request = Http->CreateRequest();
#endif

    Request->OnProcessRequestComplete().BindUObject(this, &AHttpActor::OnResponseReceived);
    //This is the url on which to process the request
    Request->SetURL("http://127.0.0.1:8081/a");
    Request->SetVerb(TEXT("GET"));
    Request->SetHeader(TEXT("User-Agent"), TEXT("X-UnrealEngine-Agent"));
    Request->SetHeader(TEXT("Content-Type"), TEXT("application/json;charset=utf8"));
    Request->ProcessRequest();

#ifdef EMSCRIPTEN

}

编译,打包成HTML5,浏览器又没出结果,伤心...哪儿错了...

这时,看到代码中有UE_Log(...),就想,这Log到哪儿去了呢,找啊找,原来在浏览器的F12中,唉,绕了一大圈,最后才绕回到超级无敌的F12,在Log中发现了问题:

已拦截跨源请求:同源策略禁止读取位于 http://127.0.0.1:8081/a 的远程资源。

对这个错误又是一无所知,唉,又一番尝试,一番折腾,捣鼓一会客户端,捣鼓一会Nodejs,再捣鼓一会UE,直到看到了这篇文章,https://www.jianshu.com/p/604f6d5b47d2,比较清晰的阐明了CORS的原理,才知道,原来B网站(UE4.StrategyGame),A网站(NodeJS),游戏页面(来自B网站)要访问A网站就存在跨域问题,要允许跨域,是要让A网站允许跨域,OK,明白之后,设置A网站的跨域就可以啦,如下:

//设置跨域访问
app.all('*', function(req, res, next) {
    // 这里应该是来自UE4的网址:http://localhost:8000
    if( req.headers.origin.toLowerCase() == 'http://localhost:8000'
        || req.headers.origin.toLowerCase() == 'http://127.0.0.1:8000' ) {
        //设置允许跨域的域名,*代表允许任意域名跨域
        res.header("Access-Control-Allow-Origin", req.headers.origin);//
    }
    else
        res.header("Access-Control-Allow-Origin", 'http://10.0.20.36:8000');

    res.header('Access-Control-Allow-Headers', "Content-Type");
    res.header("Access-Control-Allow-Methods","PUT,POST,GET,DELETE,OPTIONS");    
    
    // if (req.method.toLowerCase() == 'options')
        // res.sendStatus(200);  //让options尝试请求快速结束
    // else    
    next();
});

最后:再介绍一下抓包工具:Fiddler, 很好用,下载后安装,即可使用,(通过使用代理,监听127.0.0.1:8888),实现抓包。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

UE4开发HTML5遇到的问题 的相关文章

  • 【UE4】DataTable - 数据表

    本文使用 UE 4 26 引擎自带 ARPG 项目 从代码和编辑器两个方面记录一下 UE4 中的 DataTable 也就是数据表的用法 一 DataTable 是什么 DataTable 就是数据表 以下简称 DT 也就是二维的 M 行
  • css改变svg颜色_如何使用CSS混合模式和SVG动态更改产品图像的颜色

    css改变svg颜色 To better explain that title right off the bat here s what we re about to learn and it s easier than you thin
  • ue4_timeline时间轴

    1 给一个cube添加蓝图 需要修改的是z轴方向移动位置 将z轴传入时间轴 时间轴蓝图如下 z轴时间轴修改为 第一个节点 time 0 value 300 物体的z轴初始位置 第二个节点 time 1 value 600 z轴移动300个单
  • 微信H5如何关闭浏览器(如何监听手机的物理返回键)

    一 背景 背景是这样的 该项目进入h5时会通过 location replace xxx 或 location href xxx 跳转到某个地址 该地址会请求获得微信 openId 获取成功后再重定向到h5首页 那么问题来了 重定向会在微信
  • HTML表格

    目录 实例 表格 表格和边框属性 表格的表头 表格中的空单元格 更多实例 表格标签 一个完整的实例 本例涉及到的资源 eg background jpg eg cute gif 可以使用 HTML 创建表格 实例 表格 这个例子演示如何在
  • 网页引用Font Awesome图标

    方法一 demo html
  • 前端基础之ES6

    1 前后端对比 2 ES6 ECMAScript6 0 以下简称ES6 ECMAScript是一种由Ecma国际通过ECMA 262标准化的脚本 是JavaScript语言的下一代标准 2015年6月正式发布 从ES6开始的版本号采用年号
  • 58同城 -- 前端一面

    面我的是一个小哥哥 面试体验挺好的 大概进行了35分钟左右 自我介绍 面试内容 为什么向做前端 怎么学习的前端 本人非科班哈 然后问我项目 直接问项目 没问笔试令我有点意外 问我印象最深的项目 印象最深的功能 遇到的难点 前端存储的区别 C
  • 浏览器主页被篡改360篡改浏览器主页,官方四步最完美解决办法

    以前写过一篇浏览器主页被360篡改成他们的主页的文章 那时真的就是气的直接卸载了360 之后通过修改注册表的方式 将主页修改回来 方法很暴力 由于重做了系统 360又被重新安装了回来 结果和以往一样 我的主页还是被强制修改了 但是这次我冷静
  • 使用h5标签需要兼容,不使用没有标签进行语义化,如何取舍?兼容IE6,7,8,canvas,video

    HTML5已向开发人员提供了很多新的标签 如section nav article header和footer等 这些标签语义化程度高 会被经常使用 但在IE6 IE7 IE8和Firefox 2等老式浏览器中却不能识别和正常使用 很多浏览
  • UE4 制作导出Content目录下某个文件夹内所有模型的六视图并将模型资源文件复制到指定文件夹的插件

    一 新建空白插件 在Bulid cs内加入两个模块 EditorSubsystem UnrealEd PublicDependencyModuleNames AddRange new string Core EditorSubsystem
  • WEB交互界面易用性设计和验收的指导性原则

    随着企业intranet和国际internet的迅速发展 越来越多的工作流程 商务交易 教育 培训 会议和讲座 以及个人消费娱乐都被转移到所谓的万维网 World Wide Web 以下简称WEB 上来了 与此相对应的是交互操作的复杂性越来
  • UE4文字显示乱码“字字字字字字字字”的解决办法

    键盘win R 搜索fonts 2 滑到最底下右键复制 宋体常规简体字 3 复制到ue4项目的字体文件夹中 如下 注意在外部文件处复制 4 回到项目界面 此时右下角会有个弹窗提示是否确认导入 点击导入 然后会弹一个 字体样式导入选项 弹框
  • 大学生简单个人静态HTML网页设计作品 DIV布局个人介绍网页模板代码 DW学生个人网站制作成品下载 HTML5期末大作业 (1)

    HTML5期末大作业 动漫电影主题 电影动漫言叶之庭 4页 带音乐 HTML CSS JavaScript 期末作业HTML代码 学生网页课程设计期末作业下载 web网页设计制作成品 大学生毕设网页设计源码HTML 1 临近期末 你还在为H
  • BugkuCTF-WEB题文件上传

    启动场景 发现是文件上传 只能上传图像 不能上传PHP文件 那应该是寻找漏洞上传PHP文件 PHP文件里写入一句话木马 使用burp抓包 不断尝试发现发现需要修改的地方有三个 一个是http head里的Content Type multi
  • HTML--后台管理系统

    后台管理系统
  • JavaScript 实现html导出为PDF文件

    相信各位前端工程狮们在一些报表项目 管理系统项目中都会遇到在这样的需求 申请报 表格 简历等等图文信息有导出为PDF文件 下面是记录我在项目中完成该需求的代码dome 发布出来也是希望对大家有些帮助 1 整体思路 将HTML元素打印或导出为
  • 【HTML】HTML5的拖放你用了吗

    HTML HTML5的拖放你用了吗 引言 github HTML HTML5的拖放你用了吗 内容速递 看了本文您能了解到的知识 在 HTML5 中 拖放是标准的一部分 任何元素都能够拖放 拖放的操作 多用在拖拽排序列表 游戏拼图等 下文中出
  • vue动态绑定video视频src问题解决

    做个项目 视频部分需要先后台上传 然后前端页面显示 然后就遇到了视频动态获取地址的问题 一开始想着很简单 使用v model双向绑定就行了 结果试了下并不行 后面开始度娘 尝试过很多人说的 refs解决 结果并不行 虽然浏览器中看地址确实绑
  • 使用企业订货软件的担忧与考虑|网上APP订货系统

    使用企业订货软件的担忧与考虑 网上APP订货系统 网上订货系统担心出现的问题 1 如果在订货系统中定错 多 货物了该怎么办 其实这也是很多人在网购或者是现实中经常会犯的一个错误 但是网上订货平台为大家提供了很多的解决方案 其中对于订单的修改

随机推荐

  • 数据结构5 栈和队列

    1 1 分数 2 作者 DS课程组单位 浙江大学 Run the following operations on a stack S Push S 1 Push S 2 Pop S Push S 3 Pop S Pop S The outp
  • git命令之快速搭建远程仓库

    首先使用系统管理员账号登录远程服务器 xff0c 具体步骤如下所示 xff1a 1 安装git应用程序 sudo apt get install git 2 创建git用户组和git用户 xff0c 具体命令如下所示 xff1a group
  • AM5728(AM5708)开发实战之使能u-boot看门狗

    一 看门狗介绍 为了使嵌入式系统能够在异常情况下自动复位 xff0c 一般需要引入看门狗 看门狗可以分为如下几类 xff1a 1 CPU自带的看门狗模块 优点 xff1a 可以灵活配置溢出时间 xff0c 可以随时禁用 缺点 xff1a 需
  • AM5728(AM5708)开发实战之调试DP83822 LED

    一 LED寄存器分析 MLEDCR即Multi LED Control Register 地址为0x0025 MLEDCR 1 0 设置MLED路由功能 具体如下所示 0x00表示MLED功能路由到COL PIN29 0x03表示MLED功
  • AM5728(AM5708)开发实战之移植OpenCV-3.4.11

    一 概述 OpenCV是一个开源的跨平台计算机视觉库 xff0c 可以运行在Linux Windows Mac OS等操作系统上 xff0c 它为图像处理 模式识别 三维重建 物体跟踪 机器学习提供了丰富的算法 由于OpenCV依赖包特别多
  • 国外大神深度评测Firefly-RK3399 Android8.1固件

    国外大神深度评测Firefly RK3399 Android8 1固件 Review of Firefly RK3399 Board with Android 8 1 Firmware 内容详细介绍了组装Firefly RK3399 xff
  • 设备树之I2C和SPI实例

    I2C实例 clock frequency i2c总线频率 xff0c 常用值有100000 xff0c 400000 address cells 该属性值必须为1 size cells 该属性值必须为0 i2c具体实例如下图所示 xff1
  • 设备树之GPIO和中断实例

    概述 设备树不仅仅描述常规硬件信息 xff0c 还可以描述中断 xff0c GPIO xff0c DMA xff0c PINCTRL xff0c 时钟 xff0c 电源管理等内核基础设施信息及其使用情况 xff0c 下面重点介绍中断 xff
  • 设备树之HDMI输出实例

    一 HDMI输出实例详解 图1 图2 图3 图1 xff0c 图2和图3构成了一个典型的HDMI输出链路 图1 xff1a HDMI接口设备结点 xff0c 该HDMI接口使用TYPE A接口 注意 xff1a HDMI接口结点名称为con
  • 设备树之MMC总线实例

    MMC总线重要属性 address cells 61 lt 1 gt 该属性值必须为1 size cells 61 lt 0 gt 该属性值必须为0 max frequency mmc总线最大时钟频率 bus width mmc总线位宽 x
  • Coursera计算概论A(李戈)教授课程

    昨天 xff08 4月29日 xff09 结束了 计算概论A的课程 xff0c 我对C语言有了更多的了解 这部课程算是我踏入程序设计领域的一个敲门砖吧 对C程序语言的理解 xff1a C语言简单 高效 易懂 xff0c 重点在于 1 结构
  • linux 命令行报bash command not found的解决办法

    命令行报bash command not found的解决办法 xff08 几乎所有命令 xff09 命令行输入命令执行后报 bash command not found 这是由于 系统PATH设置问题 xff0c PATH没有设置对 xf
  • cprintf函数调用到屏幕(cga)输出流程分析

    本文所有代码均为JOS内核源代码 xff0c 可以从MIT 6 828课程网站下载 概述 xff1a 所有向屏幕输出的过程 xff0c 一定是经过参数处理 xff0c 最后组织成一个字符数组 BUFFER xff0c 这个数组 xff08
  • laravel API 接受PUT请求Content-Type:application/x-www-form-urlencoded

    微信小程序 xff1a wx request url https m sybmfw cn api ys user 43 openid method put data that data formdata header content typ
  • 咕咕东的奇妙序列

    题意 xff1a 咕咕东 正在上可怕的复变函数 xff0c 但对于稳拿A Plus的 咕咕东 来说 xff0c 她早已不再听课 xff0c 此时她在睡梦中 突然想到了一个奇怪的无限序列 xff1a 112123123412345 这个序列由
  • w15作业--ZJM 与霍格沃兹(必做)

    题意 xff1a ZJM 为了准备霍格沃兹的期末考试 xff0c 决心背魔咒词典 xff0c 一举拿下咒语翻译题 题库格式 xff1a 魔咒 对应功能 背完题库后 xff0c ZJM 开始刷题 xff0c 现共有 N 道题 xff0c 每道
  • 实现WSL2固定IP效果+开机启动

    重启wsl2的发行版后 xff0c 系统分配给发行版的ip每次都不同 想要远程ssh过来或者运行其他需要外部访问的任务时 xff0c windows不知道要把端口转发给哪个ip 解决思路 启动wsl2后 xff0c 运行一个脚本 xff0c
  • Windows连接不上linux虚拟机的问题排查

    Windows连接不上虚拟机的问题排查 今天使用windows连接VMware上安装的linux虚拟机 xff0c 一直连接不上 xff0c 最后花了两个小时才解决了问题 xff0c 这里记录一下 xff0c 供日后参考 说明一下 xff0
  • UE4编写H5遇到的问题

    UE4自从4 16之后 xff0c 就采用emscripten技术进行h5编译 xff0c 游戏H5运行的过程中 xff0c 遇到这么一个问题 xff0c 记录一下 xff1a 数据服务器是一个独立的网站 xff0c 地址为 xff1a h
  • UE4开发HTML5遇到的问题

    最近要做一个基于UE4的HTML5仿真项目 xff0c 没真正做过HTML5的小白 xff0c 表示很无所畏惧 首先 xff0c 找一篇UE4下H5的教程 xff0c 简单学习一遍 xff1a 安装 xff0c 环境 xff0c 项目配置