LoginSignup
3

More than 1 year has passed since last update.

CableComponentを使ってグレーマンを動かす

Last updated at Posted at 2019-12-24

はじめに

この記事はUnreal Engine 4(UE4) #2 Advent Calendar 2019の最終日の投稿記事です。

某アニメのあの動きを簡単にですが再現してみようと思い、調べながらですがThirdPersonで実装してみました。
UEのバージョンは4.21.2で実装しました。

  • 出来上がった物…分かりづらいですが、グレーマンがワイヤーに引っ張られて動いています。 SolidProject - Unreal Editor 2019-12-08 18-35-22.gif

実装したプロジェクトはこちらにアップロードしてあります。
[Space]キー:ワイヤーを発射
[D]キー:ワイヤーを切断
[G]キー:ワイヤーの引っ張り状態を変更する

調査

ワイヤーの表現で良さそうなのがないかと調べてみたところケーブルコンポーネントがあったのでこちらを使用しました。

CableComponentとは

文字通りですが、ケーブル用のコンポーネントとなっており、パラメータ次第で様々なケーブルになってくれます。
画像はケーブルの長さや幅、重力等を変えています。
WireAction - Unreal Editor 2019-12-15 22-04-07.gif

今回のワイヤーで使用したパラメータの解説をします。

プロパティ名 パラメータ解説 備考
Attach Start ケーブルの始端のアタッチするかのフラグ
Attach End ケーブルの終端をアタッチするかのフラグ 今回はAttach End To関数でグレーマンにアタッチしています。
Cable Length ケーブルの長さ
Num Segments ケーブルのセグメント数 1だと曲がらないワイヤーになり、2だと1回曲がるワイヤーになります。数字が大きいほど滑らかに曲がってくれます。

他にもパラメータがあり、ゲーム中動的に変更ができるので様々な使い方ができそうです。

実装の前準備

ドキュメントにも記載されていますが、CableComponentを使うには[編集]→[Plugins]→[Rendering]→CableComponentを有効にする必要があります。
image.png

実装

ワイヤーが壁に当たったらグレーマンが引っ張られるような制御をしたいので、BP_Wireというアクターを追加しています。

ワイヤーの移動処理にはProjectileMovementを使用しており、壁に当たったかを判定するためのSphereを追加し、ワイヤーとして扱うCableComponentも追加しています。
コメント 2019-12-08 194032.png

BP_Wire
BeginPlayでSet Attach End Toで終点をキャラクターにアタッチします。
image.png

始点に置いているスフィアが壁に当たったら壁ヒットフラグを立てています。
image.png

壁に当たるまではワイヤーを伸ばし続けて、壁に当たったらPull関数内でグレーマンを引っ張っています。
image.png

Pull Update関数の下記の部分でグレーマンを動かしています。
AddForceのみで移動をすると移動が速くなってしまうので、Velocityをある程度の速度でクランプをして制御しています。
image.png

ワイヤーの伸ばす位置

こちらに関してはいい方法が思いつかなかったので、グレーマンの中央から外に向かって壁に当たるまで総当たりしています・・・。
そのため、地形が限定的でないと使えない状態になっています。
image.png

おわりに

カプセルか円柱、DrawDebugLine等でワイヤーを表現しようと思ってましたが、CableComponentがあったので今回使ってみましたが別の使い方としても色々できそうでした。

実際にプレイしてもらうと分かりますが、操作性に難があるのでワイヤーの伸ばす位置と合わせて良い方法が閃けばどこかのタイミングで試してみたいと思います。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
3