こんにちは、エンジニアの有山です。
みなさんは、Fortniteというゲームをご存知でしょうか。2017年のリリース以降世界的に人気のあるゲームです。
そんなFortniteですが、2023年3月からクリエイターが独自に作成したマップをプレイヤーがプレイすると、プレイ時間等に応じて配当が得られる仕組みが導入されました。
トップクリエイターには膨大な配当が支払われているようですが、実際のところオリジナルのマップ作成は難しいのか気になったので、簡単な仕掛け作成を試してみることにしました!
(引用元: https://create.fortnite.com/news/fortnite-engagement-payout-update?team=personal)
ということで今回は、世界中で爆発的な人気を誇るゲーム「Fortnite」と、Fortniteの世界で独自のゲームを作成できる「Unreal Editor for Fortnite」でゲームで利用できる簡単な仕掛けを作ってみて感じたことについて紹介します。
Fortnite とは
Fortniteは、世界的に人気のあるオンラインマルチプレイヤーゲームです。
最大100人で行われる「バトルロイヤル(最後の1人になれば勝ち)」が有名ですが、その他にも複数のゲームモードが存在します。 その中でプレイヤーは、建物を建てたり、武器や資源を集めたりしながら、他のプレイヤーと対戦します。
Unreal Editor for Fortnite (UEFN) とは
Fortnite上で動作するゲームをVerseと呼ばれるプログラミング言語等を利用して実装することができるツールです。 もともとFortniteではクリエイティブモードでオリジナルのステージを制作することが可能でしたが、UEFNの登場でより本格的なオリジナルゲームを開発できるようになりました。
また、島クリエイタープログラムに登録することで、作成したステージ(島)を公開し、プレイされた人数や時間によって収益を受け取ることも可能です。 (収益化に関する詳細な条件につきましては、公式の参加要件をご確認ください。)
UEFNとVerseを利用して仕掛けを作成してみる
今回はUEFNとVerseを利用して簡単な仕掛けを作成してみましたので、その流れを紹介したいと思います。
インストール
まず、Unreal Editor for FortniteをPCにインストールする必要があるのですが、執筆日時点においてmacOSではUnreal Editor for Fortniteを起動することができません。
そのため、Windows端末にて開発を進める必要がある点に注意が必要です。
なお、インストール自体は下記公開情報の手順で簡単に実施することができます。
Unreal Editor for Fortnite を起動する
仕掛けの作成
インストールが終われば、いよいよ開発の開始です。
といっても、基本的には公式で公開されているドキュメントに従って進めていくだけで、仕掛けを作ることができました。
できあがるとこんな形で、プレイヤーが触れた足場が消失し、しばらくすると元に戻るという仕掛けが動作します。
基本的に上述のドキュメントの通りに進めていく形ですので、細かな手順やコードは割愛しますが、一部ドキュメントのままでは想定した動作とならない箇所がありました。
その箇所は、足場(プラットフォーム)を非表示に切り替える下記コードです。
このコードの通りに実装すると、確かにプラットフォームは非表示となるのですが、当たり判定が残ってしまいました。
足場が消えるのであれば、当たり判定も消えて足場上のプレイヤーが落下するようにしたいですよね。
初めは以下の設定を変えることで非表示の場合に当たり判定が消えてくれるのではないかと期待しましたがうまくいかず…。
3.[Advanced (詳細設定)] の [Details] パネルで、[Collision During Games (ゲーム中の当たり判定)] を [Only When Visible (表示時のみ)] に設定します。
調べたところ同様の事象は他の方でも発生しているようで、似たような状況で悩まれている投稿を見つけました。
Collision on ColorChanging Device Platform doesn’t work on hidden
そこで回避策がないか調べたところ、表示・非表示を切り替える代わりに、プラットフォームを地中等のプレイヤーから見えない位置に移動させることで非表示と同等の表現を実現できることが分かりました! この回避策を実装したコードが以下のコードです。
プラットフォームの現在位置を取得し、非表示の代わりにZ座標を地中に設定して移動させ、再表示の際には元の位置にまた移動させています。
ちなみに、TeleportTo[]は「失敗する可能性がある式」と定義されており、if式等と一緒に利用する必要があるようです。 本来であればelse句に失敗時の処理を記述する必要があるかと思いますが、今回は簡易的な実装ということで省略しています。
上記の箇所以外はドキュメント通りに進めていくことで、無事冒頭の仕掛けを実装することができました!
まとめ
今回はUEFNの公式ドキュメントをもとに、UEFNとVerseを利用してプレイヤーが接触すると消えるプラットフォームの仕掛けを実装しました。
UEFNは収益化プログラムの登場によって、トップクラスのクリエイターが大きな収益を得ることができ、注目が集まっています。 その一方で、収益を上げ続けるためにはプレイヤーに継続して遊んでもらう必要があり、ゲーム作りにも工夫が求められるように感じました。
現時点では不具合が見られる部分もありますが、今後の改善と、Fortnite自体の発展に伴う開発環境の進化を期待して、引き続き注目していきたいと思います。