WatchDogs(ウォッチドッグス)のカメラハックシステムをパクろう!
ウォッチドッグスというゲームをご存知でしょうか??
分からなければggって。
今回は、カメラハックシステムをパクってみました!
TPSテンプレートを使用してます。
まず監視カメラの作成。
親クラスはPawnにし、名前は「Camera」で。
(FloatingPawnMovementは要らないです。紛らわしくってすいません。)
レベル内にCameraを配置します。とりあえず4個で。
次に、BPインターフェイスを2つ作成します。
1つは「CameraHack」、2つ目は「PlayerHack」という名前にしました。
プレイヤーBPに以下の処理を組みます。
LineTraceByChannelでトレース処理。
トレースが監視カメラにヒットした時、音が鳴るようにする。
監視カメラかどうかはタグ判定で判定してる。
サウンド再生の前にDoOnceを挟んでる理由は、
トレースがヒットしてる限り音が鳴り続けてしまうので、それを防ぐためにDoOnceを挟んで1回のみ音が鳴るようにしてます。
トレースが監視カメラにヒットしてる時に、左クリックすると「CameraHack」インターフェイスに処理が流れる。
最後に、プレイヤーのMeshのコリジョンのVisibilityを「ブロック」にしといてください。
これで、監視カメラのトレースがMeshにヒットするようになります。
プレイヤーBPはこれでOKです。
「Camera」に以下の処理を。
クラスのデフォルトの詳細パネルで赤枠の部分にチェックをつけます。
これで、Yaw回転とPitch回転のみが行われるようになる。
「1キー」押したとき、ズーム。「2キー」押すとズームアウト。
「1キー」も「2キー」も途中で放したらズームが止まる。
タイムラインの値でSetFieldOfViewの値を変え、ズーム・ズームアウトするようにしてます。
FieldOfViewのデフォルト値は「90」。一番ズームした状態で「5」。
タイムラインの「0秒」の値が「90」、「3秒」の値を「5」にします。
これで、スムーズなズーム処理ができるわけです。
監視カメラを操作可能にするための処理。
SetViewTargetWithBlendノードを使用し、BlendTimeに指定した秒数間カメラ遷移を行い、Possessでこの監視カメラを操作可能にする。
Delayがある理由は、SetViewTargetWithBlendのBlendTimeに関係なく瞬時にカメラが切り替わってしまう為、Delayを挟んでるのです。Delayの秒数はBlendTimeと同じ秒数で。
Possessで監視カメラが操作可能になった時、TrueのBool値をセットします。「Possess」という名の変数です。理由は後程。
トレース処理。
プレイヤーBPとほぼ変わりません。
プレイヤーとほかの監視カメラに対してサウンド処理を行う。
カメラ操作時、プレイヤーあるいはほかの監視カメラに操作変更できるようにインターフェイスを2つ用意する。
「PlayerHack」と「CameraHack」です。
プレイヤーかほかの監視カメラに操作変更したあと、Possess変数をFalseにセット。
さて、なぜこの変数を用意してるか。
ここで使うためです。
監視カメラが操作可能になった時、PossessがTrueになるので、Trueに処理が流れサウンド処理が可能になります。
プレイヤーか他の監視カメラに操作変更した時、PossessがFalseにセットされ、サウンド処理が行われなくなる。
なぜこんなことをしてるかは後程。
とりあえずこれでもう完璧なので、やってみます!
分かりやすくするため、トレースの表示をしてます。
完璧ですね!しっかりいつでも操作切り替えができるようになってます。
そして、プレイヤーのトレースが監視カメラにヒットした時、しっかり音が鳴ってます。
監視カメラを操作してる時も、プレイヤーか他の監視カメラにトレースがヒットした時にしっかり音が鳴ってます。
ちなみに、プレイヤーカメラをちょっと横にずらしてます。
理由は、監視カメラにトレースをヒットさせたい時にプレイヤーが重なってしまって邪魔になってしまうからです。
(監視カメラ映像やUMGに若干の変更・加工がありますが、この辺は好みで)
さて、なぜPossess変数でブランチ処理を行っているのか。
これが無かったらこうなるからです。
分かったでしょうか。
こちらがカメラにトレースをヒットさせてなくても、カメラは常にトレース処理を飛ばしてるので、カメラのトレースに当たったとき音が鳴ってしまっています。
本来は、監視カメラにトレースをヒットさせた時のみ音を鳴らしたいのです。
これではダメなので、監視カメラを操作してないときはトレースによるサウンド処理を行わないようにしていたのです。
これで、ウォッチドッグスのシステムをちょっとパクることが出来ましたね!(・∀・)
それではまた!^^ノシ