Unityで2Dタワーディフェンスを作ります。今回はマップを作ります。UnityのTilemapという機能を使ってみます。
- Mac mini (M1, 2020)
- Unity 2022.3.36f1
プロジェクトの作成
まずはプロジェクトの作成です。
- Unity Hubで「新しいプロジェクト」ボタンをクリックします。
- テンプレートは「2D (Built-In Render Pipeline) 」を選択します。
- プロジェクト名を「TowerDefense」にします。お好みでなんでもOKです。
- 「プロジェクトを作成」ボタンをクリックします。
最初のちょっとした設定
シーン名の変更
デフォルトで作成されているシーンの名前が「SampleScene」なので、これを「Stage1」に変更します。
今回は、TitleScene, Stage1, Stage2, Stage3, Stage4, Stage5 の6個のシーンでゲームを作っていきたいと思っています。で、最初に制作するシーンがStage1になります。
アスペクト比の固定
毎度おなじみ、アスペクト比を固定するための設定をします。パソコン用のブラウザゲームとしてリリースするので、アスペクト比を16:9に固定します。
- ヒエラルキーで右クリック「UI > Canvas」を選択し、Canvasオブジェクトを作成します。
- Canvasのインスペクターで「Canvas Scaler > UI Scale Mode」を「Scale With Screen Size」に変更します。
- 「Reference Resolution(参考解像度)」を X: 540、Y: 960 にします。アスペクト比が16:9ならばなんでもOKです。
- 「Screen Match Mode」を「Expand」にします。
- Canvasの配下に空のオブジェクトを作り、名前を「AspectRatioFixer」にします。
- AspectRatioFixerのインスペクターで「Rect Transform」の「Width」を540、「Height」を960にします。
今後作成するUIオブジェクトはAspectRatioFixerの配下に入れます。
マップの作成
マップの作成にはTilemapを使います。Tilemapとは、2Dゲームで効率的に地形などを作成するためのUnityの機能です。
画像のインポート
マップ用の画像を用意してインポートします。Kenneyさんから拝借したアセットを私がちょっと加工したものを使っています。
Assetsフォルダの下にImagesフォルダを作成し、さらにその下にMapフォルダを作成します。そこに画像をドラッグ&ドロップしてインポートします。
インポートした画像のインスペクターで「Pixels Per Unit」を64に変更します。画像を全選択して値を変更し「Apply」ボタンを押せばまとめて変更できます。
Pixels Per Unitとは、ゲームワールド内の1ユニットあたりのピクセル数を指定する設定です。Tilemapの1マスが1ユニットです。今回使用する画像は1辺が64ピクセルなので64にしています。
Tile Paletteの作成
Tile Paletteとは、画像をTileとして管理しTilemapに簡単に配置するためのツールです。
メニューバーの「Window > 2D > Tile Palette」を選択して Tile Paletteウインドウを開きます。
お好みで適当な場所にドラッグしてタブ化してください。
左上の「No Valid Palette」をクリックして「Create New Palette」を選択します。
すると、新しいパレットを作成するヤツが開きます(このUIの名前なんていうの)。
「Name」をFieldにして(なんでもいい)「Create」ボタンを押します。
保存場所を聞かれるので「Assets > Tilemaps」フォルダを作って保存します。
パレット内の「Drag Tile, Sprite or Sprite Texture assets here.」と書かれているところにTile化する画像をドラッグ&ドロップします。
保存場所を聞かれるので「Assets > Tilemaps」に保存します。
Tilemapの作成
マップは2層のレイヤー構造にします。1つ目のレイヤーは草地だけのマップ、2つ目のレイヤーには道や障害物を描画します。2つ目のレイヤーのオブジェクトに当たり判定をつけることによって、砲台を設置できない場所を検知する仕組みを作ります。
まず、レイヤーを作成します。
なんらかのオブジェクトを選択してインスペクターの右上の「Layer」をクリックして「Add Layer…」を選択します。
「Sorting Layers」を開いて2つのレイヤーを追加します。名前はWayとObjectにしました。
最初からあるDefaultは草地、Wayは道や障害物、Objectは敵や砲台を描画するレイヤーです。リストの下にある要素ほど前面に表示されます。
マップオブジェクトを入れておくためのフォルダの役割を果たすオブジェクトを作成します。
ヒエラルキーで右クリック「Create Empty」を選択して空のオブジェクトを作成します。。名前をMapにします。
草地を描画する用のTilemapオブジェクトを作成します。
Mapオブジェクト上で右クリック「2D Object > Tilemap > Rectangular」を選択します。Mapの配下に「Grid > Tilemap」というオブジェクトが作成されます。
Gridの名前をGrid_Baseに変更します。
「Grid_Base > Tilemap」のインスペクターで「Tilemap Renderer > Additional Settings > Sorting Layer」がDefaultになっていることを確認してください。
道や障害物を描画するためのTilemapオブジェクトを作成します。
Mapオブジェクト上で右クリック「2D Object > Tilemap > Rectangular」を選択します。
Gridの名前をGrid_Wayに変更します。
「Grid_Way > Tilemap」のインスペクターで「Tilemap Renderer > Additional Settings > Sorting Layer」をWayに変更します。
カメラの設定
Main Cameraオブジェクトのインスペクターで「Camera > Size」を6に変更します。
ここで指定した数値によってTilemapのマス目の大きさが変わります。具体的には数値 * 2がTilemapの縦のマス目の数になります。
Tilemapにタイルを配置
ヒエラルキーで「Grid_Base > Tilemap」オブジェクトを選択します。Sceneビューに表示されているマス目がタイルです。ここにTile Paletteのタイルを配置していきます。
Tile Paletteの上部に、ペイント、塗りつぶし、スポイト、消しゴムなどのツールがあるのでこれを使ってタイルを配置していきます。
このTilemapではすべてのタイルを草地にするので左から4番目の選択範囲塗りつぶしツールを使うと簡単です。
ヒエラルキーで「Grid_Way > Tilemap」オブジェクトを選択します。
UIを表示するための領域に黒いタイルを敷きつめます。上1マス、右5マスに配置しました。
同じく「Grid_Way > Tilemap」オブジェクトを選択している状態で、道と障害物を配置します。
さいごに
ちゅーわけで、今回はマップを作成しました。コードは書いてないけど、ゲームが形になっていくのを見るのは楽しいですね。
次回からたぶんコードを書くことになります。
でわでわ
コメント