【UE5】C++を使って現在接続しているデバイスの情報を取得する
概要
以前コントローラーが動かなくなった時に、UE5側でデバイスを認識してるのか調べる方法を詳しく書こうと思い記事にしました
少しでも参考になれば幸いです。
環境
UE5.4
手順
以下になります。
- Build.csにApplicationCoreを追加する
- BlueprintFunctionLibraryに関数を追加する
- BPで追加した関数を呼んでデバイス情報を取得する
Build.csにApplicationCoreを追加する
この機能を使うためには、Build.csにApplicationCore
を追加する必要がありますので追加してない方は追加していただけると助かります。
PrivateDependencyModuleNames.AddRange(
new string[]
{
... //省略
"ApplicationCore", //追加
}
);
BlueprintFunctionLibraryに関数を追加する
この機能はSubsystemにはないですがSingletonみたいなので、以下のBlueprintFunctionLibraryを用意してBPで呼べるようにします
#pragma once
#include "CoreMinimal.h"
#include "Kismet/BlueprintFunctionLibrary.h"
#include "MyInputFunctionLibrary.generated.h"
UCLASS()
class ExampleInputFunctionLibrary : public UBlueprintFunctionLibrary
{
GENERATED_BODY()
public:
UFUNCTION(BlueprintCallable)
static void GetAllConnectionDevice(TArray<FInputDeviceId>& OutInputDevices);
};
void UMyInputFunctionLibrary::GetAllConnectionDevice(TArray<FInputDeviceId>& OutInputDevices)
{
IPlatformInputDeviceMapper::Get().GetAllConnectedInputDevices(OutInputDevices);
}
BPで追加した関数を呼んでデバイス情報を取得する
先程追加した関数を呼びます。
自分はBP_ThirdPersonにこんな感じに処理を入れました。
今回注力してみる部分はこちらになります。
このInputDeviceSubsystem
のGetInputDeviceHardwareIdentifier
関数に先程作った関数のデバイス情報を渡すと接続してるコントローラーやキーボード&マウスの情報が取れます。
返ってくる値にあるValuePrimaryDeviceTypeはSwitchで分岐するとこういう情報が取れるみたいです。
カメラやアーケードコントローラー?など、色々な種別が取れるみたいです。
今回は出力された情報をPrintStringでつなげるようにして何のデバイスが返ってきてるのか表示するようにしてます。
結果
上記のBPの状態で、 例えば コントローラーを入力してないとこうなります。
XInputのコントローラーを入力してる状態だとデバッグ情報はこうなります。
Gamepadと表示されているので、コントローラーの入力がされてるのが分かる状態になっています。
そして、DirectInputのコントローラーを接続しているが、RawInputプラグインを入れてないとこうなります。
なんかのデバイスは繋がってますが、それが何のデバイスなのかはわからないみたいです。
Discussion