僕の私のUnrealな日々

UE4のBluePrintを使って小さなギミックを作ったりしてます。ブログを通じて情報共有ができたらなと思います。

UE4:カメラを動かした一人称と三人称の切り替えの実装について

どうもぶっさんです。

 

 一人称と三人称を切り替える際、スパッ切り替わるのはどうも味気ないなと。

もっとスマート(?)に視点切り替え出来ないかと思いつくりました。

 

 

 

 

UE4でカメラを動かした一人称の三人称の切り替えの実装!

f:id:Bussan_dayo:20150416160607p:plain

 

 

仕様:

キーボード[P]を押すとカメラが動き、一人称と三人称が切り替わる。

カメラの移動時間はだいたい0.8秒。

カメラが動いてる最中は、[P]を押しても無視される。

 

使用するもの:

ThirdPersonテンプレート

 

 

 

 

 ThirdPersonのブループリント

まずビューポートを開き、CameraBoomの位置を少しあげます。

f:id:Bussan_dayo:20150416150230p:plain

 

コンポーネントからSceneを選び以下のところに設置します。

f:id:Bussan_dayo:20150416150321p:plain

 

 

ThirdPersonCharacterのイベントグラフを開きます。

 

InputのPを設置します。

そして、奇数回は一人称へ。偶数回は3人称にするためにFlipFlopノードを使用します。

f:id:Bussan_dayo:20150416150344p:plain

 

 

そして、タイムラインノードを作成します。

f:id:Bussan_dayo:20150416150357p:plain

 

タイムラインをダブルクリック以下の様なものが出てくるので、Shift+クリックで点を設置します。一方は0秒で値は0、もう一方は0.8秒で値は1にします。

f:id:Bussan_dayo:20150416150417p:plain

 

 

 

Level上に設置された時点のCamera Boomの値を取るためにConstruction Scriptにノードを置いていきます。

f:id:Bussan_dayo:20150416150745p:plain

CameraBoomをコンポーネントからドラッグアンドドロップし設置し、Get Target Arm Lengthを設置します。そして、Float型の変数を作成しSETして繋げます。(この場合、変数名をStartPositionにしています)

 

 

EventGraphに戻り、コンポーネントからCameraBoomを出し、そこからSet Target Arm Lengthノードを取り出します。

f:id:Bussan_dayo:20150416150844p:plain

 

 

次にSceneをコンポーネントから持ってき、Get Relative Locationを設置します。そしてBreakVectorノードを出し、繋げます。

f:id:Bussan_dayo:20150416150954p:plain

 

次にLerpノードを設置します。

f:id:Bussan_dayo:20150416151431p:plain

 

 

Aに先ほど作ったStartPositionを、BにはBreakVectorのXノードを繋げ、AlphaにはTimelineのCamera Moveを繋げます。これでAからBにCameraMoveの値を使って数値が変わっていきます。

 

そしてLerpのReturnValueをTarget ArmLengthに繋げます。

 

 

次に、カメラが移動している時の入力を無視するよう作っていきます。

 

PノードとFlipFlopの間にDoOnceを入れます。

このことにより一度しか入力を受け付けなくなります。

f:id:Bussan_dayo:20150416151725p:plain

 

 

 もちろん、カメラが完全に移動した際には戻る時にもう一度DoOnceを動くようにしないといけません。

 

なので、TimelineのFinishedからResetに繋げます。この場合はFinishedにまだ記述することがあるので、シーケンスを設置し繋げます。

f:id:Bussan_dayo:20150416151915p:plain

 

 

ここで、Playしてみると後ろに下がった時に体が後ろ側へ回転してしまっているので、そこを直します。

f:id:Bussan_dayo:20150416152951p:plain

(ちょっとわかりづらいね・・・)

 

 

シーケンスのあと気にFlipFlopを設置します。

そして、Get Character Movementノードを設置します。このノードでCharacter Movementの値をBluePrint上でいじることが出来ます。

 

CharacterMovementから、Orient Rotation to Movementノードを出します。Aの方にはチェックを付けずBの方にはチェックを入れます。

f:id:Bussan_dayo:20150416153200p:plain

 

これで後ろに下がっても前方を向いたまま下がります。

 

 

次に、横を向いた場合はどうでしょう。カメラだけ動いてしまい、体は動きません。

 

f:id:Bussan_dayo:20150416153245p:plain

(わかりづらいね・・・)

 

なので、[Use Controller Rotation Yaw]ノードを使用します。

f:id:Bussan_dayo:20150416153454p:plain

 

これで完成です。

 

毎回思うんですけどTimeLineって優秀だなと・・・

もちろん

unrealbussan.hatenablog.com

 

これと組み合わせることも可能です。

 

 

以上。

 

 

 

 

 

 

これで鏡作ってOculusで見ればゴブリンなれる!!

f:id:Bussan_dayo:20150416155021p:plain