Unityで3Dモデルをドット絵風に描画したい<2>
tkg-lag.hatenablog.com前回の続きから
とりあえずここまでの結果がこれ
いい風に見えるよね
見えるでしょ
でも動きで見ると変なんですよね
わかりますかこのガビガビ感というかゆらゆら感
とても一枚絵な感じがしませんよね、これじゃだめなのだ。
・一枚絵っぽくするためのチラ付き防止
なぜガビガビになっているかというと描画はドット単位なのにオブジェクトの座標は小数点までなめらかに動いちゃうから、ドットとドットの間でゆらゆらしちゃうんですね。
つまるところオブジェクトの座標をドットごとにスナップしてあげればいいんです。
ドットごとにスナップするためには画面内のドット数と実際の画面の画素数の割合を出してあげて…うーん…と一週間くらい苦戦したんですけどもっと簡潔にやる方法がありました。
PixelPerfectCameraスプリクト内のRoundToPixelメソッドです。
これは引数にワールド座標を入れてあげると一番近いドットの座標を返してくれる、まさにこの作業にうってつけの関数。ありがたく使わせてもらいましょう。
ということでこのチラ付き処理に必要なのはたったの一行。
transform.position = pixel_camera.RoundToPixel(transform.position);
pixel_cameraはカメラのPixelPerfectCameraをgetcomponentして代入しておきましょう、これで終わりです。
これを物理処理やらなんやらが終わった後に処理されるLateUpdate内で実行してあげればオブジェクトの座標がドットにスナップされて綺麗に表示されます。
結果がこれです。
どうでしょう、一枚絵のスプライトっぽく見えますかね。
あとはこのコードをそれぞれのオブジェクトにアタッチしてあげればOKです。
オブジェクトをカメラに追従したいときとかはカメラ側にもアタッチしてあげると綺麗に表示されるのでチラ付き問題はこれで解決です。
スクリプトのオンオフでチラ付きが改善されるのわかりますかね?
とりあえず今回はここまで。今はコマ落ち処理をどうやろうか悩み中です。