如何使用腾讯云短信API发送验证码

前言: (写在前面的一些废话)最近在写给手机发送短信的一个功能,之前一直在用“创蓝253短信平台”,调用起来也是非常简单,根据域名构建一个Http请求即可。但是最近这个平台对签名审核变得非常的严格且对一些平台和APP是不发的(应该是因为这些小平台的安全性没有做好,才会这么严格),申请的时候还需要 APP的下载地址、官网、设计图纸等等,付款还需要公对公,这对于我们这些独立开发者来说很不友好,我提供了公司的营业执照(一个朋友的空壳公司)和部分APP的设计图纸(做的一个交友类小游戏),申请了三四次都给我驳回了,联系客服又给我说交友类、棋牌类游戏不发(一万个草泥马)。决定还是研究腾讯的短信服务吧,但是腾讯的短信API调用起来不是一般的麻烦(由于腾讯的SDK不支持在Windows环境,所以只能硬着头皮调用API了)。下面主要记录一下在调用腾讯短信API中的一些主要步骤。 最终目的: 使用UE4调用腾讯的发送短信API,给手机发送短信。 介绍腾讯云短信服务及用“API Explorer"在线发送验证码 官方文档上有详细的文档说明,这里就不多赘述,这里主要是总结一下用法。我用的V3.0版本的API,使用 API的核心就是通过一些加密算法构建“签名串”,这个签名串用于构建HTTP请求,加密算法主要用的是“Opessll库”里面的部分函数,这个库的用法我单独写了一篇文章,参考“在Windows下配置Openssl环境”。 在测试阶段推荐使用“API Explorer”,这个可以在线发送验证码,生成签名串。发送验证码需要开通短信服务并申请签名和签名模板,还要申请腾讯SDK的秘钥和 ID(每个用户最多申请两个秘钥和 ID,)这部分官方文档有详细步骤,参考我当时发送的界面如图1-1所示。“API Explorer”生成的签名串可以用来验证你的生成签名串的程序,如图1-2所示。 使用"Postman"测试发送Http/Https请求 在使用C++编写HTTP请求之前,可以先使用软件“Postman”发送测试请求,以确保请求串没有错误。使用方法如图1-3所示: 使用纯C++项目生成“签名串” 创建一个C++的空项目,添加一个CPP文件后,将官网的代码粘贴进去(官方文档链接:https://cloud.tencent.com/document/product/382/52072#C.2B.2B),参考文章“在Windows下配置Openssl环境”配好环境后,还需要改一个名叫“get_data”函数,如下面示例所示,之后应该就可以编译通过了。官网示例使用的接口不是发送短信接口,所以需要稍微改动一下代码。发送短信的部分改动代码如下: 函数改动: string get_data(int64_t& timestamp) { int64_t ii = 1231232133; string utcDate; char buff[20] = { 0 }; //改动了这里,牵扯到time_t类型的初始化 time_t timenow = (time_t)(timestamp); 1 2 3 4 5 6 7 8 9 10 11 struct tm sttime; //sttime = *gmtime(&timestamp); gmtime_s(&sttime, &timenow); //gmtime_s(, ); strftime(buff, sizeof(buff), "%Y-%m-%d", &sttime); utcDate = string(buff); return utcDate; } SendSms接口,生成字符串所必要的一些参数: // 密钥参数 string SECRET_ID = “AKI**evvfCU”; string SECRET_KEY = “3pLaZrkNkFTQ6VdU5PS”;...

十月 3, 2022 · Imrcao

UE4 windows打包IOS 踩坑记录

