とあるゲームプログラマの挑戦と敗北の歴史

UE4とプログラミングとmayaとpythonとhtmlとマラソンを中心に情報を発信する元「技術ブログを目指すブログ」から再始動した毎日の日々を発信するブログです。

UE4:オンラインラーニング(Paper 2D プロジェクトを始めよう)

UE4オンラインラーニング
Paper 2D プロジェクトを始めよう
を受講した際のおぼえ書きです。

https://learn.unrealengine.com/course/3770296


なんと、今月配信の新しいコースです!



プロジェクトの作成)
2Dサイドスクロールのテンプレートから作成し、
事前に Paper2dプラグイン を有効にしておく必要があります。
f:id:toncrimentan_w:20211011224429p:plain

f:id:toncrimentan_w:20211011224553p:plain



テクスチャのインポート方法)
まず、マップ用、キャラ用のtgaデータをuassetとして
インポートする必要があります。

・tgaをドロップすることでインポートします。
f:id:toncrimentan_w:20211011224743p:plain
・圧縮>圧縮設定
 をUserInterface2Dに変更
f:id:toncrimentan_w:20211011224807p:plain
・レベルオブディテール>ミップマップ全般設定
 をミップマップなしに変更
f:id:toncrimentan_w:20211011224818p:plain
・アジャストメント>ChromaKeyTexture
 を有効に変更
f:id:toncrimentan_w:20211011224905p:plain
・アジャストメント>ChromaKeyColor
 をクリックし、スポイトを利用しテクスチャ画像の背景部分を選択することで
 テクスチャの背景の部分を抜きとして扱うように指定します。
f:id:toncrimentan_w:20211011224929p:plain
 すると、このように
f:id:toncrimentan_w:20211011225231p:plain
・1つ設定すればあとは
 アセットを右クリック>スプライトアクション>Paper2Dテクスチャ設定を適用
 で一括抜き設定ができるらしい(要確認)
 すると、無事ほかのスプライトも抜き設定が完了する
f:id:toncrimentan_w:20211011225518p:plain



スプライトの作成方法)
1つのテクスチャには複数枚のキャラクターのパラパラ漫画画像が含まれています。
複数枚の画像を一枚ずつ抽出してモノがスプライトです。

・テクスチャを右クリック>スプライトアクション>スプライトを抽出
 をクリックすることで、スプライトを自動で抽出することができます。
f:id:toncrimentan_w:20211012002944p:plain
・開いてみるとわかる通り、
 これではスプライトごとに異なるサイズと認識されてしまいます。
f:id:toncrimentan_w:20211011225917p:plain
・設定>スプライト抽出モード
 をグリッドに変更
 グリッド>セルの幅、セルの高さ
 を64x64に変更することで無事、用意したときのサイズに認識できました。
f:id:toncrimentan_w:20211011230114p:plain
・抽出をクリックすることで
 ナンバリングされたスプライトの抽出に成功します(0~)
f:id:toncrimentan_w:20211011230244p:plain
・抽出したスプライトは、ひとつのフォルダにまとめておきます。
f:id:toncrimentan_w:20211011230306p:plain


フリップブックの作成方法)
フリップブックとは、
抽出したスプライトから生成される、一連のパラパラ漫画アセットです。

・抽出したスプライトをすべて選択、
 右クリック>フリップブックを作成
 をクリックすることで。
f:id:toncrimentan_w:20211012003029p:plain
・フリップブックという動画アセットが作成できます。
(画像は動いています。)
f:id:toncrimentan_w:20211011230558p:plain
・フリップブックは別フォルダにまとめておきます。
f:id:toncrimentan_w:20211011230612p:plain
・フリップブックを開くと
 以下のようにタイムラインで制御可能なエディタが表示されます。
 これは便利そう!
f:id:toncrimentan_w:20211011230707p:plain


タイルセットの作成方法)
こちらはマップに関するアセットです。
複数の床から構成されたタイル画像から、
マップ作成時に利用するアセットを作成します。

・テクスチャを
 右クリック>スプライトアクション>タイルセットを作成
 を選択するとタイルセットが作成される
f:id:toncrimentan_w:20211011231708p:plain
・作成したタイルセットは別フォルダにまとめておきます。
f:id:toncrimentan_w:20211011231738p:plain
・タイルセットを開くと
 以下のようなタイルセットエディタが出現する
