おもちゃバコ

句読点がキショい

Unity: 2D Pixel Perfect Cameraを使ってレトロゲームを再現したい

こんちは

Unityで「レトロゲーム風を再現するためにはどうすんの?」を調査しました.


参考文献

まずはこれを読みましょう.
blog.unity.com


スプライトの設定

16×16のスプライトをUnityにそのまま持ってきて,拡大するとボケますよね.
f:id:lambda410:20220122163300p:plain

そこで,Inspectorの
・Filter Mode -> Point(no filter)
Filter Modeは標準だと「Bilinear(バイリニア補完)」がかかっているので,補完しないようにします.

・Compression -> None
また,Compressionは標準だといい感じに圧縮しようとするので,圧縮設定を切ります.

にすると,スプライトの味をそのまま生かせます. f:id:lambda410:20220122163655p:plain


2D Pixel Perfect Camera

次は画面の解像度をいじります.

Package Managerから2D Pixel Perfectをインストールします.
f:id:lambda410:20220122164000p:plain

これはピクセルパーフェクト対応のカメラを簡単に作るためのものです.

ピクセルパーフェクトは人によって説明の仕方が変わりますが,ファミコン時代の画面を再現するためのもの位の認識で大丈夫です(適当).
気になる人は復刻盤のファミコンゲームが収録されているゲームは大体設定できるようになっているので試してみてください.
(↓ ゲーム開発的には,このサイトで説明されている内容が重要です.)

https://aibars.com/mini-famicom-pixel-perfect

Main CameraにPixel Perfect Cameraをアタッチします.

大まかな設定項目についてです.
f:id:lambda410:20220122173130p:plain

1 Assets Pixel Per Unit
Unity世界の1ユニットのサイズです.
今回は16×16を1マス単位にしたいので「16」を設定しました.

2 Reference Resolution
アセットを表示する解像度のことです.
ファミコン風にしたいので「256×240」にしました.
(ちなみに「256x224」説もあるみたいです.)

注意点として,あくまで「アセットを表示する解像度」の設定なので画面の解像度を設定しているわけではありません.
いい感じに画面に合わせてアスペクト比を変更してくれるわけではないです.

解像度「256×240」に1PPU「16」を横に「16」個突っ込めますって設定です.

3 Upscale Render Texture
基準解像度に近い解像度で描画してくれます.
設定すると画面全体を使ってくれるらしいです(?)

4 Crop Frame
設定すると余った余白を黒で塗りつぶしてくれます.
ファミコン移植作品でそのゲームのラベルが設定されているやつみたいなのです.
f:id:lambda410:20220122173041p:plain

5 Stretch Fill
Crop FrameをXY両方設定すると出てきます.
有効にするとアスペクト比を維持したまま拡大してくれます.
が若干ボケます.
f:id:lambda410:20220122173100p:plain

カメラの緑線について

Sceneのカメラについて補足です.

緑の太線が「画面サイズ」.
緑の破線が「Reference Resolution」です.
f:id:lambda410:20220122173226p:plain

スマホの画面に合わせて拡大したいみたいな要望はこの辺を設定してあげると良さそうですね.
多分スクリプトでできるのかな?

面倒だと思う人は「Stretch Fill」を使うのが良いと思います.
簡単だしね.


まとめ

レトロゲームを再現するのも簡単ではないね.