読者です 読者をやめる 読者になる 読者になる

GameProgrammar's Night

ゲームプログラム系の覚え書き

UnrealEngine4で2Dゲームを作ろう! 「2Dゲームを作るために必要なこと 機能編」

「UnrealEngine4で2Dゲームを作ろう!」の最終回。
 2Dゲームにするための設定などを紹介した「基本編」の続きです。
 UE4の幾多の機能が2Dゲームだと使えるのか使えないのかを紹介します。すべて検証しているわけではありませんので、自分が使った範囲での紹介となります。
 個々の機能の詳細については、ドキュメントを参照してください。

移動(Movement)

 問題なく使えます。

 移動させるには、大きく2つの方法があります。自前で座標計算する方法と、MovementComponentを使う方法です。
 レトロ目な2Dゲーム作るのであれば自前で座標計算するしかありませんが、そうでない時はMovementComponentを使うことができます。
 MovementComponentを使った方法は、加速度がどうしてもついてしまうため、加速度なしの移動が欲しい時は自前で座標計算します。

自前で座標計算する

 ActorのLocationを計算するノードはすべて使えますので、AddActorWorldOffsetなどを使ってActorを動かします。

f:id:katze_7514:20160310200227p:plain

 Sweep引数にチェックを入れることで、Collisionのヒット処理が動くようになります。
 Teleport引数は物理挙動に影響するらしいですが、自分は物理機能は使っていませんのでよくわかりません。

MovementComponentを使う

 MovementComponentとは、名前の通り移動を担うコンポーネントのことです。いくつか種類がありますが、2Dゲームで主に使うのは、FloatingPawnMovement(以下FloatingPawn)とProjectileMovement(以下Projectile)の2つになります。

FloatingPawn

 名前の通り、浮いているポーン用のMoveCompです。一番コンパクトに実装されているMoveCompで、2Dゲームには必要十分な機能を持っています。

 FloatingPawnは座標を与えて移動するのではなく、速度のようなベクトルを与えることで移動を行います。

f:id:katze_7514:20160118181427j:plain

※解説書きました
katze.hatenablog.jp

Projectile

 Projectile(投射)の名前の通り、弾などの投射物の移動計算を行います。バウンドさせることもできるので、跳弾させることも簡単にできます。
 2Dの場合、弾もFloatingPawnで問題ないといえばないのですが、Projectileは誘導機能があるので、誘導弾を作る時はProjectileを使うことができます。
 ただ、実は誘導計算がいまいちで、移動し続けるActorに対して誘導する際に、一度外れてしまうと弾の軌道がなかなか目標に近づいていきません。そのため、誘導をONにした弾は一定時間で消えるように設定しておくのをお勧めします。

その他

 3Dゲーム(FPS/TPS)のキャラクター用にCharacterMovementComponentというのもありますが2Dゲームにはオーバースペックだと思います。

 また、MovementComponentは、対応するActorの座標のフレーム間差分も考慮した速度を発生させるので、SetActorLocationなど直接座標を変更するノード併用する時は注意が必要となります。

衝突(Hit/Collision)

 問題なく使うことが出来ます。
 2D専用の仕組みは準備中ということなので、3D用の仕組みをそのまま流用して使います。Collisionや物理による移動方向をゲームとして使っている平面に制限しておくと良いと思います。

 ただ、移動しているブロックするCollision同士がぶつかった場合、片方のCollisionがもう片方のCollisionに乗り上げてしまうことがある挙動を確認しています。移動方向を制限していても発生します。乗り上げてしまうと、高さ方向が合わなくなるので、次からブロックしなくなってしまいます。
 ちゃんとした解決策はまだ見つけられていないのですが、ブロックを検出した際に乗り上げたかをチェックして元に戻す処理がいるかもしれません。

ナビゲーション(NavMesh)

 問題なく使えます。

 NavMeshに従って移動を行うMoveTo系ノードは、FloatingPawn(もしくはCharacterMovementComponent)を要求しますので、NavMeshで動作させるPawnには、それらを追加しておく必要があります。

Particle

 問題なく使えます。

 パーティクルの向きを速度に合わせて回転させるPSA_Velocity設定が、正射影カメラだと正しく動かないバグがあります。
AnswerHubではUE4.9で修正したとありますが、実際にはまだ修正されていません。

BehaviorTree

 問題なく使えます。

 Paper2D用のTaskなどは用意されていませんので、DecoratorやTaskはすべて自作する必要があります。

UMG

 問題なく使えます。

 ドットバイドット表示にも関わりますので、DPIスケーリング設定は忘れずにしておきましょう。

Audio

 問題なく使えます。

 2Dだと距離減衰などをさせると逆に違和感が生まれることもありますので、切ってしまって良いと思います。

Decal

 使うことができません。

 描画コンポーネントの対応が必要ようなようで、Paper2D/SpriteStudio共に対応していませんので、使うことができません。

Physics

 2D用のPhysicsは準備中ですので、3DのPhysicsを流用することになりますが、使うことはできます。

 まだちゃんとPhysicsを使っていませんので、どんな罠があるかはわかりません。