f:id:toncrimentan_w:20211011231802p:plain
・タイルセット>BorderMarginを
 4 4 4 4に変更
 タイルセット>Per-Tile Spacingを
 8 8 に変更でいい感じのタイル間隔に変更します。
f:id:toncrimentan_w:20211011231935p:plain



タイルのコリジョン設定)
・タイルの衝突を選択しておきます。
f:id:toncrimentan_w:20211011232018p:plain

・ボックスの追加
 をクリックすることでボックスコリジョンを作成できます。
f:id:toncrimentan_w:20211011232033p:plain
・さらに、頂点を選択し形を変えることができる。
f:id:toncrimentan_w:20211011232133p:plain
 TIPS:
 グリッドを細かく表示して完璧につくるのがオススメ
f:id:toncrimentan_w:20211011232225p:plain

・ポリゴンを追加
 をクリックすることで頂点を指定してポリゴンコリジョンを作成できます。
 四角以外の形状はこれで対応します。
 (時計回りに選択し→Enter)
f:id:toncrimentan_w:20211011232402p:plain
・Shiftを押しながらクリックで頂点の追加
 Deleteで頂点を削除できます。
f:id:toncrimentan_w:20211011232458p:plain

同様の手順ですべてのタイルにコリジョンを設定していきます。
f:id:toncrimentan_w:20211011232522p:plain



タイルマップの作成)
タイルマップとはタイルセットから作られた実際のマップです。
(タイルマップを並べて使うこともできますが、実質タイルマップがマップです)

・タイルセットを右クリック>タイルマップを作成
 をクリックすることでタイルマップを作成します。
f:id:toncrimentan_w:20211011233110p:plain
・別のフォルダに移動しておきます。
f:id:toncrimentan_w:20211011233136p:plain
・タイルマップを開くと
 タイルマップエディタが表示されます。
 (作成元のタイルセットから生成したタイルマップを作成できます。)
f:id:toncrimentan_w:20211011233159p:plain
・セットアップ>MapWidth、MapHeight
 を24x24に変更することでマップを大きくできます。
f:id:toncrimentan_w:20211011233246p:plain
 TIPS:
 グリッドを表示しておくのがオススメ
f:id:toncrimentan_w:20211011233337p:plain



レイアの作成)
・マップを構成する3つのレイアを作成します。

f:id:toncrimentan_w:20211011233549p:plain
 Backgroundレイアは
 LayerCollidesのチェックを外し、単なる背景として作成します。

 Middleレイアは
 LayerCollidesのチェックはそのまま

 Foregroundレイアは
 LayerCollidesのチェックを外し、単なる前景として作成します。

 並びもForeground、Middle、Backgroundの順

・タイルを選択すると、グリッドの方に絵を描くように配置することができます。
f:id:toncrimentan_w:20211011233810p:plain
・消しゴムで消すこともできる。
f:id:toncrimentan_w:20211011233822p:plain
・Shiftを押しながら複数のグリッド選択で複数のタイルを複製し
 配置することができます。
f:id:toncrimentan_w:20211011233846p:plain
・複数のタイルを選択して一度に配置することもできる。
f:id:toncrimentan_w:20211011233926p:plain
 タイルを左右反転、上下反転して配置することもできてしまう!!
f:id:toncrimentan_w:20211011233958p:plain
・塗りつぶし
 フィル>タイル選択>塗りたい箇所を選択
 で塗りつぶすこともできます。
f:id:toncrimentan_w:20211011234035p:plain

Foreground、Middle、Background それぞれのマップができました。
f:id:toncrimentan_w:20211011234142p:plain



レベルの作成)
いよいよ、作成したタイルマップをレベルに配置します。

・タイルマップをレベルに配置
f:id:toncrimentan_w:20211011234540p:plain
・カメラを右、ライティングをなしに変更するとよい。
f:id:toncrimentan_w:20211011234622p:plain
 TIPS:
 エディタの環境設定で
 レベルエディタ>グリッドのスナップ>2の累乗スナップサイズを使用
 にチェックをれることで移動間隔を2の累乗から設定できるようになります。
f:id:toncrimentan_w:20211011234758p:plain

