最近の三次元アクションは一人称視点と三人称視点、所謂 FPS と TPS を瞬時に切り替えられるよう仕様であることも多いです。
今回は公式サンプル ThirdPerson から拡張させ、視点の切り替え処理方法を学びます。
目次
0.準備
今回は公式サンプル ThirdPerson をベースに処理を実装していきます。事前に必要なものはとくにありません。
1.視点切り替えを実装する
仕様として今回は、特定のキー(ここでは「V」キー)を押すと三人称と一人称が交互に切り替わる処理を作っていきましょう。いじるのは Content Browser → Content → ThirdPersonBP → Blueprints → ThirdPersonCharacter のみです。
まずは、現在の状態が一人称なのか三人称なのか判定するための Boolean 変数を作りましょう。
My Blueprint → Variables の「+」をクリックし、”変数名 IsFirstPersonView、初期値にチェックが入っていない”変数を作成します。
次に Event Graph で以下の処理を作成。
この処理を順番に説明していくと、
- 「V」キーが押されると IsFirstPersonView の値を反転させ、分岐処理が始まる。
- 分岐後の処理は上下ほぼ同じものだが、まず Camera Boom の Arm Length と Relative Location を変更することでカメラの位置を相応しいものにしている。
- 次に FPS 視点のみ "Set Control Rotation" が実行されるが、この処理は一人称視点になる時にカメラの方向を自キャラが向いている方向にセットしている。三人称視点ではカメラの向きと自キャラの向きが必ずしも一致していないので、この処理を挟まないとカメラの向きに自キャラが方向転換してしまう。
- Controller Desired Rotation にチェックを入れ、Orient Rotation to Movement のチェックを外すと、一人称視点で横移動や方向転換時に体が回転しないようになる。逆に三人称視点のときはチェックを逆にすれば双方自然な動きとなる。
これで簡易的に視点切り替えが実装できました。
しかし一人称視点に切り替えカメラを下に向けてみると、体が透けて見えてしまい格好が悪い。
次の項目では、これを回避する処理を追加してみましょう。
2.一人称視点時に胴体を消す
公式サンプルの FirstPerson を開いてみると分かりますが、自キャラのメッシュは顔や胴体がなく腕のみなのです。ということは、切り替え時にメッシュも切り替えれば良いということになります。
2.1 腕だけのメッシュ、アニメーション等を拝借する
あいにく腕だけのメッシュ等が無いので、公式サンプル FirstPerson から腕を持ってくることにします。腕のモーションは違ってしまうが、切り替えのやり方を学ぶだけなので見逃してください。まずは公式サンプル FirstPerson プロジェクトを開きます(無ければ新規作成)。
Contents Browser → Content → FirstPerson を右クリックし、Migrate... を選択。出てくるダイアログの「OK」ボタンを押すとフォルダ選択ウィンドウが表示されるので、現在進行中のプロジェクトの Content フォルダを選択します。
これで現在進行中のプロジェクトに FirstPerson のメッシュ等が追加されました。
2.2 キャラクターブループリントに腕を追加する
手に入れた腕をキャラクターブループリントに追加しましょう。ThirdPersonCharacter をダブルクリックで開き、Components → Add Component で Skeletal Mesh を選択し追加します。ここでは名称を Skeletal Mesh(FPS) としました。階層は Mesh(Inherited) と同階にします。
Skeletal Mesh(FPS) をクリックし、Details → Mesh → Skeletal Mesh に先ほど手に入れた SK_Mannequin_Arms を指定。
Details → Animation → Anim Class に FirstPerson_AnimBP を指定します。
最初は三人称視点なので、Details → Rendering → Hidden in Game にチェックを入れ、ゲーム上で腕が見えないようにします。
Viewport で見ると腕が追加されているので、位置を調節しましょう。
2.3 メッシュ表示の切り替え処理を追加する
Event Graph に切り替え、視点変更の際の自キャラ表示切り替え処理を追加していきます。先ほど作った処理の "Input Action Change View" と "Branch" の間を以下のように変更。
単純にメッシュの表示・非表示を切り替えているだけの処理となっています。
これだけでは一人称視点の際に腕がカメラの上下に追随しないので、以下の処理を末尾に追加します。
上の段は一人称視点にした際の処理で、Use Controller Rotation Pitch にチェックを入れるだけでカメラの上下に腕が追随するようになります。
問題は下段の三人称視点にした際の処理で、Use Controller Rotation Pitch のチェックを外しただけではカメラの上下の傾きがそのまま三人称視点のキャラクターの傾きに継承されてしまいます。
そこで画像の処理のように Pitch を反映させず、Yaw のみを継承させた新しい Rotation をセットする必要があるのです。
あとは切り替え時のカメラの位置を調整してやれば完成です。
3.まとめ
一人称視点と三人称視点の切り替え方法について学びました。丁度良いメッシュやアニメーションが無かったため切り替え後の腕の形が違ってしまいましたが、メッシュの入れ替えで対応する方法についても学べたと思います。
例えばこれがマルチプレイヤーのゲームの場合、こういう方法 【UE4】マルチプレイヤーFPSみたいに自分と他人で違う見え方するキャラクターの作り方【備忘録】 で見せ方を変えることもできるようです。今回の処理と合わせて参考にしてみてください。
0 件のコメント:
コメントを投稿