LoginSignup
3
2

UnrealEngineにおいてWindowsのタッチをシミュレートしてみる

Posted at

touchWindow.gif

上記のようにUnrealEngineのUI上でゲームコントローラーの右と左のスティックでポインタを操作してタッチ処理を行わせることができました。
2つのタッチを扱ってピンチインやピンチアウトの操作もできます。

試した環境

  • UE5.3.1
  • Windows11

参照サイト

作成してみたコード

以下のWindowsのウィンドウをキャプチャするWindowCapture2Dプラグインにタッチ機能を追加してみました。
サンプルプロジェクトにおいてゲームコントローラーでキャプチャしたスクリーンのタッチが行えるようにしています(キーボードでも操作できるようにしてますが、タッチをするとフォーカスが外れてうまくいかない感じです)。

以下がタッチ機能のコア部分の機能です。
ウィンドウキャプチャの機能とはあまり依存関係がないので単独でも使用できるかと思います。

https://github.com/mechamogera/WindowCapture2D/blob/master/Plugins/WindowCapture2D/Source/WindowCapture2D/Public/Touch.h
https://github.com/mechamogera/WindowCapture2D/blob/master/Plugins/WindowCapture2D/Source/WindowCapture2D/Private/Touch.cpp
https://github.com/mechamogera/WindowCapture2D/blob/master/Plugins/WindowCapture2D/Source/WindowCapture2D/Public/TouchManager.h
https://github.com/mechamogera/WindowCapture2D/blob/master/Plugins/WindowCapture2D/Source/WindowCapture2D/Private/TouchManager.cpp

InjectTouchInput関数をUnrealEngineで利用する

WinUser.hではInjectTouchInputと関係する構造体は以下の#ifの中にあります。

#if(WINVER ?= 0x0602)

UnrealEngineのデフォルトではWINVERは0x0601なのでそのままではInjectTouchInputが使えません。

How to define _WIN32_WINNT and WINVER? - Programming & Scripting / C++ - Epic Developer Community Forums
このため、上記のページを参照してプロジェクトのbuild.csに以下を追加して対応しました。

PublicDefinitions.Remove("WINVER=0x0601");
PublicDefinitions.Remove("_WIN32_WINNT=0x0601");
PublicDefinitions.Add("WINVER=0x0602");
PublicDefinitions.Add("_WIN32_WINNT=0x0602");

WindowCapture2Dプラグインでは以下の個所にあたります。
https://github.com/mechamogera/WindowCapture2D/blob/master/Plugins/WindowCapture2D/Source/WindowCapture2D/WindowCapture2D.Build.cs#L65-L68

以前はdllを用意して対応しましたがこの方が楽ではありますね(UE4で新しいWin APIを使う - Qiita参照)。
ただ、ビルド時に定義の重複で警告は出てしまいます。

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2