こんにちは。
以前、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という名称にします。
![](https://historia.co.jp/wp/wp-content/uploads/2018/01/1-300x174.png)
これで、以前BP_Doorに設定した変数やInterfaceは、
新たに追加せずに、そのまま利用することができます。
2.スライドドア用スタティックメッシュコンポーネント
BP_Door_Slideを開いたら、ドアフレームと、ドアプレート用のスタティックメッシュを、
それぞれセットします。
![](https://historia.co.jp/wp/wp-content/uploads/2018/01/2-300x184.jpg)
3.ボックスコリジョン
ドアハンドル位置を取得するための、ボックスコリジョンの位置を、
セットしたドアプレートに合わせて、調整します。
![](https://historia.co.jp/wp/wp-content/uploads/2018/01/13-300x202.png)
コリジョンプリセットは、今回はすでにDoorHandleとなっているため、
設定はそのままで問題ありません。
4.変数
BP_Door_Slideで、新たに追加する変数は下記の3つとなります。
- HandleStartLocation・・・手が、取っ手を握った時点での位置を保存します。型はVectorとなります。
- MoveMaxValue・・・スライドドアの移動の最大値を保存します。型はFloatとなります。
- LastMoveValue・・・ドアから手を離した時点で、ドアが動いた値を保存します。型はFloatとなります。
![](https://historia.co.jp/wp/wp-content/uploads/2018/01/3-1.jpg)
5.関数
①MakeMaxMoveValue
内容としては、DoorPlateのバウンズのサイズから、
スライドドアの最大移動値を取得します。
![](https://historia.co.jp/wp/wp-content/uploads/2018/01/4-300x145.jpg)
②MakeVectorMoveValue
内容としては、ドアのY方向に対しての、
取っ手を握った手の移動量を取得します。
![](https://historia.co.jp/wp/wp-content/uploads/2018/01/5-300x141.jpg)
中身の説明は、下記画像のようになります。
![](https://historia.co.jp/wp/wp-content/uploads/2018/01/1-1-300x141.jpg)
③MoveSlideDoor
内容としては、②で取得した移動量を利用して、
ドアプレートを移動させるものとなります。
![](https://historia.co.jp/wp/wp-content/uploads/2018/01/6-1-300x139.jpg)
中身の説明は、下記画像のようになります。
![](https://historia.co.jp/wp/wp-content/uploads/2018/01/6.1-1-300x139.jpg)
6.イベントグラフ
最後にこれまで作成した変数、関数を用いて、イベントグラフに、ノードを配置していきます。
イベントは、下記の4つから成っています。
- Event BeginPlay
- Event Tick
- Event Open
- Event Close
①Event BeginPlay
Event BeginPlayでは、MakeMaxMoveValue関数をつないで、
ドアの最大移動値を取得します。
![](https://historia.co.jp/wp/wp-content/uploads/2018/01/8-300x127.jpg)
②Event Tick
Event Tickでは、Gateノードをはさんで、MakeVectorMoveValue関数と、MoveSlideDoor関数へつなげます。
![](https://historia.co.jp/wp/wp-content/uploads/2018/01/14-300x130.jpg)
③Event Open
Event Openでは、取っ手を掴んだ時の手の位置を保存します。
そして、GateノードのOpenへつなぎ、取っ手を握った時に、
Gateが開くようにします。
![](https://historia.co.jp/wp/wp-content/uploads/2018/01/16-300x94.jpg)
④Event Close
Event Closeでは、取っ手を離した時のDoorPlateの位置を、
LastMoveValueへ保存します。
そして、Gateを閉じます。
![](https://historia.co.jp/wp/wp-content/uploads/2018/01/3ed863717eb290d3df169ebdb70df75e-300x129.jpg)
これで、BP_Door_Slideの完成です。
![](https://historia.co.jp/wp/wp-content/uploads/2018/01/7-300x154.jpg)
(2)マップへBP_Door_Slideの配置
マップへ、BP_Door_Slideを配置します。
![](https://historia.co.jp/wp/wp-content/uploads/2018/01/19-300x229.jpg)
プレイを開始し、ドアの取っ手の位置で、コントローラーのトリガーを引くと、
スライドドアの開け閉めができるようになりました!
![](https://historia.co.jp/wp/wp-content/uploads/2018/01/5-300x176.png)
ぜひ建築用VR等で、試してみてください!