春日部つむぎ no ゲーム作ってみよう!【UE5/UE4】 - スプラインでカメラ制御【UE5】


https://youtu.be/p7-ay3_AzHA?si=lraTBMBEcKfBeGuC

00:00 オープニング
00:30 1.Splineアクターの作成
00:43 1-1.Splineコンポーネントの追加
01:03 1-2.Playerの指定
01:33 1-3.スプライン上にカメラを配置
02:00 1-4.最寄りのスプラインポイントの取得
02:52 1-5.次のスプラインポイントへスムーズに移動
04:24 1-6.CameraBoomの設定
05:16 1-7.FollowCameraの設定
06:21 1-8.キャラクターの向き
07:05 2.BP_SplineCameraの配置
08:18 3.使用方法
08:20 3-1.カメラの向き
09:27 3-2.注意点 修正あり
10:05 3-3.キャラクター向き
10:40 3-4.SplinePointの座標
11:11 トップダウンビュー
11:53 横スクロール
12:36 設定ファイル
12:57 エンディング
13:07 カメラの移動を上下または左右に固定するメリットは?

1.Splineアクターの作成 00:30

右クリック>ブループリントクラス>アクターをクリックします。
名前を「BP_SplineCamera」にします。
ファイルを開きます。

1-1.Splineコンポーネントの追加 00:43

コンポーネントパネルの+追加をクリックして
Splineコンポーネントを追加します。



Splineコンポーネントは、
スプラインはポイントとそれらを結ぶセグメントから構成される曲線で、
スプラインの軌跡に沿ってアクターを移動させたり、アニメーションさせたりできます。

1-2.Playerの指定 01:03

カメラをスプラインで制御するキャラクターを指定します。

Get Player Characterノードを配置します。

Cast to BP_ThirdpersonCharacterノードをつなぎます。
右クリックして純粋キャストに変更します。

As BP_ThirdPersonCharacterピンを右クリックして「変数へ昇格」します。
変数名を「Player」にします。

Event BeginPlayノードにつなぎます。



一旦コンパイルして保存します。

1-3.スプライン上にカメラを配置 01:33

キャラクターのカメラをスプライン上に移動させます。

変数Player Getノードを配置します。
変数Player Getノードより、
Follow Camera Getノードを配置します。

Follow Camera Getノードより、
Set World Locationノードを配置します。

Set World Locationノードは、
ワールド空間に指定した位置でコンポーネントを配置します。

Event Tickノードにつなぎます。

1-4.最寄りのスプラインポイントの取得 02:00

プレイヤーキャラクターから最も近いスプラインポイントにカメラを配置します。

コンポーネントパネルより、
SPlineコンポーネントをドラッグアンドドロップします。

SPlineコンポーネントより、
Find Location Closest To World Locationノードを配置します。

Find Location Closest To World Locationノードは、
ワールド空間での位置を与えると、その位置に最も近いスプラインポイントを返します。



プレイヤーの現在位置を取得します。

変数Player Getノードを配置します。
Player Getノードより、
Get Actor Locationノードを配置します。

Return Valueピンを
Find Location Closest To World LocationノードのWorld Locationピンにつなぎます。

Coordinate SpaceをlocalローカルからWorldに変更します。


1-5.次のスプラインポイントへスムーズに移動 02:52

スプラインポイント間のカメラ移動をスムーズにします。

Vinterp Toノードを配置します。
Vinterp Toノードは、現在値からターゲットまでの移動をスムーズにします。



カメラの現在値を取得します。

変数Player Getノードを配置します。
Player Getノードより、
Follow Camera Getノードを配置します。
Follow Camera Getノードより、
Get World Locationノードを配置します。

Get World LocationノードをVinterp ToノードのCurrentピンにつなぎます。

Find Location Closest To World LocationノードをVinterp ToノードのTargetピンにつなぎます。

Delta Timeは、最終Tickからの時間です。

値を記入してもいいのだけど、
Deltaつながりで、Delta Secondsをつなげるとなぜかいい感じになりました。

Event TickノードのDelta Secondsを右クリックして「変数へ昇格」します。

Set Delta Secondsノードが配置されるのでつなぎ変えます。

Delta TimeにDelta Seconds Getノードをつなぎます。

Interp Speedは、補間速度です。0の時Targetまでジャンプします。



右クリックして「変数へ昇格」します。
一旦コンパイルします。
デフォルト値を5.0にします。

後で調整できるように「インスタンス編集可能」を有効にします。

Vinterp ToノードをSet World LocationノードのNewLocationピンにつなぎます。

1-6.CameraBoomの設定 04:24

Custom Eventを配置します。
名前を「Ev_CameraSetting」にします。

Player Getノードを配置します。
Player Getノードより、
Camera Boom Getノードを配置します。
Camera Boom Getノードより、
Use Pawn Control Rotation Setノードを配置します。
Booleanを無効にします。

Ev_CameraSettingノードにつなぎます。

同じように、
Inherit Pitch、Inherit Yaw、Inherit Rollを無効にします。

1-7.FollowCameraの設定 05:16

Player Getノードを配置します。
Player Getノードより、
FollowCamera Getノードを配置します。
FollowCamera Getノードより、
Set Absoluteノードを配置します。

New Absolute Locationを有効にします。
FollowCameraのLocationがワールド位置になります。

Ev_CameraSettingにつなぎます。

