Unityで2Dジャンプゲーム作るならテキストボックスに入れるｘ＝１といった数字が何ピクセルを表しているのか把握しておきたい

Qiitaの画像アップロード容量上限にきたようなので、全ての記事を再構成中。

![201701132149a1.gif](https://qiita-image-store.s3.amazonaws.com/0/159417/0daaf7d2-89b8-0fcd-d463-b3430cebcdaf.gif)

ジャンプするとき、**これぐらい** 跳びたい、と思うんだが、**これぐらい**って数字で言うと　どれぐらい　なのか。

# Unityの初期設定では 100ピクセル＝1メートル

じゃあ　マリオの身長は 16センチメートルなのか、と思うんだが
2Dゲームを作るんなら　メートル法　に深い意味はない。

**1 は 100ピクセル** と覚えておけば十分だ。

例えば 0.64 という数字をテキストボックスに打ち込んだら、それは 64 ピクセルということだ。

PixelPerUnit という設定が最初 100 なんだが、これを変えることもできる。
特に意図もなければ　変えない方が　分かりやすいんじゃないだろうか。

じゃあ、

**１ピクセル　＝　１センチメートル**

というのが分かったところで、カメラで空間を覗いてみよう。

##１ｃｍ（センチメートル）グリッド
![201701131502a21.png](https://qiita-image-store.s3.amazonaws.com/0/159417/64d6c653-f382-9f39-0c43-5ccf009f40ef.png)
これ、１ドット。枠線が１ますを囲んでいるだろう。

カメラを動かしていると、ぼやけたり、半ドット　で色が分かれているといったフィルターの効果も存在することが分かる。

どんどん行こう。

##１０ｃｍグリッド
![201701131502a23.png](https://qiita-image-store.s3.amazonaws.com/0/159417/d170f391-6cd4-0523-ae0b-f90f05ed458c.png)
この枠線は　１０ピクセル四方を囲んでいる。
これは　ドットが **ぼやけている** とも言えるし、初期設定では　バイリニア・フィルター　というのが掛かっていて、 **滑らかにしてくれている** とも言える。

Unityでは画質を設定できて、いろいろオン／オフできるが　そんなん初見で知ってることは無理だろう。

どんどん行こう。

##１ｍ（メートル）グリッド
![201701131502a25.png](https://qiita-image-store.s3.amazonaws.com/0/159417/707a198f-853c-1be0-2fef-add198d83b3e.png)
枠線が見えなくなったし、きふわらべも画像を引き延ばして拡大している。
どこらへんが１００ピクセルなのかを説明するのは　つらいが、
ピクセルのかたまりも集まってきて　絵っぽく　なってきただろう。

ズームしていると　曼荼羅を見ている気分になってくる。

##１０ｍグリッド
![201701131502a27.png](https://qiita-image-store.s3.amazonaws.com/0/159417/489c092b-054a-c24b-98e8-91f08468a7e6.png)
今見えている枠線１ますが　１０００ピクセル四方だ。

３Ｄゲームから見ると　２Ｄというのは　お肌のテクスチャ　ぐらいの小さな柄だが、
２Ｄゲームというのは　そういう狭い所で　遊んでいるとも言える。

２Ｄゲーム画面の全景から　もう遠く離れてしまった。


##１００ｍグリッド
![201701131502a29.png](https://qiita-image-store.s3.amazonaws.com/0/159417/80089488-385c-30df-e47a-55f0555690a5.png)
枠１ますには　１万ピクセル　が並んでいる、という計算だ。
実際には　ディスプレイの解像度の方が　１万ピクセルもないんで、潰れているだろうが。

右上に「対局開始」みたいな画面が見えてきて、
真ん中には　さっきまで見てきた「２Ｄのゲーム画面」がある。

テキストのフォントのような印刷物の解像度のものと、２Ｄゲームを　おなじ座標空間で　広げているというのが面白い。


##１ｋｍ（キロメートル）グリッド
![201701131502a31.png](https://qiita-image-store.s3.amazonaws.com/0/159417/3aa08c41-86f1-c79a-6ef0-ab74ad25c6c0.png)
「対局開始」画面が見えてきたと思ったら　もう遠くに離れてしまった。

計算上は　横１０万ピクセル　あるわけだが、２Ｄゲームからすれば　どうでもいい感じ。

##１０ｋｍグリッド
![201701131502a33.png](https://qiita-image-store.s3.amazonaws.com/0/159417/6931442d-36e6-3d56-879d-2708b50b83b2.png)
ゴルゴ１３を相手にするときは　これぐらい距離を開けておきたい。

##１０ｋｍグリッドで最長のようだ。
![201701131502a35.png](https://qiita-image-store.s3.amazonaws.com/0/159417/a86cc625-7637-38eb-320a-80b66e1a45e5.png)
もう退がれない。

# そんなん知らんわけで

![201701131502a38.png](https://qiita-image-store.s3.amazonaws.com/0/159417/318d8c8d-895d-bb2e-db13-9674831ef58a.png)
これぐらい　ジャンプしたい。

さて、これは　何ドットなのか、あるいは　何メートルなのか。　よく分からず１時間ばかり　数字を適当に入れていた。

![201701131502a40.png](https://qiita-image-store.s3.amazonaws.com/0/159417/d8b9f8ae-be39-6c83-ac2b-88561c349033.png)

どうも、このグリッドが数字の　1　ぐらいのようだ。
Unityでは　このグリッドを　１メートル　とか言ってるらしい。
じゃあ　それに合わせるか。

すると、きふわらべの頭は　目測で　１メートルあるので（！）、わたしは　頭３個分、３メートルぐらい　ジャンプしたかったことになる。

ここまで数字が分かれば　ようやくプログラムを始められる。
![201701131502a42.png](https://qiita-image-store.s3.amazonaws.com/0/159417/78f3bb70-2e10-e50f-2eb7-04525d003a96.png)
数字は　だいたい　だ。

##３メートル　ジャンプするには、どう　プログラムすればよいか？
次の、分かりやすい説明図を見ていただこう。
![201701131502a43.png](https://qiita-image-store.s3.amazonaws.com/0/159417/4ea021b6-754a-91e2-02b3-7edd661db17e.png)

この図で　高さ１５　のところまで飛びたければ、５＋４＋３＋２＋１　と高さを上げていけば　ゆっくりと頂点に届くことがわかる。
じゃあ Unityの空間上で ３メートルの高さまで飛びたければ　０．７　ぐらいから始めれば

- ０．７　（計０．７）
- ０．７＋０．６　（計１．３）
- ０．７＋０．６＋０．５　（計１．８）
- ０．７＋０．６＋０．５＋０．４　（計２．２）
- ０．７＋０．６＋０．５＋０．４＋０．３　（計２．５）
- ０．７＋０．６＋０．５＋０．４＋０．３＋０．２　（計２．７）
- ０．７＋０．６＋０．５＋０．４＋０．３＋０．２＋０．１　（計２．８）
- ０．７＋０．６＋０．５＋０．４＋０．３＋０．２＋０．１＋０．０　（計２．８）

……となって　山の頂点で　３ぐらい溜まるか、と思うんだが　数字をいじっていると　７　ぐらいから始めるといいようだ。

![201701132149a1.gif](https://qiita-image-store.s3.amazonaws.com/0/159417/0daaf7d2-89b8-0fcd-d463-b3430cebcdaf.gif)
だいたい　だ。

**結局　なにがなんだか分からないが　だいたい動いているから　合っているのだろうと思うことにした。**

そういうわけで、画面の上の方は　高さ２８　ということになった。
７＋６＋５＋４＋３＋２＋１　＝　２８
この数字がなんなのか分からない。強いて言うなら
![201701131502a46.png](https://qiita-image-store.s3.amazonaws.com/0/159417/93a01133-4fd5-d6ff-3381-5d92cac3d3e9.png)
１０ｃｍグリッド２８個分だ。

## 接地も難しい。
![201701132149a3.gif](https://qiita-image-store.s3.amazonaws.com/0/159417/d538a5ce-39ed-01db-1979-2cd25143c6e8.gif)

下に床があって、ぶつかっているから乗っているんだ、
ならば　下とは。
１２８ピクセルなのか、１メートルなのか。そこが問題だ。
![201701131502a48.png](https://qiita-image-store.s3.amazonaws.com/0/159417/2a2310bf-3de4-86ec-d30e-4116982f802c.png)

－１メートルでは　地面に接触していないようで、宙に浮いていると判定されてしまった。
－１．１メートルにしておくと、地面との接触を検知するようだ。

**定規が欲しいとおもった。**


#モーションを付けよう
モーションにも触れておく。
![201701131502a50.png](https://qiita-image-store.s3.amazonaws.com/0/159417/01d93a74-ce9c-c217-be5f-58049f600f7b.png)
画像を用意し、

![201701131502a51.png](https://qiita-image-store.s3.amazonaws.com/0/159417/a5ccdef7-2490-efb6-1451-98f73bb97ec3.png)
５つの区間に分ける。

区間を映るタイミングは、

［１］→［２］　アニメーション・クリップの終わり
［２］→［３］　ベロシティが　０．１以下　になったとき
［３］→［４］　アニメーション・クリップの終わり
［４］→［５］　ベロシティが　－０．１以上　になったとき（つまり０にリセットされたとき）

とした。

![201701131502a53.png](https://qiita-image-store.s3.amazonaws.com/0/159417/50e88045-6f14-2ced-4a91-0a2717d0562c.png)

また、区間２　を抜けてから上昇を開始するために、アニメーター画面から追加できるビヘイビア・スクリプトの OnStateExit( )、OnStateEnter( ) メソッドを使用した。



###参考
ジャンプの実装方法については、ひよこのたまご　を参考にした。

ひよこのたまご　「【Unity1】クリックでジャンプ！AddForce, GetButtonDown【ユニティちゃん縦スクロール3】」
http://hiyotama.hatenablog.com/entry/2015/04/24/210000

ひよこのたまご　「【Unity1】アニメーション実装！AnimationとAnimator Controller【ユニティちゃん縦スクロール7】」
http://hiyotama.hatenablog.com/entry/2015/04/27/103000


#残っている課題
![201701132149a5.gif](https://qiita-image-store.s3.amazonaws.com/0/159417/d3affb29-29a7-90e6-7dbf-c9996cd5cd7e.gif)
キャラクターに乗ってしまう。
ダメージ判定用の当たり判定と、地面用の当たり判定を　分けたい。

##追記（2017-01-14 01:43）
もうできた。
![201701132149a7.gif](https://qiita-image-store.s3.amazonaws.com/0/159417/d9711b59-d973-2d62-7ba9-fdaaf44eabbd.gif)

方法は次の通り。
![201701131502a60.png](https://qiita-image-store.s3.amazonaws.com/0/159417/85277dfc-949c-7e2f-75ef-6d708b926ab3.png)
[Edit] - [Project Settings] - [Physics 2D] - [Layer Collision Matrix]

Char0、Char1 というレイヤーを作っておき、キャラクター０のレイヤーをChar0、キャラクター１のレイヤーをChar1に設定、Layer Collision Matrix で Char0 と Char1 の交差するチェックボックスのチェックを外す。

参考：
ドット絵とアイデアと　「プレイヤーの当たり判定は、地形用のと敵キャラ用の二つに分けるといいかも?」
http://dotandidea.seesaa.net/article/419353058.html

##成果の判定
２０１７年１月現在、Ｕｎｉｔｙでの２Ｄ格闘の作り方の記事が見当たらない。
代わりに　Ｕｎｉｔｙで２Ｄアクションを作っている人の記事を探すのが良さそうだ。
似たような問題にぶつかっており、その記事は　２Ｄ格闘制作でも起こる問題の解決に　たいへん役に立つ。　世の中は応用問題。