😺
【UE5 備忘録】2Dアクションゲームの作り方
どうも~つぶあんです。
UE5.6がリリースされたので、UE熱が復活!!UEライフの再開です。
2Dやドット絵のゲーム作成に以前から興味があったので自分用の備忘録としてまとめました。
参考にさせていただいた「UE5 2Dとか」さんの動画はこちらです。↓↓
あくまで自分用の備忘録なので、わかりにくかったり、おかしな個所もあると思いますので、ご了承くださいませ。
プロジェクトの新規作成
- ブランクプロジェクトを選択
- ブループリントを選択
- ターゲットプラットフォーム:
Desktop
- 品質プリセット:
Scalable
- プロジェクト名:
Tsubuan2DAction
- 作成ボタンを押す。
フォルダ作成
コンテンツフォルダ内に以下のフォルダを作成する。
2DAction | Assets | Flipbooks |
Sprites | ||
Textures | ||
Tilemaps | ||
Blueprints | ||
Input | Actions | |
Maps | ||
PaperZD | ||
Tools |
新規レベル作成
- レベルの新規作成。
ファイル⇒新規レベル⇒空のレベルを選択し、作成ボタンを押す。
ビューポートが真っ黒になるが気にしない - 作成したレベルを保存する。
2DAction
>Maps
>L_Template
- プロジェクト設定 > マップ&モード >
エディタのスタートマップ
とゲームのデフォルトマップ
を今作ったL_Template
に変更する。
これで再起動後も空のレベルの状態になる。
2D用エディタ設定
- レアルタイムビューポートを
Off
- パースペクティブから
左
を選択
- ワイヤーフレーム⇒
ライティングなし
を選択
この状態が横スクロールの基本になる。
右方向がX軸のプラス方向(+X)
左方向がX軸のマイナス方向(-X)
上方向がZ軸のプラス方向(+Z)
下方向がZ軸のマイナス方向(-Z)
※Y方向は奥行(手前がプラス)
スプライトシート
- キャラクターの画像を右クリック⇒スプライトアクション⇒
Paper2Dテクスチャ設定を適用
をクリック。 - 適用したテクスチャを開く。
- LOD⇒Mip Gen Settings:NoMipmaps
- 詳細設定⇒Filter:Nearest
- または1~4は一括設定ツールで。
- アジャストメント⇒Chroma key Textureにチェック
スプライトの抽出
- スプライトアクション⇒
スプライトを抽出
- スプライト抽出モード:Auto
- 名前付けテンプレート:{0}
- 抽出ボタンを押す
連番フリップブック作成
- ***_0のスプライトを右クリック⇒フリップブックを作成をクリック
- 名前を***_00_Idle
- _0から_2を選択して右クリック⇒フリップブックを作成
- 名前を***_01_Walk
- ***_4を選択して右クリック⇒フリップブックを作成
- 名前を***_02_Jump
- Assetsフォルダ内にFlipbooksフォルダを作成し、その中に作成したフリップブックを移動する
PaperZDのインストール
- FABでPaperZDを追加してエンジンにインストールする。
- 編集⇒プラグイン⇒PaperZDを有効化して再起動する。
AnimationSource
- コンテンツフォルダ⇒2DActionフォルダにPaperZDフォルダを作成。
- PaperZDフォルダ内で右クリック⇒PaperZD⇒AnimationSourceをクリック。名前をAnimSource_Player。ここにキャラクターのFlipbookを格納していく。
- AnimSource_Playerを開く。
- 左上の+Add Newをクリック⇒New Animation Sequenceを選択。
- 名前をAS_Player_00_Idle。同様にAS_Player_01_Walk、AS_Player_02_Jumpを追加する。
- 右のAsset Details⇒Animation Dataにそれぞれ以前に作成したフリップブックを指定する。
PaperZD AnimBP
- PaperZDフォルダ内で右クリック⇒PaperZD⇒PaperZD AnimBP⇒先ほど作成したAnimSource_Playerを選択。名前をZDAnimBP_Player。
- ZDAnimBP_Playerを開く。
※主にイベントグラフ上では全体条件を、AnimGraph上ではアニメーションの切り替え処理を行う。
イベントグラフ < PaperZD AnimBP
※Character Movement refはCharacter Movementの右側を右クリックで変数に昇格させてCharacterMovement_refとリネーム
AnimGraph < PaperZD AnimBP
- ResultからAdd New State Machineを追加、名前をMain States
- Main Statesをダブルクリック。右クリックでAnimetion Stateを2つ追加して、矢印をつなげ名前をLocomotion、Jumpとする
- Locomotionをダブルクリック。
- 2に戻ってJumpをダブルクリック。
- 2に戻ってLocomotionとJumpの間の左右矢印の上をダブルクリック。
- 2に戻ってLocomotionとJumpの間の左右矢印の下をダブルクリック。
※もしくはこちらのサイト様が参考になりました。
How to PaperZD その3-StateMachineでアニメーション遷移-
PaperZD Animation
- コンテンツフォルダ⇒2DActionフォルダ⇒Blueprintsフォルダ⇒右クリック⇒ブループリントクラス⇒すべてのクラス⇒PaperZDCharacterを選択。名前をBP_Player_ZDとする。
- BP_Player_ZDを開く。
- コンポーネントのSpriteを選択。右の詳細⇒スプライト⇒Source Flipbookで***_00_Idleを選択。
- コンポーネントのBP_Player_ZD(Self)を選択。
- +追加ボタンから
SpringArm
を追加。 - SpringArmを選択してから+追加ボタンで
camera
を追加する。 - SpringArmを選択してから右の詳細のトランスフォーム⇒回転をワールドに変更して絶対回転にする。そしてZを
-90
に。 - カメラコリジョンの
Do Collision Test
のチェックを外す。(障害物があるとカメラが勝手に切り替わるやつ) - Cameraを選択してから右の詳細⇒カメラセッティング⇒Projection ModeをPerspectiveから
Orthographic
(平行投影)に変更する。 - その下のOrtho Widthを
1500
に変更。 - 右の詳細から、PaperZD⇒Anim Instance ClassでZDAnimBP_Playerを選択。RenderComponent RefでSpriteを選択。
- これでテストプレイしてみると、ちゃんと動くようになる。
ゲームモードの作成
- Blueprintsフォルダ内で右クリック⇒ブループリントクラス⇒Game Mode Baseを選択。
- 名前を
BP_Gamemode_ZD
とする。 - BP_Gamemode_ZDを開いて、右のクラス⇒Default Pawn Classを
BP_Player_ZD
にする。 - ワールドセッティング⇒ゲームモードオーバーライドで
BP_Gamemode_ZD
を選択。
※プロジェクト全体をデフォルトで設定する場合はプロジェクト設定⇒マップ&モード⇒デフォルトのゲームモードに設定する。両方設定した場合はワールドセッティングが優先される。
※Player Startの追加も忘れずに。
キャラクターの色味修正 ポストプロセス設定
- コンテンツの追加ボタン⇒ビジュアルエフェクト⇒
PostProcessVolume
を画面にドラッグ。 - トランスフォームの位置をリセット。
- 右の詳細タブから、Infinite Extent(Unbound)に
チェック
- レンズ⇒Bloom⇒しきい値を
1.0
- Exposure⇒露出補正とMin Ev100とMax Ev100を
0.0
- Image Effects⇒ビネット効果強度を
0.0
- カラーグレーディング⇒Miscの中の色域拡張とトーンカーブ量を
0.0
インプット設定
- 2DActionフォルダに
Input
フォルダを作成。さらにInputフォルダ内でActions
フォルダを作成。 - Actionsフォルダ内で右クリック⇒入力⇒
入力アクション
を選択。 - 名前を
IA_Jump
,IA_MoveRight
- Value TypeをIA_Jumpは
Digtal
,IA_MoveRightはAxis1D
※Value Typeについて
Digtal:押すだけのような場合。
Axis1D:ゲームパッドのスティックの横軸や縦軸の値が必要な場合。
Axis2D:3Dゲームなどで360°移動するような場合。
Axis3D:VRなどで3D空間上のコントローラー用の場合。 - Inputフォルダへ移動して、右クリック⇒入力⇒
入力マッピングコンテキスト
を選択。 - 名前を
IMC_2DAction
として開く。 - マッピング⇒Mappingsの+を押してIA_Jumpを選択。スペースバーを設定する。
- マッピング⇒Mappingsの+を押してIA_Rightを選択。
A
とD
を設定する。 - AのModifiersの+を押してインデックス[0]を追加して
Negate
を選択する。 ※Negateは値が反転する設定のこと
Enhanced Input宣言
BP_Player_2D
Enhanced ジャンプ設定
BP_Player_2D
Enhanced 左右移動設定
BP_Player_2D
左右移動時の振り向き
関数を定義:FlipTurn
イベントグラフに戻ってFlipTurnを実行する
カプセルサイズの調整
- BP_Player_ZDを開く
- ビューポートを選択
- 左のCapsule Componentを選択して、右の詳細から、形状⇒Capsule Half HeightとCapsule Radiusを調整する
Character Movementの設定
- BP_Player_ZDを開く
- 左のCharacter Movementを選択して、右の詳細でキャラクターの制御を設定する。
- キャラクタームーブメント(一般設定)⇒Gravity Scale:2.0 ※重力
- キャラクタームーブメント:歩行⇒Max Walk Speed:600 ※歩くマックススピード
- キャラクタームーブメント:歩行⇒詳細設定⇒Use Flat Base for Floor Checks:チェック ※地面との接地面をカプセルの形状に沿うかどうかの設定
- キャラクタームーブメント:歩行⇒詳細設定⇒Perch Radius Threshold:0.0 ※例えば段差に乗っていられる距離
- キャラクタームーブメント:跳躍/落下⇒Jump Z Velocity:1000 ※ジャンプ力
- キャラクタームーブメント:跳躍/落下⇒Air Control:0.8 ※空中時の制御
- プレナームーブメント⇒Constrain to Plane:チェック
Plane Constraint NormalのY:1.0
※オブジェクト同士が衝突した際に奥や手前に押し出されなくなる
タイルマップ
- Assetsフォルダ⇒Timemapsフォルダにタイルマップ素材をインポート。
- テクスチャを選択して、右クリック⇒スクリプト化されたアセットアクション⇒NewPaper2DTextureSettingsで画像一括調整
- タイルセットを作りたい画像を右クリック⇒スプライトアクション⇒タイルセットを作成。TS_Sample_A
- TS_Sample_Aを開く。
- タイルをクリックしてみて、選択範囲のサイズが合っていなかったらTile Sizeを調整する。16*16
- タイルを選択した状態で、
ボックスを追加
をクリック。 - 左上の
タイルの衝突
をクリックするとそのタイルにコリジョンが設定される。 - この要領で、ほかのコリジョンを付けたいタイルも設定する。
- TS_Sample_Aを右クリック⇒
タイルマップを作成
をクリック。TM_Sample_A_01 - TM_Sample_A_01を開き、左上のタイルグリッドをクリック。
- 右の詳細からセットアップ⇒Pixels Per Unreal Unit:0.16であるか確認。
- 0.16でなかったら、プロジェクト設定⇒エディタ⇒Paper2D インポート⇒デフォルトのUnreal単位あたりのピクセルが0.16になっているか確認。
※1ブロック:16px=0.16, 1ブロック:32px=0.32 となる。 - 右の詳細からセットアップ⇒
Map Width
とMap Height
を任意で設定。とりあえず16しておく。 - 右の詳細からタイルマップ⇒レイヤーを2つ追加。 01_Sky, 02_Cloud, 03_Ground
- 01_Skyのレイヤーを選択⇒左上のフィルを選択⇒水色のタイルを選択⇒グリッドをクリックすると全体に塗りつぶされる。
- 02_Cloudのレイヤーを選択⇒左上のペイントを選択⇒雲を範囲選択してグリッドに貼り付ける。
- Shiftを押しながらグリッドを範囲選択しればコピーできる。
- 03_Groundのレイヤーを選択⇒左上のペイントを選択⇒地面とか草木などを画面に配置する。
- 選択したレイヤー⇒Layer Collidesのチェックを外すと、タイル毎に設定したコリジョンでも無しにできる。
- 作成したタイルマップをレベルに配置する。※トランスフォームの位置Yの値を-1にする。
- エディタの環境設定⇒コンテンツエディタ⇒タイルセットエディタ⇒押し出し量:1に変更。
- テストプレイで画面にノイズが走る場合は、TS_Sample_Aを右クリック⇒タイルシートテクスチャを調整をクリック。
- 新しく作成されたテクスチャファイルを右クリック⇒スクリプト化されたアセットアクション⇒NewPaper2DTextureSettingsで画像を調整しておく。
- レイヤーの間隔を変更する場合:Separation Per Layer
- コリジョンの厚みを変更する場合:Collision Tickness
- タイルマップのアイコンをサムネイル画像で分かりやすくするには、タイルマップを右クリック⇒アセットアクション⇒サムネイルをキャプチャを選択
- 登れる坂の角度設定:BP_Player_ZDを開き、Character Movement⇒右の詳細からWalkable Floor Angle ※登れない場合はタイルマップのトランスフォームの位置Yを0に。
- 登れる段差設定:BP_Player_ZDを開き、Character Movement⇒右の詳細からMax Step Height
Discussion