『FPSカメラ』です。
1人称に切り替えるボタンを追加もできますが、
今回はエイム視点を1人称の位置に変更し、どっちもいけるようにします
![](https://yossi40-100.com/wp-content/uploads/2024/07/FPS2.gif)
カプセルからメッシュ配下にカメラを異動
Game Animation Sampleの視点切り替えは、
マウス中ボタンと右クリックで「遠く」・「近く」・「エイム」の3タイプです
![Game Animation Sampleのfar視点。マネキンがやや遠い](https://yossi40-100.com/wp-content/uploads/2024/07/スクリーンショット-2024-07-28-102349.png)
![Game Animation Sampleのclose視点。マネキンがやや近い](https://yossi40-100.com/wp-content/uploads/2024/07/スクリーンショット-2024-07-28-102437.png)
![Game Animation Sampleのaim視点。マネキンが近い](https://yossi40-100.com/wp-content/uploads/2024/07/スクリーンショット-2024-07-28-102412.png)
右クリック”押している間”の「エイム」を1人称視点に変更しましょう
キャラクターのブループリントで、カメラの親子関係を変更します
- Before: カプセル>スプリングアーム>カメラ
- After: カプセル>メッシュ>スプリングアーム>カメラ
SpringArmをドラッグアンドドロップでMeshの子供にします
![スプリングアームをメッシュの子供に設定しなおした状態](https://yossi40-100.com/wp-content/uploads/2024/07/スクリーンショット-2024-07-28-102840.png)
これでカプセルではなくメッシュの動きにカメラがシンクロします
といっても、まだ特に変化ありません
アームの長さを0にして、あとは位置を頭のところに
ではなく、
スケルタルメッシュの編集画面に行き、頭の骨の名前を確認します
![UEFNマネキンのBoneで頭の骨であるheadを選択した状態](https://yossi40-100.com/wp-content/uploads/2024/07/スクリーンショット-2024-07-28-103118.jpg)
![よっしー](https://yossi40-100.com/wp-content/uploads/2023/12/yossi40100logo_mini-150x150.png)
UEFNマネキンだとheadです。大概はheadかHeadと思いますが、大文字小文字まちがいも注意しましょう。
カメラをこの骨の子供にすると、頭の揺れに応じてカメラも動くようになります
今回はさらにソケットを付けましょう
ソケットは何かをくっつけるための仕組みなので、これをつかうと、ソケット自体の位置調整を事前にしておくことができます。
![よっしー](https://yossi40-100.com/wp-content/uploads/2023/12/yossi40100logo_mini-150x150.png)
今回でいうと、頭の付け根から目の位置にカメラを相対位置調整するか、事前に目の位置に作ったソケットにはめるだけにするか的な
骨headを右クリックからソケットを追加します
![headボーン右クリックから「ソケットを追加」する](https://yossi40-100.com/wp-content/uploads/2024/07/スクリーンショット-2024-07-28-103633.png)
この名前を使うのでそれっぽく「headCam」としておきました
できたソケットを目の位置に調整します
![追加したソケットをマネキンの目の位置に調整している](https://yossi40-100.com/wp-content/uploads/2024/07/スクリーンショット-2024-07-28-103524.png)
キャラクターBPにもどり、アームの親ソケット欄でさきほどのソケットを選びます
![キャラクターのブループリントでスプリングアームコンポーネントをMeshのheadCamソケットに取り付けている](https://yossi40-100.com/wp-content/uploads/2024/07/スクリーンショット-2024-07-28-103837.png)
呼吸に応じてカメラも揺れていますね
![FPS化ができてマネキンの頭にカメラがくっついたアニメ。呼吸で揺れる頭にカメラも同期して揺れている](https://yossi40-100.com/wp-content/uploads/2024/07/FPS.gif)
あとはイベントグラフのPossessed(操作開始時)とTick(毎フレーム周回処理)から呼ばれる「Update Camera」関数を接続切れば、常にFPS視点になります。
![Update Camera関数の接続を切る位置を赤丸で囲った図](https://yossi40-100.com/wp-content/uploads/2024/07/スクリーンショット-2024-07-28-104424.jpg)
しかし、今回はエイム視点だけ1人称にしたいので、そこは接続しなおして、
そのアップデートカメラ関数内で参照されているカメラ設定用のパラメタを変えます
![Update Camera関数の中身。Cam Style Aimという変数ノードを選択している](https://yossi40-100.com/wp-content/uploads/2024/07/スクリーンショット-2024-07-28-104602.jpg)
![キャラクターのブループリントでCamStyle Aim変数が、変数/カメラの下にある](https://yossi40-100.com/wp-content/uploads/2024/07/スクリーンショット-2024-07-28-104725.png)
この構造体変数のデフォルト値から、アームの長さを0、位置調整も0にすれば
エイム視点の時のカメラが目の位置になります
SpringArmLength | アームの長さ | 200 → 0 |
SocketOffset | 取付位置補正値 | 0 50 30 → 0 0 0 |
TranslationLagSpeed | キャラ追っかけ速度 | 15 → 0 |
FieldOfView | 視野角 | 80 |
TransitionSpeed | 切り替わるときの移動速度 | 5 → 0 |
頭の中すり抜けてカメラが切り替わる(移動する)のを、一瞬で切り替わるようにしたい場合はトランジションスピードを0にしましょう。そのあたりはお好みで。
また、動画では説明していませんが、高いところからの着地時など、首が速く動くシーンでカメラが遅れてしまいます。
ラグも0で無効にするか、もとの倍以上の大きな数字にしてカメラの遅れを小さくしましょう。
![よっしー](https://yossi40-100.com/wp-content/uploads/2023/12/yossi40100logo_mini-150x150.png)
ただし、0で無効にするとキャラクターの呼吸や上下動で激しく動くので、酔いやすくなる人もいると思います。その辺の調整余地は必要かなと思います。
あとはプレイしながらソケットオフセットかソケット自体の位置調整で完了です
![FPS化した状態でのゲームプレイ映像。オレンジのブロックを手をついて飛び越えたり、ジャンプして着地する際の自分の手足が見える](https://yossi40-100.com/wp-content/uploads/2024/07/FPS2.gif)
リターゲットキャラクターへの適用
リターゲットした玉ねぎちゃんでも見てみましょう
2頭身くらいの玉ねぎちゃんの目線にしては高すぎますし、頭もでかいのではみ出し気味です
これは玉ねぎちゃんではなく、実際は非表示になっているもとのマネキンにカメラアームがつながっている状態です
![2頭身のキャラクター玉ねぎちゃんの頭にカメラがついている](https://yossi40-100.com/wp-content/uploads/2024/07/スクリーンショット-2024-07-28-110709.png)
マネキンと同じ手順で、スケルタルメッシュの頭にソケットをつけましょう
![玉ねぎちゃんにheadCamソケットを取り付けている](https://yossi40-100.com/wp-content/uploads/2024/07/スクリーンショット-2024-07-28-110811.png)
あとはアームを玉ねぎちゃんのソケットに付け替えたいですが、リターゲットキャラクタのクラスは、UEFNマネキンさんが親クラスなので、
直接リターゲットキャラクタ内で構造を変えるとのちのち問題が生じる可能性があります。
なので、コンストラクションスクリプト(レベル上に配置したときやスポーンされたタイミングで動く処理)で親子関係をかえる処理を書きます
関数/ConstractionScript を開きます。
親クラスのコンストラクションスクリプトを実行するノードがあるので
その後ろに「Attach Component To Component」をつなぎ、Targetにアーム、Parentに玉ねぎちゃんのスケルタルメッシュをつなぎます
![Attach Component To ComponentノードでスプリングアームをTamaの子供に配置変更している](https://yossi40-100.com/wp-content/uploads/2024/07/スクリーンショット-2024-07-28-111018.png)
![よっしー](https://yossi40-100.com/wp-content/uploads/2023/12/yossi40100logo_mini-150x150.png)
SocketName ソケット名の指定も忘れずに
それっぽくできましたね
ただ壁にめり込んで壁が透けちゃっています
![Game Animation Sampleのステージ。ブロックの裏側に貼り付けている文字の裏面が透けて見えている状態。](https://yossi40-100.com/wp-content/uploads/2024/07/スクリーンショット-2024-07-28-111248.png)
3人称視点のfarで見ればこういう状態ですね(顔がめりこんでいます)
![頭が壁にめり込んでいる様子。
カプセルより頭が大きくはみ出している](https://yossi40-100.com/wp-content/uploads/2024/07/スクリーンショット-2024-07-28-111338.png)
カプセルよりメッシュがだいぶはみ出しているので、カプセルがぶつかるところまでキャラクター本体は移動できるけど、それだとメッシュは壁に埋まっちゃう状態です。
メッシュ自体にコリジョンを付けてカプセルとは別途ぶつかるようにする作戦もありますが、メッシュが収まるサイズまでカプセルを大きくすればOKです
![頭が壁にめり込まなくなった様子。カプセルが大きくなっている](https://yossi40-100.com/wp-content/uploads/2024/07/スクリーンショット-2024-07-28-111641.png)
前傾になるのも考慮して結構大きめにしました
走っているアニメーション再生しながら調整するのもよいですね
![よっしー](https://yossi40-100.com/wp-content/uploads/2023/12/yossi40100logo_mini-150x150.png)
トラバース動作できるかできない範囲とか、狭い通路通れる通れないなどにも影響しますので、レベルデザインする初期段階である程度仕様を決めておいたほうがいい部分ですね。
つづく
次回は銃を撃ちましょう
コメント