2Dゲームのチュートリアルもやってみた

UE5 勉強メモ2D,チュートリアルやってみた

今回はこの動画のチュートリアルをやってみた。
3次元の世界でどうやって2次元ゲームを作るのか興味があって。
めっちゃ早口なので0.75倍で見たけど、自動翻訳字幕のペースも作業ペースもちょうどよかった。

How to make a 2D Game in Unreal Engine 5 – [2024] Beginner Tutorial

プロジェクトの設定

Edit Startup MapとGame Default Mapに新しく作ったマップを設定。

公式資料:Paper2D – インポート
一番のポイントはDefault Pixels Per Unreal Unit。
場所は Editor > Paper2D – Import > New Asset Settings
1.0だとUEの1cmユニットがスプライト1pxということらしい。
今回はスプライトのサイズを3倍適用するため、0.33をセット。
スプライトにも個別に設定できるけど、先に設定した方が楽。

アセットのインポート

まずはコピーしてきた直後のぼやぼやしているのを修正。
右クリック > Sprite Actions > Apply Paper 2D Textire Settings

タイルセットとタイルマップ

公式資料:Paper 2D Tile Sets / Tile Maps

背景の全ファイルを選択して右クリックSprite Actions > Create Tile Set
キャラクターに干渉するタイルセットだけ次の設定。
・タイルサイズ(今回のサンプルは16×16)
・衝突判定(タイルを選択してAdd Boxで作成、左上のColliding Tilesで可視化)
設定したタイルセットを右クリックしてCreate Tile Mapでタイルマップ作成。

タイルマップの編集画面でまずはマップサイズを広げて作業しやすくする。
画面の左側から配置したい範囲をドラッグで選ぶと、画面の真ん中のマップに配置できる。
レイヤーを分けて背景を作る。
マップにステージタイルをドラッグして位置を000に設定。
レベルの左上の「Show」から「Collision」にチェックを入れると衝突範囲が見える。
マップが裂けるのを防ぐために、全てのタイルセットに次の設定をする。
TileSetを右クリック > Condition Tile Sheet Texture

キャラクターの作成

公式資料:Paper 2D スプライト
キャラクターのファイルで右クリック > Sprite Actions > Extract Sprits
作成されたファイルを開き、Extract ModeをGridにする。
GridのCell Width、Cell Heightを変更して、キャラクター1体ずつ同じサイズになるように設定する。
今回は4体x4体だったので縦横それぞれMAXから4割った数字。
作成されたファイルのうち、空のものを削除。

公式資料:Paper 2D フリップブック
分割されたキャラクターからアニメーションに使う分を選択して右クリック > Create Flipbook
作成されたFlipbookをダブルクリックして、Frames Per Secondの設定により速度調整が可能。
ここで作成したのはIdle、Run、JumpRise、Fallの4種。

キャラクターブループリントの作成

Paper2Dのキャラクタークラスは通常のCharacterではなくPaperCharacterで作成する。
クラスのViewportで次の設定をする。
・SpriteでSouce FlipbookにIdle用のフリップブックを設定
・CapsuleでCapsule Half HeightとCapsule Radiusをキャラにぴったりになるよう設定
・Spriteでキャラクターの足元をCaplsule Componentに合わせるためZ座標を-2に設定

キャラクターをマップにおいてみる。
平面に位置を揃えるにはY=0を設定。
OutlinerでステージのY位置を-0.1にすることでちらつきを軽減。

2Dの見せ方のための設定

参考にしたのがこちらのサイトとのこと。日本語!!!
UE5.1 最適なポストプロセス設定 / 2D ドット絵

プロジェクト設定

項目設定値
Motion BlurOFF
Anti-Aliasing MethodNone
Auto ExposureOFF
Auto Exposure Bias0
Dynamic Global Illumination MethodNone
refrection methodNone
Shadow Map MethodShadow Maps
Ambient OcclusionOFF
Ambient Occlusion Static FractionOFF

Post Process Volumの作成と設定

マップの□+をクリックしてVolumes > Post Process Volumeを作成して設定

項目設定値
Location0-0-0
Infinite Extent(Unbound)ON
Min EV1000
Max EV1000
Vignette Intensity0
Expand Gamut0
Tone Curve Amount0

プレイヤー操作の設定

ゲームモードの作成

BlueprintフォルダでBlueprint ClassのGame Mode Baseを作成。
Default Pawn Classに作成したキャラクタークラスを設定。
プロジェクト設定のMaps & ModesのDefault GameModeに設定。
マップに置いてたプレイヤーを削除してPlayer Startを配置。

カメラの作成

プレイヤークラスのViewportでSpring ArmとCameraを作成。
回転をZ軸-90度にして、Projection ModeをOrthographicに設定。
Ortho widthでカメラの距離を設定 700。
Spring ArmのDo Collision Testのチェックをはずす。

入力受付

Input Mapping Context とInpute Actionの作成してプレイヤークラスに実装。
もっと複雑にアニメーションを組みたいときはPaperZDというプラグインを使うと便利っぽい。

最後の微調整

Character Movement(CharMoveCom)の設定変更

項目設定値効果
Gracvity Scale3落ち方がふわっとしてたのがしゅっとなった
Jump Velocity800重力変更で高く飛べなくなったのが直った
Air Controll0.7反応が良くなった
Use Flat Base for Floor ChecksON崖から落ちるセーフティゾーンが広すぎるのを修正
Constrain to PlaneON平面に拘束させる、オブジェクトによって前後ずれる対策。
Plane Constrant NormalY=1拘束する平面の位置を指定

この動画を制作したCobra Codeさんが、ここまでの設定や基本的なコーディングの部分をまとめてプロジェクトのテンプレートを作って配布してくれてる。
すごいありがたい。
https://cobracode.notion.site/Unreal-Engine-2D-Templates-91717d7380c54dbca19bd3e4cfab506d

感想

3次元前提のライティングや効果がデフォルトで入っている分、2次元を2次元らしく見せるのにいろいろな設定を見直す必要があって大変なんだなと思った。
これを解明して公開してくれる人たちには本当に感謝だね。
配布プロジェクトがあっても基礎知識とメカニズムを知らないとうまく扱えないので、やっぱりチュートリアルはやってよかったし大事。
ドット絵も最初は興味なかったけど、実際に動くとかわいく思えてきた。