经本人完整踩坑之后,已经成功在windows PC上将UE4项目打包IOS。本文主要记录踩坑过程,并介绍在Windows PC上将UE4 项目打包IOS 的方法,包含配置证书、配置Mac,编译及打包等几个方面。 一般的,UE4开发主要在win平台进行,主要原因是渲染和平台支持优于Mac。到了打包时,仅蓝图的ios项目可以在window进行编译及打包(此方法本文不做说明),而C++ ios项目必须在Mac机器进行编译及打包,所以这就决定了Windows开发,Mac打包的主要路线。 那么,我们先要有台Mac机器,如果没有,那就只能先在Windows上安装Mac虚拟机。如果有,直接跳过步骤一 一、Mac虚拟机的安装 1、下载安装VMware15.5 链接:https://pan.baidu.com/s/1JeXYaF1gX4knxOs3Me1POw 提取码:wrbf 其他虚拟机能不能安装MacOS 未知,注意使用15版本不要使用16最新版 序列码YG5H2-ANZ0H-M8ERY-TXZZZ-YKRV8 2、用Unlocker解锁 使用大佬魔改过的MK Unlocker,下载解压后(可以不放入VMware安装文件夹)右键“以管理员身份打开” win_install.cmd,让它自己进行就好了,这个版本应该不会有问题。 此时成功解锁之后,安装虚拟机时可以有MacOS选项 下载MacOS镜像 macos 10.15下载: 下载链接:点击下载 提取码:spc4 1 2 本人下载的是Catalina10.15.1.cdr 版本,不过后来启动之后直接来了一场更新, 可以到这里找一下较新的镜像文件。 安装虚拟机的过程不在赘述,有一点就是分配硬盘时不要分配动态空间,选择直接分配,不然后续MacOS 无法在此虚拟硬盘完成安装,具体原因不清楚。 MacOS虚拟机安装完成之后,就相当于有Mac机啦 接着马上安装Xcode,重要! 二、证书 证书和描述文件的配置也不做太多赘述,搜索一下文章一大堆,这里主要说一下关键点。证书的配置需要在UE4中和Mac机都完成配置,配置好之后大概如下两图: 三、配置远程Mac 1、在Mac系统中,系统偏好设置-共享 打开远程登录选项,并选择所有用户 2、UE4中 项目设置-平台-IOS-构建 远程服务名处可输入远程mac登录名 或者IP地址 用户名处输入mac用户名。 点击生成SSH键,生成工程中要设置此SSH的密码,建议直接摁回车,不设置密码。 此SSH可共享给其他人,那么其他人也可以连接此远程Mac进行打包 四、远程打包 此时,在UE4中打包项目 选择IOS 竟然打开了浏览器及UE4帮助文档。。。 1、安装Itunes 和Windows Store? 搜索之后发现还需要在Windows中安装Itunes,据说是因为需要使用Itunes的Mac SDK? 本人之前在Itunes官网进行了下载及安装,安装完成之后发现没有用,点击打包依然打开了浏览器? 经过多方搜索后,发现需要在Windows Store 安装Itunes??? UE4的这一步操作实在是不太懂。 那就照做把,然而当我卸载掉Itunes,打开了windows主菜单,发现没有Windows Store。。。 大概是因为现在大部分win10系统镜像都删除了应用商店把。 尝试多种安装Windows Store方法后,发现此方法是唯一可行的: Windows LTSC、LTSB、Server 安装 Windows Store 应用商店...

七月 3, 2022 · Imrcao

更新日志之LivelinkVRPN(HTCVive)

前言:UE4-427版本在虚拟拍摄领域迎来了一次大更新,各种工具趋于完善,现场的效率越来越高,其中一项更新就是LiveLinkVRPN插件的引入,之前版本是通过在“配置文件”中读取跟踪设备数据的(例如HTC),现在可以通过这个插件直接获取数据,VRPN服务器还是要一直开着的。 注意事项:(需要打开SteamVR、LivelinkVRPN插件、VRPN服务器) 1、LivelinkVRPN 427中如何使用Vive手柄进行输入 在配置文件中移除了使用VRPN的输入配置,用livelike代替,使用方法: (1)、首先打开SteamVR和VRPN服务器, (2)、打开UE4编辑器,打开livelike,如图所示添加一个Livelink源,如图所示 IPAddress – 输入IP地址(需要注意的是后面要加“:3884”端口号) Device Name – 输入设备名称(VRPN服务器上的名称,如上图红线所示) Subject Name–源名称( 随便填写) Type – 源类型(使用Vive的话,就选Tracker) (3)、选择刚刚创建的Livelink源,添加一个“Pre Processors”,需要注意的是Livelink的三个轴向。如图所示: (4)(注意)如果需要在Ndisplay模式下运行的话,需要开启“SteamVR”插件,不然使用SwitchBoard启动的时候,SteamVR会产生崩溃,导致VIVE手柄的位置信息不能进入UE。 (5)、在全部设置好后,将LiveLink设置保存为一个模板,并在项目设置中指定此模板,这样才能在下次启动工程的时候自动接收livelink数据。如图所示:

六月 3, 2022 · Imrcao

Python和UE4结合建立WebSocket通信

