こんにちは!新米えんじにゃーの遠藤です!
今回はゲーム中にキーボードやコントローラーなどの入力機器を使わずにプログラムでキー入力を行う方法を紹介します!
まずは一般的な入力イベントを使用方法ですが、例えばゲーム中にキーボードのSpaceBarを入力するとSpaceBarに関連した入力イベントに通知されます。
ThirdPersonテンプレートではプロジェクト設定のInputBindingsでJumpの項目にSpaceキーが設定されているので、実行中にSpaceBarを入力するとInputAction Jumpイベントに通知されそれ以降の処理の結果、キャラクターがジャンプします。

これを周辺機器などのハードウェアを使わずにソフトウェア的に入力イベントの呼び出しを行ってみます。
PlayerControllerクラスにはモバイルゲームで使うタッチ入力やVRゲームで使うモーションコントローラーの入力を呼べる関数などインプット系の関数が用意されています。
|
virtual bool InputKey(FKey Key, EInputEvent EventType, float AmountDepressed, bool bGamepad); virtual bool InputTouch(uint32 Handle, ETouchType::Type Type, const FVector2D& TouchLocation, FDateTime DeviceTimestamp, uint32 TouchpadIndex); virtual bool InputAxis(FKey Key, float Delta, float DeltaTime, int32 NumSamples, bool bGamepad); virtual bool InputMotion(const FVector& Tilt, const FVector& RotationRate, const FVector& Gravity, const FVector& Acceleration); |
これらの関数はPlayerInputやHMDDeviceのインプット系の関数を呼ぶ処理が書かれています。つまり、これらの関数を呼び出してあげるだけ!簡単!
今回はこの中でもInputKeyを呼び出す関数を作り、Blueprintに公開しました。

InputKey関数の引数にそのまま渡しているだけですが、bGamepadは使われていなかったのでMyInputKeyの引数として公開はしていません。
Keyを「W」にし、EventTypeを「Pressed」にするとキャラクターは前に歩き出し、「Released」イベントを呼ばない限りは歩き続けます。
Amount Depressedには入力の強弱を0~1の値で入れます。
入力を継続させる時間や入力の強弱など気を使う部分は多そうですが、簡易的なオートプレイなどでしたら作れそうです!
活用していただけたら幸いです。