UE4支持WindowsTouch的技术尝试

目前我使用的版本是UE4.11,还没有对PC触摸屏做技术支持,我看到国内外网站上有很多技术人员要求UE公司提供支持,令人可惜的是到目前还没有支持。估计可能会在4.14版本支持。鉴于我们项目的情况,我有点等不及了。所以较深入的了解了目前这部分的代码状况,发现了些问题,并提供了一部分解决方法,在这里和大家分享下:

看了下代码,发现目前的窗口消息并没有提供Touch消息的处理,目前所有的触摸消息都当做鼠标左键处理,在蓝图中也是一样。看了微软的官方文档,目前支持触摸的windows操作系统必须是win7以上。这一点在UEBuildWindows.cs中是这么描述的

if (SupportWindowsXP)
{

// Windows XP SP3 or higher required

InBuildTarget.GlobalCompileEnvironment.Config.Definitions.Add("_WIN32_WINNT=0x0502");

InBuildTarget.GlobalCompileEnvironment.Config.Definitions.Add("WINVER=0x0502");

}
else
{

// Windows Vista or higher required

InBuildTarget.GlobalCompileEnvironment.Config.Definitions.Add("_WIN32_WINNT=0x0600");

InBuildTarget.GlobalCompileEnvironment.Config.Definitions.Add("WINVER=0x0600");

}

很明显的看出,当前版本还支持WS08和Vista。但是这两个操作系统是不支持WindowsTouch消息的。也就是说如果要支持WindowsTouch,就需要用户的操作系统至少升级到Win7及其Win7以上。这恐怕是UE目前不愿意做技术支持的原因之一,这样的话,那些正在使用08和Vista或者LONGHORN系统的用户就可能流失。

好了,归正题,如果我们要添加Touch处理怎么做?下面我粗略说下思路(这些思路我已经在本机测试过,没有问题)

第一:保证你的开发机是Win7或者Win7以上操作系统,本人使用的Win10开发

第二:将上面的代码片段else部分修改为如下

// Windows Vista or higher required

InBuildTarget.GlobalCompileEnvironment.Config.Definitions.Add("_WIN32_WINNT=0x0600");

InBuildTarget.GlobalCompileEnvironment.Config.Definitions.Add("WINVER=0x0601");

第三:在WindowsWindow.cpp的Initialize函数中添加

#if(WINVER >= 0x601)

// register the window for touch instead of gestures

RegisterTouchWindow(HWnd, 0);

#endif

注册UE的窗口为可触摸窗口

第四:在WindowsApplication.cpp的AppWndProc函数中添加WM_TOUCH接受处理,类似下面代码

case WM_TOUCH:
{

DeferMessage(CurrentNativeEventWindowPtr, hwnd, msg, wParam, lParam);

return 0;

}
break;

第五:在ProcessDeferredMessage函数中处理当前窗口的WM_TOUCH,伪代码如下:

case WM_TOUCH:

{

//这里为触摸的业务逻辑处理,如果不会写,可以参看微软官方的例子

}

break;

以上的思路我在项目已验证没有问题,并且在打包后的应用程序中也是正确无误的。希望对大家有所帮助,另外触摸手势的处理是类似的原理。我个人估计UE4在4.14版本也是

类似的处理吧。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值