
こんにちは。 ゲーム事業本部 エンジニアの岸下です。
今回はアドグローブのゲーム事業部内で定期的に開催しているUnreal Engine(以後、UE)勉強会について、私が発表した内容(Moverプラグインの特徴や一部機能)についてご紹介します。
目次
- はじめに
- Moverプラグインとは
- MoverとUCharacterMovementComponentとの違い
- Moverプラグインの導入方法
- サンプルからMoverの基本的な機能を確認する
- 動作のための前提知識
- 動かす事ができるActorについて
- オーナーのコリジョン設定に関する変更点
- CMCでよく使用していたパラメータについて
- MovementModeについて
- Transitionについて
- さいごに
はじめに
「UE勉強会って何?」「どんなことをやっているの?」などの紹介については、以下の記事をご参照ください。
今回確認に使用したUEのバージョンは5.6です。
Moverプラグインとは
UCharacterMovementComponentに代わる予定の新しい移動系Componentを含むプラグインです。 (UCharacterMovementComponentは以後CMCと省略します。)
公式ページからの引用になりますが、NetworkPredictionプラグインやChaosNetworked Physicsシステムを使用して、ネットワークの専門知識無くロールバックなどの挙動を作成できるようになっているようです。
引用元 https://dev.epicgames.com/documentation/ja-jp/unreal-engine/mover-in-unreal-engine
こちらのネットワーク関係の機能も大きな変更なのですが、今回は導入や初歩的な使い方などの基本的な部分をご紹介いたします。
MoverとUCharacterMovementComponentとの違い
CMCとの違いはたくさんあるのですが、一部特徴的な違いは以下の通りです。
| UCharacterMovementComponent | Mover | |
|---|---|---|
| 対象Actor | ACharacter | Actor制限なし |
| 操作対象 | UCapsuleComponent | CollisionComponent制限なし |
| MovementModeの追加しやすさ | 追加が難しい | 追加しやすい |
| 遷移方法 | SetMovementMode関数 | Transitions等複数ある |
| 物理ベースの移動 | 不可 | 可能 |
これらの他にも、MoverではInstant EffectsやMovement Modifiers等新しい機能も存在しています。
Moverプラグインの導入方法
プラグインメニューから「Mover」と検索し、上から二番目の「Mover」にチェックを入れるだけで問題ないです。

サンプルを確認する場合は「MoverExamples」というプラグインも有効にして下さい。
今回の記事内でも主にこちらの内容から機能を確認していく流れになります。

「入れたはいいけれど、どこから見ればいいかわからない…」という場合はコンテンツブラウザの設定から「エンジンコンテンツ」と「プラグインコンテンツ」のチェックを入れてみて下さい。
[チェック前]

