環境
UE4.25.3
概要
こんなゲーム作りました
www.youtube.com
技術的な詳細実装の解説記事というよりはあくまで日記程度のものです。
ゲームのコアロジック部分に関してはほぼほぼNiagaraで作成してます。
ゲーム全体のロジック(シーケンスやスコア管理やUI等)はBlueprintとUnreal C++で作成しました。
今回の比率的には7 : 3(Blueprint : C++)くらいの割合です。
C++でなければ実装ができないような部分は1,2%程度ですが
Blueprintでも代替可能な部分ではあるので、実装は全てBlueprintでも可能です。
コア部分の花火の実装
Niagaraの実装
花火は大きく分けると打ち上げ部分と爆発部分の2つのEmitterで作成しています。
実際には細々とした装飾を施しているため、以下の構成です。
・打ち上げ部分 : 核となる玉、Trail(Ribbon)、Trail(Sprite)、煙(なくても良かったかも)の4 Emitter(無駄に贅沢)
・爆発部分 : 飛び散る玉、Trail(Ribbon)、Trail(Sprite)、四散する玉の4 Emitter
Particle自体はプロのアーティストでもない素人が作ったものなので深く解説する部分は特にないです。
それよりはBlueprintとNiagaraの連携部分に比重を置いて解説していこうと思います。
基本的には前回記事にしたParticleDataのやり取りがメインの部分です。
papersloth.hatenablog.com
まず打ち上げ部分のParticleについてですが、1つだけ自作のNiagara Module Scriptを使用しています。
NMS_ExportというNiagara Module Scriptを作成しました。(元は検証用で作成していたとはいえ酷い命名ですね)
詳細は先程貼った前回の記事を見ていただければですが、処理内容としてはParticleの位置と速度をBlueprintに受け渡しするために設定しているだけです。
ひとまずこれでBlueprintに位置と速度を渡せるようになりました。
最終的に速度は使用しなかったので、位置情報だけで良いのですが。
Blueprintの実装
花火のBlueprint側はActorを継承してNiagara とSphere Collisionだけのシンプルなものです。
通常今回のゲームのような処理を組む時はNiagara で見た目だけ作成してBlueprint で動きの制御をすることが多いと思うのですが
今回のアプローチとしては逆でNiagara の動きの制御に合わせてBlueprint で当たり判定を追従させるという作りにしています。
Niagara Particle Callback HandlerをInterfaceに追加して
Receive Particle Dataで先程設定した打ち上げ部分の玉の位置情報を受け取るようにしています。
受け取るデータは配列ですが、打ち上げ部分の玉は1つしか生成していないため
その位置情報を元に当たり判定となるSphere Collisionの位置を設定しているだけです。
これで打ち上げた玉の位置と実際のコリジョンが一致するようになります。
あとは一定時間が経過するか、カーソルにヒットした少し後に爆発用のエフェクトを生成するだけです。
これだけでこのゲームのコア部分自体は完成です。
その他の実装
このゲームらしい部分の解説らしい解説はこれで終わりなんですが、その他の細々とした実装もちょっとだけ解説します。
天球
それっぽい夜空があれば何でも良かったんですが、Infiltrator Demoの背景とかそのまま使えそうだなと思ったのでそのまま使うことにしました。
なので、実は背景にあのロボがいるんですね
Scene Capture CubeでCube Mapを作成してMaterialにペタッと貼っておしまいです。
これだけで背景完成!お手軽!
詳細は以前に記事にしたので、こちらを参照ください。
papersloth.hatenablog.com
大きな花火とタイトルのキラキラ
特定コンボ数で出現する大型の花火とタイトルにはキラキラしたエフェクトを付け足しています。
大型花火
タイトルロゴ
Particle自体はNiagaraのテンプレートのOmnidirectionalBurstにちょっと手を加えただけのものです。
見た目的には良さそうなんですけど、実装としては大問題が1点あります。
使用してるテクスチャが「DefaultBloomKarnel」なんですよね。
Engine/EngineMaterialsに入ってるテクスチャなんですが、2Kのテクスチャを使用してる割にこれだけしか描かれてないです。
なので、通常は使用しないでリサイズしたりしてパッケージサイズを圧迫しないようにしたりすることが多いと思います。
で、今回は贅沢にもこのテクスチャをそのまま使用しています。
まとめ
今回は技術記事というより日記なので薄っぺらい感じの解説になっています。
特に全く意識したわけではなかったんですが、このゲームでは光源が0です。
タイトルからリザルトに至るまで、全部Emissiveだったんですよね。
みんなそれぞれ輝いています。
以上です!久々にぷちコン参加できて楽しかったです!