【第三回】UnityでAndroidゲームアプリを作る ~キャラクターをとりあえず立たせる~

# 本連載について
- 本連載では、私が趣味で個人開発しているAndroidゲームの作成過程を記録していこうと思っています。
- 作るゲームは2Dの横スクロールアクションにしていこうと思っています。
- [前回の記事はこちら](https://qiita.com/CPyRbJvCHlCs/items/29fc47a768d47e73b85f)

# 本記事について
本記事では以下の内容を記載します。使用するUnityは2020.3.27f1です。
- [前回の記事](https://qiita.com/CPyRbJvCHlCs/items/29fc47a768d47e73b85f)で説明した方法で作ったステージに、操作するメインキャラクターの画像を配置する。
- メインキャラクターがちゃんと立てるようにする。

# ステージの見た目
- [前回の記事](https://qiita.com/CPyRbJvCHlCs/items/29fc47a768d47e73b85f)で説明した方法で適当にお絵描きし、以下のようなステージにしました。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/33458/a56b4111-bfca-cd04-e04e-a725276e3074.png)
    - オブジェクトとかの配置はスカスカです。後で調整する予定。
    - 前回の記事だけではキャラクターが動き回れるスペースが足りないので、背景画像を継ぎ足して広くしました。スクショの左上が全体像、左下はメインカメラからの見た目になっています。

# メインキャラクター画像の配置
とにもかくにも操作するキャラクターがいないと始まりません。ということで以下の手順でキャラクター画像を配置します。
1. [前回の記事](https://qiita.com/CPyRbJvCHlCs/items/29fc47a768d47e73b85f)の流れのままTile Paletteを開きっぱなしにしていると、Gridが表示されたままになって邪魔なので、TilePaletteを閉じます。
1. 以下の画像のように、Pixel Adventure 1の中のMain Charactersの中から好きなキャラクタ―の画像を選んで、Sceneにドラック&ドロップします。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/33458/6b0957e1-c89d-794f-d5a2-0b82d4f8eb38.png)
1. すると、以下のようにキャラクターの画像が追加されると思いますが、一体どこにいるんだ？？？ってぐらい小さいキャラが配置されます。これはこの画像のPixels Per Unitを正しく設定していないために起こる現象で、以下の手順で修正します。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/33458/881d1dbb-2264-e7ac-9037-12c188b2c4c2.png)
    1. 先程配置したキャラクター画像の大元のAssertをクリックします。(スクショ中真ん中ぐらい)⇒Inspectorの中のPixels Per Unitを16にセットしてApplyをクリック。⇒すると以下スクショの左側の赤丸のように、キャラクターが大きく描画されます。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/33458/2a70d0c6-f222-ac9a-c5d3-f04124ccbedc.png)
    1. あとはそのObject名をPlayerとか適当なものに変えて、以下のスクショのようにMain Cameraの範囲とかに配置すると、ゲームっぽい見た目になります。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/33458/84900522-7737-01a9-d7bd-e202f8284d5d.png)
ここまでやってきましたが、これだけだとゲームを開始しても何も起きません。キャラクターを動かすためのコードは後で追加するとして、まずは重力等の物理演算を追加していきます。

# 重力と衝突の設定
さて、いよいよUnityの本領発揮とも言える物理演算関連の設定を施して、キャラクターをとりあえず地面に立たせられるようにしていきたいと思います。
1. まず、Playerを選択して以下のスクショのように「Add component」をクリック。Rigidbody 2D（今回は2Dなので必ず2Dを選択してください。）を選択する。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/33458/7eada92c-10c6-64e4-863b-223044043925.png)
    1. これでPlayerオブジェクトに重さが付き、重力が働くようになりました。しかし、この状態のままだと地面と衝突が出来ないので、UnityのPlayボタンを押すと以下のように落ちて行ってしまいます。なので次に衝突を定義してあげる必要があります。![第三回Unityでandroidのgifアニメ.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/33458/7019c632-2e50-19ec-38f3-e4f4f5699579.gif)
1. まず、地面に衝突を定義します。今回地面はTilemapで作成しているので、以下のように地面として使用しているTerrainをクリックし、Add ComponentからTilemap Collider 2Dを選択します。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/33458/a082f21b-0099-b2bf-2803-4a325414bc5c.png)
1. すると、ちょっと見づらいですが以下のように、Sceneに配置したTileに、先程まではなかった蛍光緑の強調表示がされると思います。これが表示されていれば衝突として定義されています。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/33458/12bf9b26-98f6-cfcc-f0dc-44b8547484e0.png)
1. しかし、上記だとすべてのタイルごとに衝突が定義されていて、地面同士も接触判定がされるような状態になっています。このままでも動作はしますが、計算リソースを無駄に食うのと、バグりやすくなると思うので、以下の手順で衝突定義を統合します。
    1. Terrainタイルマップを選択し、Add ComponentからComposite Collider 2Dを選択し、追加します。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/33458/c5084d5f-1907-51d5-7859-16af611defae.png)
    1. そのあと、以下のようにTilemap Collider 2Dの方にある、「Used By Composite」のチェックボックスをONにすると、先程までタイルごとに定義されていた衝突が、いい感じにまとめられて以下のようになっていることが確認できると思います。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/33458/b977e9a8-b8aa-7415-bf2a-f050eb4e4734.png)
    1. 最後に、Tilemap Collider 2Dを定義すると必ずRigidbody 2Dが付いてくるのですが、デフォルトのままだとこのRigidbody 2Dにも重力が働き、キャラクターと一緒に地面も下に落ちて行ってしまいます。これを防ぐために、以下のようにRigidbody 2DのBody TypeをStaticにして下さい。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/33458/0c77c66b-5ca4-811e-1092-3268898645ca.png)

1. これで地面に衝突が定義できましたが、Player側に衝突が定義されていないので、このままだとUnityのPlayボタンを押しても、先程のGif animationと同様Playerは下まで落ちて行ってしまいます。以下の手順でPlayerにも衝突を定義します。
    1. 以下のようにBox Collider 2DをPlayerに追加して下さい。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/33458/384964a8-dd4c-1b4e-d54a-122b97dcb062.png)
    1. 以下スクショの右下赤丸のBox Collider 2Dの編集ボタンを押すと、スクショ左側のように領域が編集できるようになるので、マウスで大きさをPlayerギリギリぐらいに調整してください。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/33458/88d3ca8f-a952-a085-31e9-a2a678b6a720.png)
1. この状態でUnityのPlayボタンを押すと、めでたく以下のGifのようにPlayerが地面に立つことが出来ます！！![Android第3回のgifその2.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/33458/fcbd2e18-cc2a-e2b1-16d1-494917041697.gif)

これでとりあえずキャラクターを地面に立たせることが出来ました。お疲れさまでした。


# 次回予告、その他
- 次回はこのキャラクターをとりあえずPC上で動かせるようにしていく方法について書こうと思います。
- [最初に作ったこのアプリ](https://play.google.com/store/apps/details?id=com.tokagetechnologies.ballbounce)よりだいぶ成長した感がありますね。。。