Player Getノードを配置します。
Player Getノードより、
FollowCamera Getノードを配置します。
FollowCamera Getノードより、
Set Relative Rotationノードを配置します。
New Rotationピンを右クリックして「変数へ昇格」します。
名前を「CameraRotation」にします。
後で調整用にインスタンス編集可能を有効にします。
一旦コンパイルして保存します。
デフォルト値は「0.0:0.0:0.0」にします。



Event Beginノードの最後に、Ev_CameraSettingノードをつなぎます。

1-8.キャラクターの向き 06:21

Custom Eventを配置します。
名前を「Ev_PlayerRotation」にします。

Player Getノードを配置します。
Player Getノードより、
Set Actor Rotationノードを配置します。

New Rotationピンを右クリックして「変数へ昇格」します。
名前を「PlayerRotation」にします。
後で調整用にインスタンス編集可能を有効にします。

一旦コンパイルします。
デフォルト値は「0.0:0.0:0.0」にします。

Ev_PlayerRotationノードにつなぎます。



Event Beginノードの最後に、Ev_PlayerRotationノードをつなぎます。

コンパイルして保存します。

2.BP_SplineCameraの配置 07:05

SplineCameraを配置せずに、起動してみます。

SplineCameraを配置していない場合は、通常のカメラアングルですね。



車にカメラが当たってますね。



BP_SplineCameraをレベルに配置します。

BP_SplineCameraの初期配置をPlayerStartと同じにすると調整しやすいです。

起動してみましょう。

カメラの視点が変わりまっしたね。



先頭のスプラインポイントを選択して、スプラインを伸ばします。



Altキーを押しながら伸ばすとスプラインポイントを追加できます。



スプラインポイントを移動させると、緩急が付けられたりします。

3.使用方法 08:18

3-1.カメラの向き 08:20

カメラのデフォルトの向きはワールド座標のX矢印の向きです。



詳細パネル>デフォルト>CameraRotationでカメラを回転できます。

Z軸回転で横方向に向きを変えます。





Y軸回転は、上下です。



X軸回転で斜めになります。

3-2.注意点 09:27

注意点として、
カメラで映している画面の上下左右がPlayerStartの上下左右と一致するよう配置します。
不一致だと起動して移動させると、上下左右のコントロールがずれます。




具体的に一致させるには、
BP_SplineCamera選択します。
詳細パネル>デフォルト>CameraRotationのZ軸回転と
PlayerStartのZ軸回転を一致させます。
そうすると、コントロールの上下左右が一致します。


※動画より修正 誤)不一致 → 正)一致


※動画より修正 誤)不一致 → 正)一致

3-3.キャラクター向き 10:05

キャラクター向きをPlayerStartの向きと一致させるには、

現在PlayerStartのZ軸は-90.0°なので、
PlayerStartは上を向いています 。



起動すると、
キャラクターの向きは、右を向いています。



キャラクターの向きを
PlayerStartの向きと一致させるには、
BP_SplineCameraを選択します。

詳細パネル>デフォルト>PlayerRotationのZ軸回転を
PlayerStartのZ軸回転と同じにします。



起動してみましょう。

PlayerActorの向きとがPlayerStartと同じになりましたね。

3-4.SplinePointの座標 10:40

SplinePointを座標で配置したい場合は、
対象のSplinePointを選択します。



BP_SplineCameraを開きます。

コンポーネントパネルでSplineを選択します。



詳細パネル>SelectedPointsで
位置をワールドに変更します。



現在配置しているワールド座標が表示されます。



任意の値を入力します。



保存せずに閉じます。

すると、レベル上にすぐ に反映されてます。

トップダウンビュー 11:11

BP_SplineCameraを選択します。

トランスフォームで位置を入力します。
Location(SplineCamera)
140:290:2000

CameraRotationを入力します。
0.0:-80.0:0.0

PlayerRotationを入力します。
0.0:0.0:0.0

PlayerStartを選択します。

トランスフォームで回転を入力します。
Rotation(PlayerStart)
0.0:0.0:0.0

起動してみましょう。



キャラクターが前に進むとカメラも前に進みましたね。
キャラクターが戻るとカメラも戻りますね。

横スクロール 11:53

140.0 1200.0 1000.0
3.0 -35.0 -90
PlayerStart
0.0 °0.0 °-90.0 °

設定ファイル 12:36

EventBeginPlayノード(Playerキャラクターの指定)

EventTickノード

Camera配置

スプラインポイント間のスムーズ移動

最寄りのスプラインポイント

Ev_CameraSettingノード

CameraBoom設定

FollowCamara設定

Ev_PlayerRotationノード(キャラクターの向き調整)

カメラの移動を上下または左右に固定するメリットは? 13:07

視覚的な一貫性:

 プレイヤーは常に同じ視点からゲーム世界を見ることができます。
 プレイヤーは環境や敵の位置を把握しやすくなり、ゲームプレイがスムーズになります。

操作の予測性:

 プレイヤーは操作の予測がしやすくなります。
 例えば、左にスティックを倒した場合は常に画面が左に移動するため、プレイヤーは直感的に操作できます。

アクションゲームにおける戦術的利点:

 アクションゲームでは、敵の位置や攻撃パターンを正確に把握することが重要です。
 プレイヤーは敵の動きを追跡しやすくなり、適切なタイミングで攻撃や回避ができます。

演出やストーリーテリング:

 特定のシーンでカメラを固定することで、効果的な演出やストーリーテリングが可能です。
 例えば、重要なイベントやキャラクターの登場時にカメラを固定して、プレイヤーの注目を引くことができます。

古典的な感覚:

 トップビューや横スクロールは古典的なゲームスタイルであり、懐かしさを感じることができます。