[チェック後]
サンプルからMoverの基本的な機能を確認する
ここからはサンプルを元に機能や使用するための手順を確認していきます。
主な紹介項目
- 動作のための前提知識
- 動かす事ができるActorについて
- オーナーのコリジョン設定に関する変更点
- CMCでよく使用していたパラメータについて
- MovementModeとTransitionについて
動作のための前提知識
必要なComponent
最初の前提として、動作させたいActorには「UMoverComponent」の追加が必要になります。
こちらはCMCの代替Componentという認識で問題ないと思います。
詳しくは後述しますが、今までCMCで行っていた移動速度やジャンプ力等も設定できます。
また、今までACharacterを継承していたようなActor(長くなるため以後CharaActorとします)用に「UCharacterMoverComponent」というUMoverComponentを継承したコンポーネントもあるため、そのような場合は「UCharacterMoverComponent」の方を使用します。
入力周りの処理
Actorに対して、直接の操作やAIによる動作を組み込みたい場合にはIMoverInputProducerInterfaceを継承する必要があります。
FCharacterDefaultInputsという構造体に入力やAIからのパラメータを取り出しコンテナに格納する形です。
これらの処理は、サンプルのAMoverExamplesCharacter::OnProduceInput関数等が参考になります。
動かす事ができるActorについて
CMCとは大きく違う点として、MoverはActorであれば基本的になんでも動かすことができるという特徴があります。
例としてサンプルの中の「BP_SplineFollowerPlatform」を見てみます。
このBPはSplineに沿って動く足場の機能を持っているのですが、所持しているComponentで動作に必要な物は「Cube」「Spline」「Mover」程度です。
ACharacterを継承しているわけでもなく、カプセルコリジョンやスケルタルメッシュを持っているわけでもありませんが、問題なく動作しています。
オーナーのコリジョン設定に関する変更点
上の項目でも少し触れましたが、Moverではオーナーのコリジョンがカプセル以外でも動作可能です。
四足歩行の動物等の非人型のCharaActorにも使用可能なので、Moverを使用するメリットの一つになりそうです。
こちらの画像のように、通常カプセルコリジョンを持っているところをボックスコリジョンへ変更したりもできます。
一点注意としては、標準の歩きや落下などのMovementModeでは、床のチェック時にCapsuleを参照しているためクラッシュします。
(具体的にはUWalkingMode::SimulationTick_Implementation関数内でUFloorQueryUtils::FindFloorを呼び出しており、その中のUFloorQueryUtils::ComputeFloorDist関数がカプセルを参照しています。)
カプセルコリジョン以外で歩きや落下のMovementModeを使用したい場合は独自実装が必要になります。
CMCでよく使用していたパラメータについて
CMCでよく使用していたパラメータとして、最大速度や摩擦、ジャンプ力等があると思いますが、それらの設定はMover内の「SharedSettings」という項目で設定することができます。
サンプル及びデフォルトでは「UCommonLegacyMovementSettings」クラスが設定項目用のクラスとして使用されています。
見覚えのあるパラメータが並んでいますが、こちらはCMCの設定項目を再現しているクラスになります。
また、「IMovementSettingsInterface」を継承する形で新規に設定用のクラスを作成することで、自身で好きなように設定項目をカスタマイズすることも可能です。
「SharedSettings」は複数の設定用クラスを設定可能で、MovementMode毎に切り替える等任意の条件で使い分ける、複数使うこともできます。
MovementModeについて
「歩く」「落ちる」等、モードごとにどのような動き、どのような設定で動作するかを作成するためのものです。
CMCにも同様の物があったのでこちらは馴染み深いかと思います。
MoverではMovementModeは配列で管理され、モードの追加や設定の変更がしやすくなっています。

Moverプラグインでは、「Walking」「Falling」「Flying」などのCMCで用意されていたMovementModeと、それらの物理版等の派生版が用意されています。
Examplesでは、「ZipliningMode」「FollowPathMode」「FollowSplineMode」が用意されており、それぞれ何かに追従して動くものになっています。
「動かすことができるActorについて」の項目で触れました、動く足場「BP_SplineFollowerPlatform」は「FollowSplineMode」が使用されています。
MovementModeの切替方法に関して
Moverでは様々なMovementModeの切替方法が用意されています。
一例ですが、
- Transition
- InstantEffect
- MovementMode内のSimulationTick_Implementation関数のOutputState引数
- UMoverComponentのQueueNextMode関数
…等々です。
これらの変更は「UMovementModeStateMachine」内で遷移管理されており、そちらの中でどのような処理が行われているかを確認することができます。
また、CMCではSetMovementModeにて関数内部で直接切替していましたが、Moverでは切替を予約しておくような間接的な切替しかできなくなりました。
Transitionについて
MovementModeを切り替える条件を設定する専用のクラスです。
遷移条件を実装しUMoverComponent上で設定することで、MovementMode間の遷移処理が作成可能です。
また、特定のMovementModeに関連付けて、そのMovementModeが有効な間のみ判定することも、グローバルとしてMovementModeに関係なく常に判定を行うこともできます。
画像はサンプル上でのTransition設定部分です。
上が特定のMovementModeのみ、下がグローバルで設定されたものです。

Transitionを使用するには
Transitionを追加、使用する流れは以下のような形です。
1. UBaseMovementModeTransitionを継承する形でクラスを作成する
2. Evaluate_Implementationをoverrideし、そこに遷移条件を実装する
3. 任意の場所に作成したTransitionを設定する
新規追加されたMovementModeやTransitionの使い方は、Examples内のジップライン関係のものが参考にしやすいです。
さいごに
以上、Moverプラグインの特徴や一部機能のご紹介でした。
Moverは現状公式から導入資料のようなものが用意されておらず、使い方はサンプルを見ながら学ばないといけないため学習のための時間的コストは高いです。
ですがその分できることも増えており、将来的にはCMCに代わる予定のComponentですので、学んでおいて損はしないかと思います。
今回ご紹介させて頂いた内容はほんの1部ですので、アップデートで仕様が変わったり、私の理解が深まったりした際はまたご共有させて頂ければと思います。
最後まで読んで頂きありがとうございました。
アドグローブでは、さまざまなポジションで一緒に働く仲間を募集しています!
詳細については下記からご確認ください。みなさまからのご応募お待ちしております。