前言 最近在做一个直播中用到的小工具,需求是从斗鱼或者虎牙平台中拉去直播的数据(弹幕和礼物等等),并将这些数据实时推流到一个UE4客户端,在客户端中根据这些数据做一些业务逻辑。这里采用的模型是,使用python写数据推流服务器,UE4作为客户端持续接收数据。这里主要记录一下整个过程中遇到的问题。 为什么是WebSocket https://www.ruanyifeng.com/blog/2017/05/websocket.html PIP(python包管理工具) https://baike.baidu.com/item/PIP/20435212?fr=aladdin python配置环境变量 https://www.cnblogs.com/huangbiquan/p/7784533.html 在cmd中安装Python工具包(webSocket) https://jingyan.baidu.com/article/86f4a73ea7766e37d7526979.html 在PyCharm中安装Python工具包 https://blog.csdn.net/m0_37332816/article/details/81353659 https://zhuanlan.zhihu.com/p/314507897

二月 3, 2022 · Imrcao

202110-UE427版本-Ndisplay快速入门

前言:最近虚幻引擎更新到427版本,在影视方面更新了很多的重要的内容,特别是Ndisplay-LED(InVFXCamea)拍摄这一块,用官方的话说,这个版本的Ndisplay是可以用于生产的版本。更新的内容的深度和广度都很大,导致之前的低版本功能无法直接升级到427版本。下面来看一下如何使用新版本的Ndisplay功能。 一、创建工程,部署环境 选择Ndisplay模板,创建一个空的工程,如图1-1所示。 图1-1 选在并打开配置文件“NDC_Basic”,选择“Node_0(Master)”,在细节面板中更改Window的尺寸大小(根据自己显示器分辨率进行调整);选择“VP_0”,调整投影策略“Projection Policy”,并调整视口大小。如图1-2所示。 图1-2 打开SwitchboardListener,然后再打开Switchboard,如图1-3所示。首次打开会提示安装相关环境,等待安装完毕即可。 (注意)有的时候Switchboard界面弹不出来(点击任务栏图标的时候,总是出现纯白色预览缩略图,就是点出界面,这里无法好像无法截图,只能描述。应该是个bug,后面可能会修复吧),在纯白缩略图上单击右键,选择最大化即可。如图1-4所示。 图1-3 图1-4 创建配置文件:现在打开了Switchboard的监听和客户端,首次打开创建一个新的配置文件,如图1-5所示。配置文件界面如图1-6所示: (注意)ConfigPath是配置文件存储的路径,注意界面上只会显示配置文件名称,不会显示路径,初始应该是默认路径,我这里的完整路径是“D:\Program Files\Epic Games\UE_4.27\Engine\Plugins\VirtualProduction\Switchboard\Source\Switchboard\configs” Uproject和Engine DIr就常规填写项目位置和引擎位置即可。点击ok创建配置文件,如图1-5所示。 图1-5 图1-6 添加Ndisplay节点,点击“AddDevice”选择“Ndisplay”类型,在弹出来的界面上点击“Browse”,选择模板自带的配置文件。如图1-7所示。 图1-7 添加Unreal项目,用于多用户编辑,填写IP地址后点击ok,这里IP填127.0.0.1。如图1-8所示。 图1-8 点击“Settings”,在MultiUserServer一栏下,将AutoJoin勾选上。如图1-9所示 图1-9 8、首先启动Ndisplay节点,先点击链接(1),再点击启动(2)(在启动之前记得将“SteamVR”插件勾选上,不然会造成SreamVR软件的崩溃,如图1-10所示)。在启动Unreal编辑器之前,将Settings->MultiUserServe->AutoLunch勾选掉,不用启动Server服务器了(上一次启动过了)。在UnrealDevice下先点击连接(3),再点击启动(4)。如图1-11所示 图1-10 图1-11 到这里就完成了在单个机器上启动Ndisplay和多用户编辑。在编辑器中做出更改,Ndisplay视口中会发生实时的变化。 二、添加InnerVFXCamera(内视锥) 向场景中拖入一个“CineCameraActor”,并将它作为Ndis配置文件“Monitor_1Host_1Node”的子节点(我这里将Ndis配置文件改了名字)。选中CineCameraActor,在细节面板下添加一个“LiveLinkComponentController”,并在属性下指定自己的LiveLink。如图所示2-1所示 图2-1 打开Ndisplay配置文件,添加组件“ICVFXCamera”, 回到世界大纲,选中配置文件,在细节面板中指定刚才拖入的CinCameraActor即可。 关于如何使用Livelink接收数据,请参考文章“” 现在保存退出即可。 根据上述步骤使用Switchboard启动,就可以根据HTCVive手柄驱动内视锥了。 LivelinkVRPN 前言:UE4-427版本在虚拟拍摄领域迎来了一次大更新,各种工具趋于完善,现场的效率越来越高,其中一项更新就是LiveLinkVRPN插件的引入,之前版本是通过在“配置文件”中读取跟踪设备数据的(例如HTC),现在可以通过这个插件直接获取数据,VRPN服务器还是要一直开着的。 注意事项:(需要打开SteamVR、LivelinkVRPN插件、VRPN服务器) 427中如何使用Vive手柄进行输入 在配置文件中移除了使用VRPN的输入配置,用livelike代替,使用方法: (1)、首先打开SteamVR和VRPN服务器, (2)、打开UE4编辑器,打开livelike,如图所示添加一个Livelink源,如图所示 IPAddress – 输入IP地址(需要注意的是后面要加“:3884”端口号) Device Name – 输入设备名称(VRPN服务器上的名称,如上图红线所示) Subject Name–源名称( 随便填写) Type – 源类型(使用Vive的话,就选Tracker) (3)、选择刚刚创建的Livelink源,添加一个“Pre Processors”,需要注意的是Livelink的三个轴向。如图所示: (4)(注意)如果需要在Ndisplay模式下运行的话,需要开启“SteamVR”插件,不然使用SwitchBoard启动的时候,SteamVR会产生崩溃,导致VIVE手柄的位置信息不能进入UE。 (5)、在全部设置好后,将LiveLink设置保存为一个模板,并在项目设置中指定此模板,这样才能在下次启动工程的时候自动接收livelink数据。如图所示: IPad控制 1、首先在Content下创建“Remote Control Preset”资产,在“Miscellaneous”下找到此项,创建并命名,如图4-1所示 图4-1 2、双击打开远程控制资源类,在右上角找到“EditMode”打开编辑模式,如图4-2所示,此模式打开后,在世界大纲中选中需要被控制的Actor,选中Actor后就可以在Detail面板中看到各个属性前面有一个小眼睛,选择需要控制的属性,点击小眼睛图标即可,如图4-4所示。 图4-2 3、在图4-2上点击设置图标进入Remote Control设置页面,勾选“Auto Start Web Server”,即项目启动时运行WebServer。如图4-3所示。 图4-3...

