スクリーンセーバーのようなイベントの発生方法

一定時間操作がない場合にスクリーンセーバーのように組んだシーンレベルを動かすといったものを考えています。 一定時間キー入力がない場合や、HMD等からの入力値の変化がない場合のイベント発生を発生するような機能ノードはありますか?

たぶんそのようなノードはないかもしれません。

ですが、いくつかの処理を組み合わせて作れると思いますよ。

まずいくつか機能を分解して説明します。

1.操作入力を監視

2.最後に入力を行った時間から一定時間監視を行う

3.レベル切り替え(サブレベルもしくはオープンレベル)

①についてですがPlayerControlBPを作りそこで「get input ◯◯」で監視を行います、入力が行われたらフラグを立てます。

②Tickイベント等でフラグを監視してフラグがONになったらタイムラインなどでで指定時間入力があるかを監視します。

監視中に入力があった場合は再度タイムラインを最初から再生してあげれば良いです。

③タイムライン終了時に「openLevel」もしくは「Load Stream Level」でサブレベルを呼ぶと良いと思います。

単純にスクリーンセーバーを作りたいのであればUMGやHUDを使ってアニメーションを組むのも一つの手ですよ。

スクリーンセーバーを出すためだけにLevel移動をする必要は無いかもしれません。

それから、他にも良い手はあると思いますがサンプル貼っておきますね。

今回はひとつにまとめるためにこのような実装にしましたが、キャラクターBPでボタンを押した時と離した時でフラグのONOFFとかでもいいかもしれません。

ありがとうございます。
なるほど、やはりそういったノードはありませんか。
サンプルありがとうございます、こちらをもとに試行してみます。

キー入力の監視は、入力の可能性のある各キーそれぞれ準備する必要があると考えればいいでしょうか。

一番簡単な方法ですが、設定>プロジェクト設定>ActionMappings

こちらに入力するであろうキーを全て登録してKeyInputとでも名前を付けておいて管理するのが良いかと。

なるほど、ここでのグループ設定名が引用できるのですね。
各キー入力を「AND」ノードで条件設定する方法を考えていましたが、
こちらの方が簡単ですね、すごく初歩的なことで、すみません。勉強になります。

ActionMappingsでのご教示いただいた方法でやってみましたが、
やり方が間違っているのかもしれませんが、
ActionMappingsで設定したインプットイベント発生をすると、キーに割り当てた本来の動きができなくなってしまいました。

そこで、やはりget inputをつかって添付のようにしてみました。
一定期間の入力イベントがないときに、oculusのステレオ表示をオフにし、
モニター画面はスクリーンセーバー的なもの表示するイベントの発生する流れができそうです。
解決の糸口が見えたので大変助かりました。

解決されたようで何よりです。

上手く行かなかったとのことですが、もし差支えが無ければどのようにBPを組まれたのか見せていただけないでしょうか?

こちらで試してみたところ、アクションマッピング2種類と直接キーイベント1種類の3種類全て動作したので気になっています。

プレイヤーコントローラーBPに全て実装しました、サンプル置いておきます。

53110-view.png

うまくいかなかったので、BP自体組み直ししたので、
再度あとで試行してみますが、おおよそ下記の流れです。

FirstPersonのデフォルトシーンを使って、
新規でプレイヤーコントローラーBPにアクションマッピングのキーイベントを設けたところ、

たとえば、移動のwsadのMoveForward等や、Jump等、その名前を利用したイベントを使うと、
キャラクタ本体の動きができなくなるようでしたので、
入力イベントとしてどちらかに引っ張られるのかなとも思ったのですが、、、。

そういうことですね、それは実装の問題なだけです。

PlayerControllerはキャラクタBPより上位のレイヤーに位置する存在のためそのような挙動をするのだと思いますよ。

この場合キャラクターBPにキー監視のアクションマッピングを実装してあげれば良いだけかと。