unityのことをある程度分かっている人で、なおかつ2Dのプロジェクトを作る人には結構意味があるかなって話。
同じことを書いてる記事を見たことがないので、メモ代わりに残しておく。
unityではいろんなものの単位のベースに1unitというものがある。これは3Dワールドではだいたい1メートルぐらいに思っておけばいい。
ここでテクスチャをunityにインポートすると100PPUという単位でインポートされる。これは1unit=100pixelsでインポートされるって意味だ。
これが3Dプロジェクトである間は「さよですか」と言っておけばいいのだけど、問題は2Dになったときだ。
2Dでは当たり前だけどテクスチャの1ピクセル=画面の1ピクセルであって欲しい。
では、カメラとスプライトの間にどのような関係を置けばそれがうまくいくのか?
チュートリアルサイトではだいたい素知らぬ顔をしていて、スプライトを置いてしまっていて、適当な扱いをしているので、ここらへんがさっぱりわからず、気持ち悪くてしょうがなくて、再学習したときに覚えたことだったのだけど、メモとして残しておきたい。
まず大前提。
- カメラサイズの"1"は"1 unit"の1…というか、unity世界では長さの単位はあまねく"unit"。
- 1 unit = 100ppu。すなわち0.01 = 1pixelになる。
- カメラは中心からの高さと幅で設定する。だから実際の画面の広さは2倍になる。これは誰でもわかってると思う。
上記を前提として、2Dプロジェクトをセットアップするとき、例えば下のようにする。
- 例えば懐かしのiphone 4S設定の540x960に置いたとする(ポートレート)。
- 縦を2で割ると480。横を2で割ると270
- さらに100で割って、カメラサイズを縦4.8x横2.7にする。
- すると9:16のポートレートモードで1pixel動かすのに0.01の超わかりやすい画面が出来る。
解像度を1920x1080にするなら、縦は5.4、横は9.6。これでやっぱり0.01=1ドットの超わかりやすい画面になる。
またチュートリアルサイトなどでppuをいじっているサイトもあったりするけれど、基本的にはppuはいじらない方が絶対にいい。
なぜならunityは物理エンジンとかいろんなものがunitに結構結びついているので100ppuをいじると、物理エンジンを使った瞬間、スケーリングの問題が出てくるので、面倒の山になる。
同じ理由で画面サイズを1920x1080とかに設定する人もいるけれど、これは192ox1080メートルみたいな画面を作っているに等しいので、物理とか使うとき面倒だらけになるので、お勧めできない。
キャンバスを同じサイズにしたいなら、canvasのカメラの設定を設定しましょう。
3Dではunitと画面の広さは結びつかないけど、2Dでは結びつくのに結びつき方を説明しているモノが全然なくて、ホント気持ち悪かったが、今はもうunityの2Dは気持ち悪くない。
なお、3Dでもcanvasが出てくると、上の考え方は使えるので覚えておいても損はないと思う。