【Unity】解像度の違うスマホでの部分スクショ


Unityでのスクリーンショットは非常に簡単に実装できます。

部分的なスクリーンショットをとる場合にはRectangleを変更する必要があります。

スマホは解像度の違いがありケースバイケースで条件を変える必要があります。

 

Canvas要素の保存

まず Canvas の UI Scale Mode を確認します。

ConstantScale Size であれば単純な計算で出来きるけど予想以上に小さい解像度では

ReadPixels outside of RenderTexture bounds

のエラーが出る。

Scale With Screen Size なら基本サイズを1080×1920として、横幅固定にすることが多いと思うので以下で img 上の部分を保存できる。

ちなみに Constant Physical Size は通常使わないと思います。

 

3Dオブジェクトの存在範囲に合わせて保存

CanvasでなくQuadなんかの描画を保存したいケース。

projection が Orthographic であれば以下の計算で保存出来ます。

小数点以下の計算が続くのでスクリーンショット取得時にキャストしてます。

カメラに回転をかけていると微妙にずれます。

これも対象がスクリーン外に出るとエラーです。

 

所感

解像度は基本 1080×1920 と 1200×1920 を抑えていればいいと思う。

色んな解像度で問題を起こさないようにするなら今回のように計算する必要がある。

Canvas だと Scale With Screen Size を使うのが汎用性が高い。

3Dオブジェクトなら、スクリーンを目いっぱい使わなければ問題は起きにくい。

また3D で Perspective の場合はかなり面倒な計算が必要になる上、きれいに切り取れないと思います。

 


コメントを残す

メールアドレスが公開されることはありません。