十月 3, 2021 · Imrcao

在Windows下配置Openssl环境

前言: SSL是Secure Sockets Layer(安全套接层协议)的缩写,可以在Internet上提供秘密性传输。库中包含很多加密函数,可以对数据进行加密。Openssl整个软件包主要包含三部分:SSL协议库、应用程序、密码算法库。下面主要介绍如何在Windows环境下下载安装Openssl,并配置环境,用C++调用其中的部分函数对数据进行加密。测试案例是:生成一个签名串,这个签名串是腾讯云短信服务中“发送短信”API中需要的必要参数。 下载安装: 下载地址:https://slproweb.com/products/Win32OpenSSL.html,我这里选择的版本是“Win64 OpenSSL v1.1.1L”选择了“EXE”格式,如果你的操作系统是32位或者你的项目是32位的话,就选择下载32位的安装包。安装过程比较简单直接点击下一步即可。 配置Windows环境: 配置环境变量:右键单击“我的电脑”->“属性”->“高级系统设置”,在弹窗中找到“高级”->“环境变量”,新建环境变量,变量名“Path”,变量值为“C:\Program Files\OpenSSL-Win64\bin”,变量值为安装目录;如图1-1所示; 图1-1 配置VS项目环境: 1、如果要在VS项目中使用SSL库,还需要在VS项目中进行相关设置。我这里使用的是VS2019创建的一个空的C++项目;添加一个“.cpp”文件“Source.cpp”,加入头文件“#include <openssl/sha.h>”和“#include <openssl/hmac.h>”,编译会报错并提示找不到头文件。 2、项目设置:项目-单击右键-属性,在属性面板中找到“VC++ Directories”->“Include Directories(包含目录)",添加新的目录“C:\Program Files\OpenSSL-Win64\include”;同样在库目录“Library Directories”下也添加一个新的目录“C:\Program Files\OpenSSL-Win64\lib”。如图1-2所示。最后配置静态链接库:选择连接器“Linker”->输入“Input”->添加依赖项“Additional Dependercies” 将“libssl.lib、libcrypto.lib”粘贴到空白处,点击确定即可。如图1-3所示。现在再编译项目即可编译通过。到此Openssl的环境配置就完成了,可以尝试调用一下其中的函数,后面会通过一个案例来使用Openssl库。 图1-2 图1-3 在UE4C++项目中使用 在 UE4项目中配置Openssl环境(UE4中引用第三方链接库)。 在UE4项目中无法按照文章“在Windows下配置Openssl环境”配置相关环境,UE4的项目属性中没有“链接器->输入”,所以无法指定第三方静态链接库。UE4引用第三方静态链接库需要在“.Build.cs”文件中配置。 首先在插件的根目录的下创建文件夹“ThirdParty”,然后去“Openssl”的安装目录下找到文件夹“OpenSSL-Win64”(我这里的目录为“C:\Program Files\OpenSSL-Win64”),最后将这个文件夹复制到“ThirdParty”中,并保留文件夹“Include”、“Lib”两个文件夹,其余全删除。如图1-4所示。 图1-4 在VS工程模块中的“.build.cs”文件中加载第三方静态链接库,代码如下所示。 // Some copyright should be here… using System.IO; using UnrealBuildTool; public class SimpleHttp : ModuleRules { /——————Begin——————/ private string ModulePath { // get { return Path.GetDirectoryName(RulesCompiler.GetModuleFilename(this.GetType().Name)); } get { return ModuleDirectory; } } private string ThirdPartyPath { get { return Path....

