UE4:カメラを動かした一人称と三人称の切り替えの実装について
どうもぶっさんです。
一人称と三人称を切り替える際、スパッ切り替わるのはどうも味気ないなと。
もっとスマート(?)に視点切り替え出来ないかと思いつくりました。
UE4でカメラを動かした一人称の三人称の切り替えの実装!
仕様:
キーボード[P]を押すとカメラが動き、一人称と三人称が切り替わる。
カメラの移動時間はだいたい0.8秒。
カメラが動いてる最中は、[P]を押しても無視される。
使用するもの:
ThirdPersonテンプレート
ThirdPersonのブループリント
まずビューポートを開き、CameraBoomの位置を少しあげます。
コンポーネントからSceneを選び以下のところに設置します。
ThirdPersonCharacterのイベントグラフを開きます。
InputのPを設置します。
そして、奇数回は一人称へ。偶数回は3人称にするためにFlipFlopノードを使用します。
そして、タイムラインノードを作成します。
タイムラインをダブルクリック以下の様なものが出てくるので、Shift+クリックで点を設置します。一方は0秒で値は0、もう一方は0.8秒で値は1にします。
Level上に設置された時点のCamera Boomの値を取るためにConstruction Scriptにノードを置いていきます。
CameraBoomをコンポーネントからドラッグアンドドロップし設置し、Get Target Arm Lengthを設置します。そして、Float型の変数を作成しSETして繋げます。(この場合、変数名をStartPositionにしています)
EventGraphに戻り、コンポーネントからCameraBoomを出し、そこからSet Target Arm Lengthノードを取り出します。
次にSceneをコンポーネントから持ってき、Get Relative Locationを設置します。そしてBreakVectorノードを出し、繋げます。
次にLerpノードを設置します。
Aに先ほど作ったStartPositionを、BにはBreakVectorのXノードを繋げ、AlphaにはTimelineのCamera Moveを繋げます。これでAからBにCameraMoveの値を使って数値が変わっていきます。
そしてLerpのReturnValueをTarget ArmLengthに繋げます。
次に、カメラが移動している時の入力を無視するよう作っていきます。
PノードとFlipFlopの間にDoOnceを入れます。
このことにより一度しか入力を受け付けなくなります。
もちろん、カメラが完全に移動した際には戻る時にもう一度DoOnceを動くようにしないといけません。
なので、TimelineのFinishedからResetに繋げます。この場合はFinishedにまだ記述することがあるので、シーケンスを設置し繋げます。
ここで、Playしてみると後ろに下がった時に体が後ろ側へ回転してしまっているので、そこを直します。
(ちょっとわかりづらいね・・・)
シーケンスのあと気にFlipFlopを設置します。
そして、Get Character Movementノードを設置します。このノードでCharacter Movementの値をBluePrint上でいじることが出来ます。
CharacterMovementから、Orient Rotation to Movementノードを出します。Aの方にはチェックを付けずBの方にはチェックを入れます。
これで後ろに下がっても前方を向いたまま下がります。
次に、横を向いた場合はどうでしょう。カメラだけ動いてしまい、体は動きません。
(わかりづらいね・・・)
なので、[Use Controller Rotation Yaw]ノードを使用します。
これで完成です。
毎回思うんですけどTimeLineって優秀だなと・・・
もちろん
これと組み合わせることも可能です。
以上。
これで鏡作ってOculusで見ればゴブリンなれる!!