【Unity】ピクセルパーフェクトなシーンを作る

ネコニウム研究所

PCを利用したモノづくりに関連する情報を掲載するブログ

【Unity】ピクセルパーフェクトなシーンを作る

2022-2-10 |

Unityでピクセルパーフェクトなシーンを作りたい!

Unityの勉強中です。

概要

今回は、Unityの2Dのプロジェクト上でピクセルパーフェクトなシーンを作る手順を掲載する。現状の個人的なベストプラクティスの設定となってます。

ファミコン・スーパーファミコン時代以前のレトロゲームの再現したい場合やピクセルアートをピクセルアートとしてキレイに表示したい場合に有用やもです。

仕様書

この記事の(Pixel Perfect Cameraを使う)方法では、ピクセルパーフェクトなシーンではURPを使うことができません。

プロジェクトの解像度は「Free Aspect」として、基準とする解像度の倍数以上となったら、拡大表示する。基準とする解像度の倍数で引いた余りの部分は黒帯を表示する。輪郭がぼやける拡大はおこなわない。

環境

  • Unity 2020.3.25.f1

手順書

  1. 「Hierarchy」の中で右クリックし表示されるポップアップメニューを「2D Object」->「Pixel Perfect Camera」の順にクリックする。

  2. 「Hierarchy」の中に「Pixel Perfect Camera」が作成される。

  3. 先ほど作成した「Hierarchy」の中の「Pixel Perfect Camera」を選択して「Inpector」の各項目を下記の表のように設定する。

コンポーネント名 項目名
Transform Position Z:-10
Camera Projection Orthographic
Camera Size 基準とする解像度の横幅÷2
Pixel Perfect Camera Assets Pixels Per Unity 1
Pixel Perfect Camera Reference Resoulution X:基準とする解像度の横幅, Y:基準とする解像度の縦幅
Pixel Perfect Camera Upscale Render Texture Checked
Pixel Perfect Camera Crop Frame X:Checked, Y:Checked
Pixel Perfect Camera Stretch Fill No Checked

解説

ちょっとだけ解説。

TransformPositionZは、表示するスプライトなどのZの位置より小さい数を設定する。

CameraProjectionSizeは、SceneGameの表示され方を一致するための設定です。一致してた方が編集しやすいので設定してますが、設定しなくてもGameには設定した基準解像度でひょうじされる。(Gameへの表示のされ方には影響がない)

Pixel Perfect CameraUpscale Render Textureはチェックを入れないと拡大時にぼやけちゃう。

Pixel Perfect CameraReference Resoulutionは基準とする解像度を入力する。例としてファミコンの解像度と同じにする場合は、X256Y224とする。

Pixel Perfect CameraCrop Frameはチェックを入れないと特定の解像度のときにGameの表示が歪んでしまうことがある。単純に黒帯を表示するだけではないらしい。

Pixel Perfect CameraStretch Fillはチェックを入れるとウィンドウのサイズに合わせて拡大されるようになるが、基準となる解像度の倍数以外の場合は、ぼやけて拡大されてしまう。

まとめ(感想文)

Unityでピクセルパーフェクトなシーンを作ろうとすると意外と制約が多くなりがち。(私の設定の仕方が悪いのかもです。もっといい方法があったら教えて下さい)

あえてピクセルパーフェクトにしない2D表現にするか、ピクセルパーフェクトにこだわるのであれば、Unity以外のエンジンを使うことも視野に入れてみても良いかもね!
クロスプラットフォームな開発ができるエンジンでパッと思いつくもので。HaxeFlixelはピクセルパーフェクトな表現が得意な感じです。Stretch Fillしながらぼやけない拡大もできた記憶。Godotもピクセルパーフェクトが得意だったような気が。(こっちはうろ覚え)

引用・参考文献

下記の公式のブログがとても参考になります。