【初心者向け】Unreal Engineで2本目のゲームを作った話
めためたです。今回は『【初心者向け】Unreal Engineで2本目のゲームを作った話』を話していきます。よろしくお願いします。
このnoteは、ゲーム制作に興味があってUnreal Engine(UE)を触りたいと思っている方を対象としています。
1本目はこのようなゲームを作りました。
作ったゲーム
青Gemをモンスターに破壊される前にモンスターを湧かせる赤Gemを破壊するゲームを作りました。
中央にある青Gemをモンスターに破壊されるとGame Over、その前に四方にあるモンスターを湧かせる赤Gemを破壊するとGame Clearになります。
プレイヤーのコンボ攻撃がそれぞれ20, 30, 50ダメージ、溜め斬り100ダメージ、氷魔法も100ダメージです。
モンスターの体力は100、攻撃は1ダメージでプレイヤーを狙わずに青Gemを狙うようにしています。なので、プレイヤーに体力は設定していません。
青Gemの体力は20、赤Gemの体力は100になっています。
遠距離の氷魔法が活かせるように考えた結果、赤Gemの体力と氷魔法のダメージは一緒がいいと判断しました。
1本目とのゲームの違い
キャラクター
1本目では標準のキャラクターや背景を用いていますが、今回はアセットを用いています。キャラクターのアセットにはParagonというEpic Games(EG)が無料で公開しているシリーズのAuroraという名前のキャラクターを用いています。
図2のように、通常攻撃が3種類ありコンボが実装されています。Gameplay Ability System(GAS)を用いていないコンボ攻撃になっています。
僕のおすすめは解説動画を参考にしながらGASを用いたコンボに組みなおすすことです。Paragonを用いるとGASを用いたコンボシステムと通常のコンボシステムとの比較ができるからです。
また、ネット上にあるGASを用いたコンボシステムの説明にはFrank Action RPG Sword 1 (Basic Set)が用いられがちですが、現在は非売品になっており、初学者はその教材を使って勉強しずらい状態になっています。
なので、コンボ用のアニメーションがついてくるParagonシリーズを用いてGASをついでに学習するのが効果的だと思われます。
注意してほしいのは、Paragonシリーズはそのまま導入してもエラーが発生して動かないことです。セットアップに以下の動画がおすすめです。
アクションマッピングの設定方法、攻撃時のランダムボイス、登場時のボイス、登場時のカメラ、スケルタルメッシュに付いている剣にコリジョンを設定する方法など初学者にありがたい動画になっています。
また、僕の個人的なミスのせいかもしれませんが、ParagonではなぜかEnhanced Inputが効きませんでした。図3の溜め斬りや図4での照準を合わせて氷魔法を放つを実装していますが、Enhanced Inputが使えなかったのでdelayを用いて時間を空けることでEnhanced Inputの替わりにしていました。
背景、モンスター、小物
キャラクターにはEGが永年無料にしているParagonシリーズを使いましたが、EGは「今月の無料コンテンツ」と題して毎月5本のアセットを無料にしてくれています。この2本目のゲームでは無料になったアセットを3つ使っています。
1つ目のアセットはDungeon Packで2024.8に無料になりました。
Dungeon Packでは青いGemと赤いGemを使っています。回転するGemは想像以上にゲームらしさを演出していて小物も侮れないなと思いました。横回転は以下で実装できます。
2つ目のアセットはSkeleton Knight Modularで、これも2024.8に無料になりました。
Skeleton Knight Modularからは剣を持ったスケルトンを2種類使っています。赤いGemから2種類のうち1種類が5秒に1度赤いジェム付近で湧くようにしています。以下で実装できます。
モンスターを湧かせるための処理はSpawn AIFrom ClassにしないとモンスターAIが上手く機能しなくなるので注意が必要です。2本目のモンスターAIは青いGemに向かって歩き、攻撃するだけなのでシンプルな処理になりました。
3つ目のアセットはMediterranean Coastで、これは2024.7に無料になりました。
スターターコンテンツのマップではなく、このマップをフィールドにしました。処理がスターターコンテンツのマップより重たいマップにしたことで、通常のOpen Levelを用いた処理が上手くいかなくなりました。なので、非同期処理を使ったLoading画面を作り、マップを事前に準備することを学びました。
非同期処理と聞くと処理が大変そうに感じられますが、処理は以下の通りです。
ローディング画面用のレベルブループリントにCreate (UIにはUI_Now_Loadingと名前をつけた) WidgetとAdd to ViewportでLoading画面を設定します。そこに非同期処理のためにAsync Load Primary AssetをOpen Levelの前に挟むだけで非同期処理で事前に重たいマップを処理できます。Async Load Primary Assetのcompletedの後にノードを伸ばすことで非同期処理が終わった後に自動的にレベルを開くようになります。
僕は非同期処理をこの記事を参考にしました。
魔法
また標準を合わせて氷魔法を放つの実装には、Infinity Blade: Effectsを用いています。
このInfinity Bladeシリーズは無料で公式が使えるようにしてくれているのでおすすめです。このシリーズは魔法以外にも剣やモンスターといったアセットが用意されています。
また、標準を合わせて放つはこの動画を参考にしています。
この動画では弓矢を使っていますが、魔法にも適応することができます。分かりやすいです。
2本目を作って分かったこと
日本語での解説動画は少ない(少ないと思っていると意外と多い)ですが、海外の動画を含めると解説動画は意外と少なくないです。また、youtubeの自動翻訳で結構戦えます。
海外の動画も参考にしていくと幅が広がると思います。
また、解説動画もいいですがテキスト+画像もいいことも分かりました。感覚的な話、解説動画はどうしても受け身的になってしまいますが、テキスト+画像は自分の頭で考えながら実装するので動画よりも能動的になれる点が解説動画よりも優れていると思います。
解説動画とテキスト+画像を組み合わせて3本目も作っていきたいです。
以上が今回のnoteです。