十月 3, 2021 · Imrcao

解决UE4万向节锁(Gimbal Lock)的问题

一、问题描述 在开发类似飞行类游戏的时候往往需要将相机的旋转范围设置到[-180~180],但引擎默认会将pitch和roll两个轴向限定到[-90~90],这并不是一个bug,是引擎为了适配FPS游戏所做的限制,你可以垂直向上或者向下看,超过这个角度就没有意义了且会导致万向节锁的现象,为了避免这种现象我们可以采用四元数的方法。 二、解决步骤 使用的是飞行模板,创建自己的GameMode和Controller和pawn并在worldSettings中设置为我们的GameMode。如图示1.1(注意Pawn类中要加入Camera组件) 1 2 图示1.1 项目设置中添加输入,如图示1.2 1 2 图示1.2 接下来是主要的一步,使用四元数的方法解决万向节锁的现象。为了方便使用,我这里写成了一个插件。如图1.3所示,选择模板“BlueprintLibrary”,创建一个插件。 1 2 图示1.3 打开VS,将如下代码加入到.h和.cpp中。注意:在cpp中将函数名称“UMyFunctionName”替换为自己的类名称。如图1.4所示 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 public: // 旋转公式:将欧拉角的度数转换为四元数 UFUNCTION(BlueprintCallable, meta = (DisplayName = "Euler To Quaternion", Keywords = "rotation, quaterion"), Category = "Quaternion Rotation") static FQuat Euler_To_Quaternion(FRotator Current_Rotation); // 根据输入的四元数设置组件的世界坐标的旋转 UFUNCTION(BlueprintCallable, meta = (DisplayName = "Set World Rotation (Quaterion)", Keywords = "rotation, quaternion"), Category = "Quaternion Rotation") static void SetWorldRotationQuat(USceneComponent* SceneComponent, const FQuat& Desired_Rotation); // 根据输入的四元数设置组件的相对旋转 UFUNCTION(BlueprintCallable, meta = (DisplayName = "Set Relative Rotation (Quaterion)", Keywords = "rotation, quaternion"), Category = "Quaternion Rotation") static void SetRelativeRotationQuat(USceneComponent* SceneComponent, const FQuat& Desired_Rotation); // 添加本地旋转量 UFUNCTION(BlueprintCallable, meta = (DisplayName = "Add Local Rotation (Quaterion)", Keywords = "rotation, quaternion"), Category = "Quaternion Rotation") static void AddLocalRotationQuat(USceneComponent* SceneComponent, const FQuat& Delta_Rotation); // 根据输入的四元数设置Actor的世界坐标的旋转 UFUNCTION(BlueprintCallable, meta = (DisplayName = "Set Actor World Rotation (Quaternion)", Keywords = "rotation, quaternion"), Category = "Quaternion Rotation") static void SetActorWorldRotationQuat(AActor* Actor, const FQuat& Desired_Rotation); //根据输入的四元数设置Actor的相对旋转 UFUNCTION(BlueprintCallable, meta = (DisplayName = "Set Actor Relative Rotation (Quaternion)", Keywords = "rotation, quaternion"), Category = "Quaternion Rotation") static void SetActorRelativeRotationQuat(AActor* Actor, const FQuat& Desired_Rotation); // 添加本地旋转量 UFUNCTION(BlueprintCallable, meta = (DisplayName = "Add Actor Local Rotation (Quaternion)", Keywords = "rotation, quaternion"), Category = "Quaternion Rotation") static void AddActorLocalRotationQuat(AActor* Actor, const FQuat& Delta_Rotation); FQuat UQuaternoinsBPLibrary::Euler_To_Quaternion(FRotator Current_Rotation) { //声明输出四元数 FQuat q; //将度数转换为弧度 float yaw = Current_Rotation....

