2D タイルマップでアートとゲームプレイを作成する方法
Unity 2022 LTS で作成されたサンプルの 2D トップダウン農業シミュレーションゲームである Happy Harvestで Unity タイルマップシステムがどのように使用されているかを学びます。
アートやアニメーションに関するこれらのテクニックやその他の多くのテクニックについては、電子書籍『 アーティストのための 2D ゲーム アート、アニメーション、ライティング』をご覧ください。
このシリーズの他の記事を読んで、Happy Harvestのエフェクトとビジュアルを再現する方法を学びましょう。
- ユニバーサル レンダー パイプラインの 2D ライトとシャドウのテクニック
- Unity 2022 LTS で 2D キャラクターをアニメーション化する方法
- VFX Graph と Shader Graph を使用した 2D 特殊効果 (近日提供開始)
今すぐ Unity Asset Store からHappy Harvest を ダウンロードしてください。
Unity タイルマップ システムを使用すると 、グリッド上に配置された小さなスプライトであるタイルを使用してゲーム ワールドを作成できます。レベルを 1 つの大きな画像として設計する代わりに、レベル全体で繰り返されるレンガのようなピースに分割することができます。これは、シミュレーターや RPG など、歩行可能な領域が広いゲームに特に役立ちます。
タイルマップは、アート作成にかかる時間、メモリ、CPU の使用量を削減するのに役立ちます。これは、タイルを専用のレンダラーでレンダリングし、画面に表示されないタイルを無効にすることができるためです。ブラシ ツールを使用すると、グリッド上にタイルを効率的にペイントでき、ペイント ルールを使用するようにスクリプト化できます。また、より効率的なテストと編集のために、自動衝突生成機能も備わっています。
タイルシートを作成するときは、オーバードローを削減するために、必要のないレイヤー化されたタイルマップを結合しないようにすることが重要です。Happy Harvest では、 すべてのタイルマップは Grid ゲーム オブジェクトの下に存在します。GroundBaseと呼ばれるタイルマップにすべての地上アートワークが含まれていることがわかります。タイルマップ レンダラーでレンダリング モードを Chunk に設定することで、これらすべてのタイルが同時にバッチ処理されます。これによりパフォーマンスを最適化できます。
サンプルの石畳の道は、タイルのアートワークのレイヤーを使用して作成することもできます。1つは石畳用、もう1つは芝生用です。これはアート制作の観点からは便利に思えるかもしれませんが、重なり合うピクセルのレイヤーによりパフォーマンスが低下します。異なる深度プレーンが必要な場合など、必要な場合にのみ個別のタイルマップを作成します。
Unity タイルマップ システムの仕組みを包括的に理解するには、電子書籍『 アーティストのための 2D ゲーム アート、アニメーション、ライティング』をダウンロードしてください。
Happy Harvest のタイルはセクションごとに作成されており、メイン パスや草地など、ゲームで頻繁に使用されるタイル マップが優先されています。これらのマップでは、さまざまな形状のパスを作成するために使用されるため、より多くのタイルが必要になります。対照的に、背景の松の木は正方形のタイルマップとしてレイアウトされているため、必要なタイルの数は少なくなります。
一般的に、垂直でキャラクターの前または後ろにレンダリングされる小道具は、別のソート レイヤーで GameObject に分離されます。ただし、2D Tilemap Extras パッケージに含まれる機能である GameObject Brush は、木製のフェンスなどのオブジェクトの一部をタイルマップ グリッドに配置するために使用されます。これらの小道具をより有機的なパターンで分散させるには、タイルマップの外側の階層内のゲームオブジェクトに配置できます。
タイルマップのセカンダリテクスチャ
Tilemaps フォルダーの下にあるすべてのタイルマップには 、法線マップ テクスチャとマスク マップ テクスチャと呼ばれる対応するものがあります。これらは同じ寸法とレイアウトを共有していますが、照明を表示するためにペイントされています。サンプルで照明がどのように作成されたかについては、記事「ユニバーサル レンダー パイプラインの 2D ライトとシャドウのテクニック」をお読みください。
スプライト エディターで、法線マップとマスク マップのテクスチャがタイル セットのメイン テクスチャに追加されます。Happy Harvestでは、マスク マップを使用して、キャラクターと小道具のリム ライト シルエット効果を作成します。ただし、タイルのほとんどは地面に使用されるため、リムライトは必要ありません。このため、このタイル セットのテクスチャの大部分は黒色になっており、リム効果のために作成された光の反射を回避します。例外は屋根に使用される建物タイルで、タイルの端は強調表示されます。
タイル パレット ツールは、Happy Harvest で各タイルマップのグリッドにタイルを効率的に配置するのに使用されます。パス シェイプのエッジまたはコーナーを手動で配置すると、時間がかかり、エラーが発生しやすくなります。パスやその他のタイルベースのシェイプに変更を加えるたびに、手作業を繰り返す必要があります。これを回避するには、 ルール タイル 機能を使用します。
ルール タイルは、図形の隣接するタイルに基づいて正しい境界タイルを描画します。Happy Harvestのプロジェクト フォルダーには、Palette_Tilesという名前のタイル パレットがあります。パレットの最初の行には、草のある土の部分など、頻繁に使用されるタイルが含まれています。これらはルールタイルです。インスペクターでゲームオブジェクトを選択すると、プロジェクト ビューにアセットが表示されます。このアセットを選択すると、このルール タイルの設定を確認できます。
プロジェクトに該当する場合は、これらのタイル アセットを再利用したり、テクスチャにペイントしたりすることで時間を節約できます。
サンプル内のすべてのタイルは同じサイズと形状で、同じグリッド ゲームオブジェクトに含まれています。これにより、タイルマップの数を少なく抑えることができます。Terrain Manager と呼ばれるコンポーネントが Grid GameObject にアタッチされ、次のセクションで説明するゲームプレイの可能性を提供します。
Grid ゲームオブジェクトの下のタイルマップには次のものがあります。
- UnderwaterTiles:これらは、水中タイル、崖、池エリアの緑地として使用されます。
- 水これらのタイルは、水のアニメーションをシミュレートするためにシェーダーグラフで作成された、Sprite-Lit-Material と呼ばれる他のシェーダーとは異なるシェーダーを使用します。
- GroundBase:これは、標高タイルの隙間を埋めるための小道、草、泥、石のタイルで構成された地面のアートワークです。
- ObjectsInTiles:これは、フェンスのように、タイル パレットの ゲーム オブジェクト ブラシ を使用してタイルマップ内にペイントされたゲーム オブジェクトに使用されます。
- TilledTilemap:これらのタイルは、種を植えることができるタイルを検出するためにコード内で使用されます。
- WateredTileLayer:これは、タイルが濡れているように見せるためにゲーム ロジックによって使用されます。タイルが乾いたら、「濡れた」タイルを取り除きます。
- 倉庫、家:これらのタイルマップは倉庫と家を作成するために使用されます。タイルマップを使用して建物を作成することで、アーティストは建物の形状やサイズをより効率的に変更できる柔軟性が得られ、建物の一部で同じテクスチャが使用されるためテクスチャスペースを節約できるようになりました。
- 作物:これにより、すべての植物が 1 つのゲーム オブジェクトにグループ化され、Terrain Manager でも使用されます。
Grid ゲームオブジェクトにアタッチされた Terrain Manager スクリプトは、タイルの変更を処理し、タイルを使用して作物を追跡します。Tilemap APIを使用します。これはグリッドベースのゲームプレイを設定するのに役立ち、2D でアイテムの位置をより簡単に識別するのに役立ちます。
この MonoBehaviour クラスは、GroundData と CropDataという 2 つの汎用クラスを作成します。これらには、タイルが濡れているように見える時間の長さ、植物の成長速度、植物が枯れる前に収穫せずにどのくらい持続するかなど、ゲームプレイに関連する変数が含まれます。
Terrain Manager スクリプトは、ゲームプレイの目的で使用される以下のタイルマップとタイルを参照します。
- 地面タイルマップ:これは、プレイヤーが掘って種を植えることができる場所を示す土壌タイルを含むタイルマップを参照します。このタイルマップの外側のタイルを掘っても何も起こりません。
- タイルマップの切り取り:これは、クロップの親オブジェクトである Tilemap GameObject を参照します。ここで Tilemap API を使用すると、切り抜きタイルを配置、更新、削除できます。
- 水タイルマップ:これを使用して、耕作された土壌タイルをシミュレートされた水でペイントし、これらのタイルが植え付けと栽培の準備ができていることをプレイヤーに視覚的に伝えます。
- 水をかけられたタイル:これは水のグラフィックが付いた ルールオーバーライドタイル です。これにより、新しいルールを設定せずに、ルールタイルのバリエーションを持つタイルを作成できます。
- 耕作可能なタイル:これは、プレイヤーが掘削に使用できるタイルを識別するために使用されます。
- タイル張りタイル:これは耕された土壌のビジュアルを描くために使用されるルール タイルです。
Terrain Manager スクリプトには、Tilemap API を使用して Vector3int 位置形式でタイル情報を読み取り、それに応じてタイルを更新する関数が含まれています。これらの関数は、PlayerController がさまざまなツール上で関数をトリガーしたときに、さまざまなツールから呼び出されます。
見栄えの良いビジュアルを確保するには、補間やエッジのスムージングによってタイル間ににじみや小さな隙間ができないようにする必要があります。これは、ピクセル アート ゲームでは発生しません。ピクセル アート ゲームでは、フィルター モードがポイント (フィルターなし) に設定されているため、スプライトはスムージングされません。Happy Harvestでは、タイルのスプライトが Sprite Atlas にパックされており、簡単なセットアップでプロジェクトの編成、パフォーマンス、制御が向上します。
タイルシートを使用していない場合は、タイルマップ レンダラーでの継ぎ目と内部ソートを支援するために Sprite Atlas を使用することをお勧めします。ほとんどのスプライトではデフォルト設定が機能しますが、タイルマップでは少し調整が必要になる場合があります。パック時にスプライトの回転を回避したり、アルファ拡張などの機能により、タイルのエッジがよりシャープに維持されます。
タイルを完璧に接続する方法、繰り返しを避ける方法、シーンを読みやすくする方法を学ぶことは、試行錯誤の経験になる可能性があります。電子書籍『 アーティストのための 2D ゲーム アート、アニメーション、ライティング』でタイルマップ システムの詳細を学びます。
以下のブログ投稿では、Unity で作成されたレトロな 2D ゲームを紹介し、2D 開発のヒントをさらに提供しています。
- Skul での鮮明な征服のための 2D ピクセル パーフェクト:ヒーロースレイヤー
- レトロな 16 ビット ゲーム用に Unity プロジェクトを設定する方法
- レトロな 8 ビット ゲーム用に Unity プロジェクトを設定する方法
- 2Dゲームのための素晴らしいヒントをまとめて紹介
さらに、他の 2D デモ「The Lost Crypt」 と 「Dragon Crashers」もご覧ください。
上級プログラマー、アーティスト、テクニカルアーティスト、デザイナー向けのリソースが 、Unity ベストプラクティスハブにさらに見つかります。