【UE5】BPで自動ドアを作成する
意外と使わない自動ドアを実装します。
成果物
離れてから2秒経過で閉まるようにしています。

閉まっている途中に近づいてもすぐ開きます。

開発環境
- Windows11
- UE5.4.4
アクターの見た目とコンポーネント
コンポーネントの追加からCubeを二つ配置、それぞれLeftDoor、RightDoorという名前に変更し、扉っぽく変形します。
アクターの中心で扉が重なるように配置し、中央にBox Collisionを配置します。
このBox Collisionに入ると扉が開くようにするので、いい感じに調整してください。

BPの中身
Beginplay
まずはBeginPlayからです。
両扉の初期位置と開いたときの位置を決めています。
必要な変数は以下の通りです。
MoveDistanceは初期値で100を入れています。
- MoveDistance(扉が動く距離)
- RightDoorStartPosition
- RightDoorEndPosition
- LeftDoorStartPosition
- LeftDoorEndPosition

開く処理
横に長いので2分割しています。

上の続き

タイムラインの中身
ここで決めた時間が開く速度に影響します。
Timeの値は自由ですが、Valueは0から1で固定です。

閉じる処理
ここのタイムラインのFinishedが開く処理側のタイムラインのReverseと繋がります。

タイムラインの中身
離れてから何秒後に閉まるかを設定します。
2つ目のKeyはTime、ValueをLengthと同じ値にします。

一応全体

軽く解説
MoveDistance変数をInstance Editable = trueにしておけばインスタンス毎にどのくらい扉が開くかを設定できるようになります。(使う場面は想像できていない)
UE経験者の方はここで解散ですが、そうでない方はおそらくLerpの部分で疑問が出てくるかと思いますのでそこを軽く説明します。
なぜLerpを入れているかですが、Lerpを入れずにTimeLineから出力される値をそのままMake Vectorに突っ込んで、その状態で何回か扉を開閉させると累積誤差によって少しずつ扉がずれていきます。
これを回避するためのLerpです。
Lerpがわからない方はこちらの記事がとてもわかりやすいので参考にしてください。
TimeLineの出力をAlphaに入れることでA地点からB地点まで滑らかに扉を移動させることができ、累積誤差も発生しなくなるということです。
終わり。
Discussion