六月 13, 2021 · Imrcao

UE4的静态加载和动态加载(引用资源)

引言 在日常的开发中会遇到很多使用C++来加载资源的情况,例如我们要引用Content下的蓝图类和非蓝图类,那么在UE4中提供了很多机制来引用这些资源。从网上查到的很多资料来看,很多游戏开发者将这种机制称之为“静态加载”和“动态加载”,但是从官方文档上来看,我并没有搜到静态加载相关的词语,官方将这种机制称之为“硬性引用(HardRefernences)”和“软性应用(SoftReferences)”。在这篇文章中我会把网上的资料和官方资料整理一下,也方便以后查阅。 静态加载-硬性引用 我这里理解的是静态加载和硬性引用一个意思,对应的动态加载和软性引用一个意思。硬性应用由两种场景的情况。 (1)直接属性引用:这是最常见的资源引用情况,通过宏UPROPERTY暴露给蓝图,这样可以允许设计人员在编辑器中指定相关资源。示例代码如下: /** construction start sound stinger */ UPROPERTY(EditDefaultsOnly, Category=Building) USoundCue* ConstructionStartStinger; (2)构造时引用:在构造函数引用确切的资源,这里是使用特殊的类ConstructorHelpers完成的,这个类中有两个对应的方法:FObjectFinder()和FClassFinder(),它们分别加载的是非蓝图资产(动画、贴图、模型、音效等)和蓝图类(角色蓝图、Widget控件)资产。示例代码如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 static ConstructorHelpers::FClassFinder<AChatOnline_WFYCharacter> PlayerPawnBPClass(TEXT("/Game/ChatOnline/WFY_Blueprint/Core/WFY_Character")); static ConstructorHelpers::FClassFinder<AHUD> PlayerHUDBPClass(TEXT("/Game/ChatOnline/WFY_Blueprint/Core/ChatOnline_WFYHUD_BP")); //DefaultPawnClass = AChatOnline_WFYCharacter::StaticClass(); if (PlayerPawnBPClass.Class!=NULL) { DefaultPawnClass = PlayerPawnBPClass.Class; } if (PlayerHUDBPClass.Class!=NULL) { HUDClass = PlayerHUDBPClass.Class; } class UTexture2D* BarFillTexture; static ConstructorHelpers::FObjectFinder<UTexture2D> BarFillObj(TEXT("/Game/UI/HUD/BarFill")); BarFillTexture = BarFillObj.Object; (了解更多:在以上构造函数中,ConstructorHelpers 类将尝试在内存中查找该资源,如果找不到,则进行加载。请注意,使用资源的完整路径来指定要加载的内容。如果该资源不存在或者由于出错而无法加载,那么该属性将设置为 nullptr。发生这种情况时,尝试访问纹理的代码将崩溃。最好进行声明,指出资源已正确加载(如果后续代码假设引用有效)。 UPROPERTY 的声明与前面的硬性引用示例相同。它们的工作方式相同,只不过是最初的设置方式有所差别。有关硬性引用的一个注意事项是,当对象加载并实例化时,还将加载以硬性方式引用的资源。您必须仔细地进行考虑,否则内存使用量会因为同时加载许多资源而迅速增加。如果您希望推迟该加载或确定要在运行时加载的内容,那么下列各节可以帮助您完成这些任务。) 动态加载-软性引用 动态加载最常用的两个模板化方法是LoadObject<>()和LoadClass<>()。同样的前者加载非蓝图类资产后者加载蓝图类资产。需要注意的是使用LoadClass时,路径名必须带_C后缀,LoadObject不需要带后缀。示例代码如下: //加载Content目录下的资源文件 UTexture2D* SpeackCheck; UTexture2D* MicCheck; //方法一: SpeackCheck = LoadObject(nullptr, TEXT("/Game/ChatOnline/WFY_Textture/Icon/Speaker_Check"));...

