#はじめに
現在作っている2Dのパズルゲームを作っていて、いい感じの2Dカメラができたので紹介します。奥の方にタイマー表示できた!
— Naotsun@C++&UE4勉強中 (@Naotsun_UE) July 30, 2019
大きいから急かされてる感が増していいかもしれない
あとは、簡単にステージ全体の色相が変わるようにしてみた#UE4 pic.twitter.com/LU2SRsufDy
具体的にどんなカメラかというと、
・独立したアクターで実装
・指定したポイント(アクター)へ追従させることができる
・なんかいい感じにふわっと追従してくれる(上の動画を参照してくださいw)
・カメラの移動範囲を指定できる
- まず、現在プレイヤーのクラスのコンポーネントで実装されているカメラを削除する。(削除しなくても動作しますが必要ないので消します)
- 独立したカメラにするのでカメラ用のアクタークラスを作成します。
- 作成したクラスのコンポーネントを上の画像のようにします。プレイヤーのクラスにあったものと同じ構造です。
- BeginPlayイベントからこのように処理を作ります。SetViewTargetWithBlendノードを使用すると使うカメラを切り替えることができます。
- 次に使用する変数を作成しておきます。TargetActorはActor型で、その他は全てfloat型です。
~Limmitは上下左右の移動できる範囲を座標で指定します。
AimSpeedはカメラが追従する速さです。
TargetActorは名前の通り追従する対象のアクターです。
- 次にTickイベントからこのように処理を作ります。処理の流れとしては、
- IsValidノードで対象のアクターがあるかを確認
- そのアクターの座標を取得
- Clampノードで移動範囲より外側に行かないように制御
- VInterpToノードのCurrentにカメラの座標、Targetに対象のアクターの座標、DeltaTimeにTickイベントのDeltaSeconds、InterpSpeedに先程作成したAimSpeedを接続(AimSpeedはなくてもいいですが後から値を変える時に楽なので変数にしました)
- SetActorLocationノードを使用して、VInterpToノードの戻り値の座標へ移動
となります。VInterpToノードのInterpSpeedについて少し注意点があり、数値が小さいほどゆっくり追従するようになりますが0の時は止まるのではなく対象のアクターの移動に合わせて動くようになります。(プレイヤーのクラスに実装されているカメラみたいな動き)
#おまけ
###移動範囲制限無しバージョン
###2Dアクションゲームでよくある向いてる方向よりのカメラ
プレイヤーのクラスにカメラに追従させるためのクラスを追加してプレイヤーの前方に配置し、TargetActorにこのクラスを指定する。
↑ 向いている方向に寄ったカメラ
↓ が普通の状態のカメラ
#おわりに
UE4ではプレイヤーのクラスにカメラが実装されていますが、UE4以外では独立して実装するのが一般的だそうです。また、独立しているため追従する対象を動的に変更することができるため、注視するような処理なども作りやすくなるかと思います。