必要なGameObjectを列挙する
さて今回から具体的にこのスーパーマリオみたいな横スクロールアクションゲームを作るわけですが,上の画面を見ても大雑把に言って次のGameObjectが必要なことが分かります:
- プレイヤーキャラ(上の画像では少女のウィッチ)
- 敵キャラ(上の画像では移動する炎)
- 背景(上の画像では山など)
- 壁や床などのタイル(上の画像の地面など)
- BGM
- 効果音
- アイテム(マリオの場合スターなど)
- お金
- スコアやお金やプレイヤーキャラのライフ等を表示するUI
- ファイヤーボールなどの弾
...etc
もちろんこれとは別にタイトルロゴやゲームオーバー画面も必要になるわけですが,ざっと列挙してもこれだけのものが必要だったりします.
・・・結構多いですねorz...
というわけで今回はゲームの舞台に最低限必要な3と4を用意します.
タイルと背景用のアセットの紹介
タイル用に使用するアセットの「Too Cube Forest, the free 2D platformer game tile set」には既に背景まで入っていますのでこの一つのアセットだけでこれは実現できます.便利で良いですね^^
タイルはこれで決まりですね.
プレイヤーキャラクター用のアセットの紹介
あと肝心なプレイヤーキャラクターですが,せっかくなのでなるべく魅力的なキャラクターが良いですね. そう思ってアセットストアで見つけたのがこれです:
作者は韓国の方のようですが,大変魅力的でアニメーションも良いのでお借りしました. 今回はこの方のスクリプトを少しだけ改造して,目的にかなう動作を実現したいと思います.
2Dアクションゲーム用の新規プロジェクトの作成
まず新規プロジェクトを作成します. 今回は安定動作が期待できそうなUnity 2019.4.20f1を選択しプロジェクト名に「2DWitchActionGame」と入れて作成しました:
テンプレートはもちろん2Dを選択します:
アスペクト比の設定
Unityのエディタが立ち上がったらまずアスペクト比を設定しましょう. 今回はパソコンでウィンドウモードでプレイすることを想定し,4:3に設定します. Sceneビューの上の方のタブの中からデフォルトではSceneの右隣にあるGameタブをクリックします.その下のDisplay1と表示されているところの右隣りのアスペクト比を表示するところの右側の三角をクリックして"4:3"を選びます:
タイルセットのインポート
さて,ここまでできたら早速アセットをインポートします. まず最初にタイルと背景が入っている「Too Cube Forest, the free 2D platformer game tile set」をインポートします.Gameタブの右隣のAsset Storeのタブをクリックします. しばらく待つと検索窓を含むAsset Storeのトップが表示されるので,検索窓に「Too Cube Forest」と入れます:
「Too Cube Forest」で始まるアセットは一つしかないのでそれを選択してダウンロードします:
次にダウンロードボタンが"Import"に変わりますのでそれをクリックします. しばらく待つとToo Cube Forestのインポーターが立ち上がります:
今回は"All"をクリックしてImportボタンを押してインポートします. しばらくすると"Too Cube Forest"アセットがインポートされます.
タイルと背景用アセットのフォルダ構造
このアセットのフォルダ構造は次の通りです:
今回使用するのはbackgroundsフォルダとimagesフォルダの中身だけです. それぞれ背景と地面などのタイルが保存されています.
背景は一番奥に表示し,ColliderやRigidbodyなどは全てオフにし,当たり判定や重力の影響などを一切受けないGameObjectとして配置します.一番簡単ですね^^
タイルはプレイヤーキャラや敵キャラが乗れる物体にはBox Collider 2DなどのCollider,特に重力の影響を受けるものにはRigidbody 2Dを設定しますが,茂みなど通り抜けられるところでは全部オフにしてしかも前面に表示するなどが必要でしょうから,千差万別の設定になります.ただし全部背景もタイルも同じようなものが大量に必要になるので全部Prefab化しておくことにしましょう.
平らな大地の登録
今回はまずプレイヤーのウィッチが乗れる平らな大地を用意しましょう. "TooCubeForest”のサブフォルダの”images"フォルダの中から"Forest_terrain_dirt_grass(spring)_128px_0"を選択します.このとき矢印をクリックして展開してから選択します:
選択したらそれをSceneビューのMain Cameraの表示領域の長方形の枠の内側にドロップします.SceneビューにSpriteが登録されました:
地面のタイルのリネーム
名前が日本人の僕には長すぎて分かりづらいのでこのGameObjectの名前をHierarchyビューからGrassGroundにリネームしておきます. このGrassGroundに各種設定を施してからPrefab化します.
地面のタイルにColliderをアタッチする
今回はInspectorビューのAdd Componentから[Pysics 2D]→[Box Collider 2D]を選択してアタッチします. 形状が四角いタイルだからBox Collider 2Dにしましたが,より一般的な形の場合はPolygon Collider 2Dなどを使用しますが,多用すると処理が重くなるので注意しましょう.
背景とタイルのPrefabの保存先フォルダの作成
さて今回背景とタイルは全てPrefab化してそれを使いたいので,Assetsフォルダ直下にMyEnvironmentsフォルダを作成しその下にMyAreasPrefabsフォルダとMyTilesPrefabsフォルダを作成し,そこに保存することにします.Assetsフォルダ内を右クリックして[Create]→[Folder]でAssetsフォルダの下にフォルダが作れるのでしたね.
GrassGroundのPrefab化
ここで先ほど作成したGrassGroundをPrefab化して登録します. その前に念のためTransformをリセットしておきましょう. GrassGroundのInspectorビューのTransformコンポーネントの右側の縦に三つドットが並んでいるところをクリックして"Reset"を選びます:
この状態でHierarchyビューのGrassGroundをProjectビューのMyTilesPrefabsにドロップします.これでGrassGroundはPrefab化されました!
次回からこのPrafabを使ってゲームの一場面を作ってゆきたいと思います.