プレイヤースタートを配置し実行すればこの通り
f:id:toncrimentan_w:20211011234825p:plain



プレイヤーの作成)

・キャラクターは、
 PaperCharacterクラスを親として作成します。
f:id:toncrimentan_w:20211011234909p:plain
・Spriteコンポーネント
 SourceFlipbookを作成したアイドリングのフリップブックに変更することで
 アイドリングの画像を変更できます。
 (グレイマン、カワイイですね)
f:id:toncrimentan_w:20211011234951p:plain
CapsuleコンポーネントのCapsuleHalfHeight CapsuleRadiusを変更し
 コリジョンの大きさを整える
f:id:toncrimentan_w:20211011235007p:plain



カメラの作成)
・SpringArmコンポーネントを作成し、-90度回転
 UsePawnControlRatationのチェックを入れ、InheritYawのチェックを外し、
 キャラクタのYaw回転の影響を受けないようにする
f:id:toncrimentan_w:20211011235146p:plain
・あとは、SpringArmにカメラコンポーネントをつける
f:id:toncrimentan_w:20211011235217p:plain



選択ノード)
ひし形のピンはワイルドカードです。
右クリック>ピンの種類を変更
から入力をかえることができます。このように。
f:id:toncrimentan_w:20211011235649p:plain



キャラの移動)
・SpriteコンポーネントのSetFlipbookノードを利用し、
 キャラクターの画像を切り替えることができます。
f:id:toncrimentan_w:20211011235950p:plain
・実際に出来上がった、歩きBPです。
f:id:toncrimentan_w:20211011235751p:plain



キャラの走り)

・プロジェクト設定>インプット>アクションバインディング
 から走りボタンを指定します。

 簡単な指定方法は、キーボードボタンをクリックすることで、
 直接キーボードから設定することです。
f:id:toncrimentan_w:20211012000304p:plain
・実際に出来上がった走りBPです。
 走り中かどうかにより、移動画像を変えています。
f:id:toncrimentan_w:20211012000516p:plain



キャラのジャンプ)

2Dのフリップブックを利用した開発では、
通常のアニメーションBPを利用した開発とちがい、
モーションのながれをBPで実装しなくてはなりません。

そのため今まで知らずとも製作してこれた、
OnJumpedイベント、OnReachedJumpApex、OnWalkingOffLedgeイベントなど
に関しても理解する必要があります。

・OnJumpedイベント
 このイベントはJumpをした直後に実行されるイベントです。
f:id:toncrimentan_w:20211012000833p:plain

・以下がジャンプのBPです。

 あらかじめBeginPlayで
 ジャンプ最高点イベント(OnReachedJumpApex)にバインド、
 スプライト再生完了イベント(OnFinishedPlaying)にバインドしておきます。

 ジャンプ開始イベント(OnJump)
 が呼ばれた時に、ジャンプ開始画像に変更

 ジャンプ最高点イベント(OnReachedJumpApex)
 が呼ばれた時に、ジャンプ開始から落下に変わる画像に変更

 スプライト再生完了イベント(OnFinishedPlaying)
 が呼ばれたときに、開始から落下に変わる画像かを判別し
 ジャンプ落下画像に変更

 以上がジャンプの遷移です。
f:id:toncrimentan_w:20211012001257p:plain


・落下イベント(OnWalkingOffLedge)は
 ジャンプしてないが、落下した場合を検知し呼び出されるイベントです。
 ここで落下時の画像に変更することができます。
f:id:toncrimentan_w:20211012001414p:plain


長いですが、以上が、
epic標準のパラパラ漫画タイプの2Dゲームの作成環境です。

動画では、トップビュータイプのゲーム制作に関してもレクチャーしています。



実際に出来上がったもの
youtu.be



こちらのコースを受講することで、
epic標準のパラパラ漫画タイプの、
ゲーム制作環境について理解できました。

SpriteStudio、Spineなどと違い、
スパロボではなく、スーパーマリオ程度か、な~んだ
と侮ってはいけないです。
パラパラ漫画タイプのものを制作するのに便利な機能がついています。

そして、実際にマップを歩かせることになるため、
コリジョン付きタイルを配置するための、
マップ作り機能に関しても理解できます。

ちっちゃいグレイマンの画像が手に入ります。

とても面白かったです。オススメのコースです。