六月 3, 2021 · Imrcao

浮点型数据转换为网络字节序

前言: 最近在写使用UE4联动“六轴平台”的控制程序,这里就用到了机器硬件交互和计算机网络相关的知识。拿到硬件厂商的网络协议后,就要根据协议编写相关代码,下面记录一下开发过程。 网络字节序: 首先要明白和机器通讯中所传输的数据一般为字节流,即网络字节序,顾名思义就是字节的顺序。一般系统都会采用 UDP协议,UDP的好处就是机器只管接收就行。 进行 UDP广播: 在开始前,你需要了解如何使用UE4进行 UDP广播数据,你可以参考这篇文章“使用UE4原生模块进行简单UDP广播和数据接收”。 float转字节序: 直接上代码:这个函数可以将float类型的数据转为unsigned char类型的数组。 /* Describe:将float类型数据转换为unsigned char数组(即网络字节序) Paramfvalue待转换数据 Paramarr传入的字节序 ParamIndex从数组的第几位开始转换,默认为0 **/ 1 2 3 4 void AUDPSend::ftoc(float fvalue, int Index, unsigned char* arr) { unsigned char* pf; unsigned char* px; unsigned char i; //计数器 pf = (unsigned char*)&fvalue; /unsigned char型指针取得浮点数的首地址/ px = arr; /字符数组arr准备存储浮点数的四个字节,px指针指向字节数组arr/ for (i = Index; i < Index + 4; i++) { *(px + i) = *(pf + (i - Index)); /使用unsigned char型指针从低地址一个字节一个字节取出/ }...

六月 3, 2021 · Imrcao

使用SaitekX52接入到UE4

介绍: 罗技的赛钛克手柄(logitech-saitak X52)主要用于飞行类游戏,使用这个飞行控制器模拟飞行具有不错的体验。虚幻引擎作为一个游戏引擎应该也支持这类手柄,但虚幻引擎并不能做直接接收赛钛克手柄输入(不像XBox360,它可以直接输入进引擎)。下面记录一下如何使用Saitek手柄接入到虚幻引擎。 环境: 虚幻引擎425、Saitek X52 步骤一 首先安装Saitek X52控制器驱动,可以去官网下载(官网见:参考资料)。下载好的驱动直接点击安装即可。 安装好驱动后打开“设备管理器”,找到“人体学输入设备”,在下拉列表中找到对应的控制设备,打开“属性->详细信息->-硬件ID”。“VID_”后面的“06A3”和“PID_”后面的“075C”分别为品牌ID和设备ID。如图1-1所示。这两个值为16进制数,记下这两个值,后面引擎中会用到。 图1-1 步骤二 使用虚幻引擎蓝图版本的飞机模板(Flying),在Plugins中找到并勾选插件“Windows Rawinput”,重启后在项目设置中找到“Plugins->Raw Input”。插件“Windows RawInput”提供了八个轴向的输入和二十个按钮输入。 添加一个设备配置插槽,Vendor ID和Product ID分别填入“0x06A3”和“0x075C”。在属性添加一个轴向属性,勾选上“Enable”和“Gamepad stick”。勾选上“Gamepad stick”的意思是让输入变为“-1到1”而不是“0-1”。如图2-1所示。 打开“Engine->Input”,在轴向映射下面的“MoveUp”一栏添加刚刚的一个轴向输入“GenericUSBController Axis 1”。如图2-2所示。这样手柄就可以进行输入了。 图2-1 图2-2 三、下面记录一下八个轴向的输入和二十个按钮输入对应关系,如图3-1所示。 图3-1 四、Saitek X52支持的一些游戏,如图4-1所示。 图4-1 参考资料: saitek官网: https://www.logitechg.com/en-gb/products/space/x56-space-flight-vr-simulator-controller.945-000059.html 论坛: https://forums.unrealengine.com/t/3-new-plugins-joystick-hotas-support-blueprint-easing-functions-saitek-x52-pro/6620 官方文档 https://docs.unrealengine.com/4.26/zh-CN/InteractiveExperiences/Input/RawInput/

六月 3, 2021 · Imrcao