こんにちは。
以前、VR内で、回転式のドアを開け閉めする方法をご紹介したのですが、
[UE4] VR中にドアを手動で開け閉めする方法
今回は、同様の仕組みを用いて、スライドドアを開け閉めする方法をご紹介したいと思います。
スライドドアのBP以外の、基本的な構成は全て上記の記事内容と同じなので、
スライドドアのBPの作成部分のみの解説となりますので、
それ以外の部分については、以前の記事を参考にしていただけると幸いです。
(1)BP_Door_Slide
BP_Door_Slideの基本的な構成は、以前作成したBP_Doorのものを引き継ぐことになるので、
BP_Doorの子クラスとして、作成します。
1.BP_DoorのChildBlueprintClassの作成
BP_Doorを右クリックして、「Create Child Blueprint Class」を選択し、
BP_Door_Slideという名称にします。

これで、以前BP_Doorに設定した変数やInterfaceは、
新たに追加せずに、そのまま利用することができます。
2.スライドドア用スタティックメッシュコンポーネント
BP_Door_Slideを開いたら、ドアフレームと、ドアプレート用のスタティックメッシュを、
それぞれセットします。

3.ボックスコリジョン
ドアハンドル位置を取得するための、ボックスコリジョンの位置を、
セットしたドアプレートに合わせて、調整します。

コリジョンプリセットは、今回はすでにDoorHandleとなっているため、
設定はそのままで問題ありません。
4.変数
BP_Door_Slideで、新たに追加する変数は下記の3つとなります。
- HandleStartLocation・・・手が、取っ手を握った時点での位置を保存します。型はVectorとなります。
- MoveMaxValue・・・スライドドアの移動の最大値を保存します。型はFloatとなります。
- LastMoveValue・・・ドアから手を離した時点で、ドアが動いた値を保存します。型はFloatとなります。

5.関数
①MakeMaxMoveValue
内容としては、DoorPlateのバウンズのサイズから、
スライドドアの最大移動値を取得します。

②MakeVectorMoveValue
内容としては、ドアのY方向に対しての、
取っ手を握った手の移動量を取得します。

中身の説明は、下記画像のようになります。

③MoveSlideDoor
内容としては、②で取得した移動量を利用して、
ドアプレートを移動させるものとなります。

中身の説明は、下記画像のようになります。

6.イベントグラフ
最後にこれまで作成した変数、関数を用いて、イベントグラフに、ノードを配置していきます。
イベントは、下記の4つから成っています。
- Event BeginPlay
- Event Tick
- Event Open
- Event Close
①Event BeginPlay
Event BeginPlayでは、MakeMaxMoveValue関数をつないで、
ドアの最大移動値を取得します。

②Event Tick
Event Tickでは、Gateノードをはさんで、MakeVectorMoveValue関数と、MoveSlideDoor関数へつなげます。

③Event Open
Event Openでは、取っ手を掴んだ時の手の位置を保存します。
そして、GateノードのOpenへつなぎ、取っ手を握った時に、
Gateが開くようにします。

④Event Close
Event Closeでは、取っ手を離した時のDoorPlateの位置を、
LastMoveValueへ保存します。
そして、Gateを閉じます。

これで、BP_Door_Slideの完成です。

(2)マップへBP_Door_Slideの配置
マップへ、BP_Door_Slideを配置します。

プレイを開始し、ドアの取っ手の位置で、コントローラーのトリガーを引くと、
スライドドアの開け閉めができるようになりました!

ぜひ建築用VR等で、試してみてください!