見出し画像

[UEFN Verse]カメラ演出とイベント

UEFNでアドベンチャーゲームを作りたいと考え必要な機能をいろいろ探っているのだが、特定のエリアに入った時に発動するイベントを作りたい
例えば部屋に入った瞬間に襲い掛かってくる敵や自動で起動するアニメーションやBGMなどだ
今回は特定のエリアに入った瞬間にカメラ演出が始まる仕組みを作ってみる


プロジェクトを作る

UEFNを起動してプロジェクトを作成する
テンプレートは何でも良いし、新規に作らなくても既にあるプロジェクト上でも良いのだけど古いプロジェクトを使いまわすとあるはずの機能がなかったりするので新規に作ったほうが安全
記事ではTestProjectという名前で島テンプレートのBlankを指定している

シーンを作成する

シーン作成といってもプレハブから適当に建物を選ぶだけだ
ある建物に入った時に室内をざっと見渡すようなカメラ演出が再生されるシーンを考えてみる
ちょっと広い方がいいので今回はAll > Fortnite > Prehabs > アートデコアールデコバンクにした

中に入るとこんな感じ

カメラをシーンに追加する

まずは自由に動かせるカメラをシーンに追加する
上のメニューからCineカメラアクタを追加する

アウトライナー上で確認すると、きっとCineCameraActorという名前のアクタが追加されシーン上ではカメラモデルが表示されていると思う
CineCameraActorを選択した状態だとビューポートに小窓が現れカメラからの見た目をリアルタイムで確認できる

レベルシーケンスを追加する

レベルシーケンスはUEFN上でキーフレームアニメーションをつけるためのもので、キャラクターやカメラ、エフェクト、サウンドなどあらゆるものを制御するために利用する重要な機能だ
プレミアやアフターエフェクトなど動画編集ソフトを見たことがあればイメージが付きやすいかもしれない
フレーム単位で細かくタイミングを制御することができる

コンテンツブラウザの All > TestProjectコンテンツ上で右クリックしてレベルシーケンスを追加する
追加されたレベルシーケンスはリネームしておく
今回はCameraSeqとした

CameraSeqをダブルクリックするとシーケンサが表示される
シーケンサにアニメーションやサウンド、エフェクトなどいろいろなタイプのトラックを追加して、例えば走るキャラクターが地面を蹴るSEと同時に地面に砂埃を立てるエフェクトを発生させるなどといった細かい調整をすることができる

+トラックからカメラカットトラックをシーケンサに追加する

追加されたカメラカットの+マークからCineCameraActorを選択する

CineCameraActorトラックが追加されるので+マークからトランスフォームを選択する

これでカメラにアニメーションをつける準備が完了した

カメラアニメーションをつける

シーケンサー上でデフォルトの状態だと30fpsで150フレームに設定されていると思う、1秒30フレームで150フレームなので5秒のアニメーションだ

変更したい場合は赤い】をドラッグする
今回は240フレーム8秒でアニメーションをつけてみる
動かす前にはスナッピングを有効にしておく方がいい

タイムスライダを0に戻しカメラ(CineCameraActor)を好きなポジションに配置する

位置調整が完了したらTransformトラックを選択した状態でEnterキーを押すと

最初のキーが打たれる

タイムスライダをずらしつつカメラを移動しEnterキーを繰り返すことでカメラアニメーションをつけてゆく

シーケンスの尺を調整したらカメラカットの長さも同じだけ調整する必要がある

カメラアニメーションが完成したら次はそれをシーンに配置するのだが、
レベルシーケンスは直接シーン置けないのでまずAll > Fortnite > Deviceからムービーシーケンスの仕掛けをシーンに配置する

ムービーシーケンスの仕掛けの詳細情報からシーケンスCameraSeqを設定する

これで作成したカメラアニメーションをシーンに配置することができたのでVerseスクリプトでコントロールできるようになる

イベントのトリガーを作る

カメラ演出をどのタイミングでスタートするかを考える
建物に入った時に実行したいので、一つの方法としては部屋の入口にトリガーを置いてプレイヤーが踏んだらイベントを開始する方法がある

しかし今回はミューテーターゾーンを使ってみる
トリガーと似たような機能のデバイスだが特定のゾーンのなかにプレイヤーがいるかいないかを監視することができる
ゾーン内にプレイヤーが入った時と出た時にイベントが起きるのでいろいろ応用の利くデバイスで今回のようなイベントの発動に利用するならばこちらの方が向いている

室内全体を覆うようにゾーンのサイズを調節する
ちなみにゾーンの形状はボックスとシリンダーを選択できる

Verseスクリプトを編集する

Verseスクリプトを作成する
名前はevent_managerとした

コードを編集する
大したことはやってない
OnBeginでミューテーターゾーンにプレイヤーが入った時と出た時のイベントハンドラを追加して、プレイヤーが入った時にカメラアニメーションを再生し出た時にミューテーターゾーンを無効にしている

using { /Fortnite.com/Devices }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/Diagnostics }

event_manager := class(creative_device):

    @editable Zone:mutator_zone_device = mutator_zone_device{} 
    @editable Sequence:cinematic_sequence_device =cinematic_sequence_device{}

    OnBegin<override>()<suspends>:void=
        Zone.AgentEntersEvent.Subscribe(OnEnter)
        Zone.AgentExitsEvent.Subscribe(OnExit)

    OnEnter(Agent:agent):void=
        Sequence.Play() 

    OnExit(Agent:agent):void=
        Zone.Disable()

Verseスクリプトが完成したら、デバイスの設定はいつものパターンだ

  1. event_managerデバイスをシーンに配置

  2. Verseコードをビルド

  3. Zone,Sequenceにそれぞれデバイスをセット

実行するとこんな感じにミューテーターゾーンに入った瞬間にカメラ演出が始まる


いいなと思ったら応援しよう!