みなさんこんにちは!情熱開発部プログラム課の金澤です。
気温の上下が激しい時期になりますが皆様いかがお過ごしでしょうか?
油断して半袖を選んでしまうと肌寒さで震えることもありますが、ようやく夏の気配も感じられるようになりましたね!
そんなわけで今回はUE5を使ってコントローラーを様々な方法で振動させたいと思います。
なお今回使用しているバージョンはUE5.4.2になります。
ForceFeedbackEffectを作ってみよう
まずはForceFeedbackEffectを使用するやり方です。
そもそもForceFeedbackEffectとは何かというと、振動のパターンを作成して保存できるアセットになります。
左右それぞれに大小の振動を設定できるため、様々なパターンに対応することが出来ます。
では実際にForceFeedbackEffect作ってみましょう!
ForceFeedbackEffectを作成するには以下の手順になります。
- コンテンツブラウザで右クリックをして入力>フォースフィードバックエフェクトを選択します
- 作成したアセットを開いてChannel Detailsを確認
- 振動させたい箇所にチェックを入れ、カーブに好きなようにキーを入れましょう
チェック項目は以下のようになっています
Affects Left Large:左の大きなモータを使用するかどうか
Affects Left Small:左の小さなモータを使用するかどうか
Affects Right Large:右の大きなモータを使用するかどうか
Affects Right Small:右の小さなモータを使用するかどうか
そうして保存した後、アセットアイコンにある再生ボタンを押すと作成したパターンでコントローラーが振動しているのを確認できます。
ForceFeedbackEffectを再生させよう
では次にこの作ったForceFeedbackEffectをゲーム内で使うための方法です。
まず、コントローラーを振動させたい場合はPlayerControllerを使用する必要があります。
そのうえでForceFeedbackEffectを再生させたい場合は、ClientPlayForceFeedbackという関数を使用します。
ClientPlayForceFeedbackノードの説明をすると
Target:プレイヤーコントローラーと接続します
ForceFeedbackEffect:作成した再生させたいForceFeedbackEffectを設定します
Tag:タグをつけたい場合に使用します
Looping:これをTrueにすると振動がループします
ではこれで一度実行してみましょう!
すると先ほど設定したキーを押すたびにForceFeedbackEffectに設定した振動が発生すると思います。
なおLoop等で明示的に停止させたい場合はClientStopForceFeedbackを使うと停止させることが出来ます。
以下のようなノードにするとKキーを押している間は振動し続け、離すと停止するといった形になります。
PlayDynamicForceFeedbackを使ってみよう
ではForceFeedbackEffectを作らなければコントローラーを振動させられないのでしょうか?
それは違います!
ForceFeedbackEffectのような複雑なパターンは作れませんが、単調な振動であればこのPlayDynamicForceFeedback関数を使うことで起こすことが出来ます。
使い方としてはClientPlayForceFeedbackとほとんど変わらず、PlayerControllerをターゲットとして使用します。
PlayDynamicForceFeedbackノードの説明としては
Target:プレイヤーコントローラーと接続します
Intensity:振動の強さを0.0~1.0の間で設定します
Duration:振動を再生する長さ。-1.0で停止命令されるまで振動し続けます
なので例えばこのようにコントローラーのトリガーの押し具合によって振動の強さを変えるようなこともできます。
実行するとトリガーの押し具合によって振動の強さも変わることが分かると思います。
ForceFeedbackComponentで減衰を使いこなす
さてここまで2つの振動を引き起こす方法をご紹介いたしました。
上記の二つは主に操作に合わせた振動の引き起こしだったのですが、何かに近づいたときに振動させたい!などアクターに合わせて振動を引き起こしたい瞬間などもあるのではないでしょうか?
そんな時に使えるのがForceFeedbackComponentになります。
という訳でこちらご用意しました!
ロジカルビー太郎くんとロジカルビー子ちゃんです。
そしてロジカルビー子ちゃんはとても緊張しいなので、ロジカルビー太郎くんに近づくと震えが止まらなくなります。
それをコントローラーの振動で再現してみたいと思います。
では早速ロジカルビー太郎君にForceFeedbackComponentをつけてみましょう!
コンポーネントの追加からForceFeedbackComponentを選択し、
詳細にあるForceFeedbackEffectから作成したForceFeedbackEffectを選択しましょう。
この状態で一度ゲームを実行してみます。
するとゲーム開始時からどれだけビー太郎君から離れても作成したForceFeedbackEffectが再生され続けていると思います。
これでは近づいた時だけ震えてしまうと言えませんね。
そんな時に使えるのが減衰設定になります!
詳細タブのアテニュエーションタブにあるOverrideAttenuationにチェックを入れると、AttenuationDistanceタブが出てきます。
出てきたAttenuationDistanceタブを説明すると
減衰関数:減衰の比率を決める関数です
減衰形状:減衰の形を決められます
減衰最短距離:最大で振動する距離の設定です
フォールオフ距離:振動を開始する距離、ここで設定した距離以上離れると振動しません
という訳で今回は減衰最短距離を150、フォールオフ距離を400に設定してみます。
するとビー太郎くんに近づくとドンドン振動が強くなっていくのを感じられるかと思います。
これで成功ですね!ビー太郎くんに近づくと震えが止まらなくなります!
まとめ
という訳で今回は三種類の振動方法についてご紹介させていただきました。
操作をキーにしたパターン再生が得意なClientPlayForceFeedback
同じく操作に合わせて単純な振動を起こせるPlayDynamicForceFeedback
最後にアクターをトリガーに出来るForceFeedbackComponent
それにForceFeedbackEffectの振動パターンをたくさん作ればそれだけでもゲームに臨場感が出てくると思います。
皆さんもゲームのシチュエーションに合わせて是非使い分けてみてくださいね!
参考サイト
フォース フィードバックと Force Feedback コンポーネント
【UE4】コントローラを振動させる
[UE5]コントローラーを振動させてみよう!
【免責事項】
本サイトでの情報を利用することによる損害等に対し、
株式会社ロジカルビートは一切の責任を負いません。