Posted at

UE4でいい感じの2Dカメラを作る


はじめに



現在作っている2Dのパズルゲームを作っていて、いい感じの2Dカメラができたので紹介します。

具体的にどんなカメラかというと、

・独立したアクターで実装

・指定したポイント(アクター)へ追従させることができる

・なんかいい感じにふわっと追従してくれる(上の動画を参照してくださいw)

・カメラの移動範囲を指定できる

みたいな感じです。


作ってみる

1.PNG

1. まず、現在プレイヤーのクラスのコンポーネントで実装されているカメラを削除する。(削除しなくても動作しますが必要ないので消します)

2.PNG

2. 独立したカメラにするのでカメラ用のアクタークラスを作成します。

3.PNG

3. 作成したクラスのコンポーネントを上の画像のようにします。プレイヤーのクラスにあったものと同じ構造です。

4.PNG

4. BeginPlayイベントからこのように処理を作ります。SetViewTargetWithBlendノードを使用すると使うカメラを切り替えることができます。

5.PNG

5. 次に使用する変数を作成しておきます。TargetActorはActor型で、その他は全てfloat型です。

~Limmitは上下左右の移動できる範囲を座標で指定します。

AimSpeedはカメラが追従する速さです。

TargetActorは名前の通り追従する対象のアクターです。

6.PNG

6. 次にTickイベントからこのように処理を作ります。処理の流れとしては、


  • IsValidノードで対象のアクターがあるかを確認

  • そのアクターの座標を取得

  • Clampノードで移動範囲より外側に行かないように制御

  • VInterpToノードのCurrentにカメラの座標、Targetに対象のアクターの座標、DeltaTimeにTickイベントのDeltaSeconds、InterpSpeedに先程作成したAimSpeedを接続(AimSpeedはなくてもいいですが後から値を変える時に楽なので変数にしました)

  • SetActorLocationノードを使用して、VInterpToノードの戻り値の座標へ移動

となります。VInterpToノードのInterpSpeedについて少し注意点があり、数値が小さいほどゆっくり追従するようになりますが0の時は止まるのではなく対象のアクターの移動に合わせて動くようになります。(プレイヤーのクラスに実装されているカメラみたいな動き)


おまけ


移動範囲制限無しバージョン

7.PNG


2Dアクションゲームでよくある向いてる方向よりのカメラ

8.PNG

プレイヤーのクラスにカメラに追従させるためのクラスを追加してプレイヤーの前方に配置し、TargetActorにこのクラスを指定する。

9.PNG

↑ 向いている方向に寄ったカメラ


↓ が普通の状態のカメラ

10.PNG


おわりに

UE4ではプレイヤーのクラスにカメラが実装されていますが、UE4以外では独立して実装するのが一般的だそうです。また、独立しているため追従する対象を動的に変更することができるため、注視するような処理なども作りやすくなるかと思います。