Unity:カメラのViewportRectを調節して解像度対応する
自分用メモ
想定している画面比率と違う場合に
カメラのViewportRectを調節して、全体の表示比率を保ちます。
(上下に黒帯が入ります)
メインカメラのオブジェクトにアタッチして使います。
ゲーム内でカメラの距離が調節できる機能があるなら
要らないかも。
//カメラの画面比率を調節する public class CameraAdjuster3D : MonoBehaviour { //デフォルトの画面比率 [Range(5, 16)] public int BaseAspectWidth = 16; [Range(5, 16)] public int BaseAspectHeight = 9; void Awake() { Camera camera = gameObject.GetComponent<Camera>(); float baseAspect = (float)BaseAspectHeight / (float)BaseAspectWidth; float nowAspect = (float)Screen.height / (float)Screen.width; float changeAspect; if (baseAspect > nowAspect) { changeAspect = nowAspect / baseAspect; camera.rect = new Rect((1.0f - changeAspect) * 0.5f, 0.0f, changeAspect, 1.0f); } else { changeAspect = baseAspect / nowAspect; camera.rect = new Rect(0.0f, (1.0f - changeAspect) * 0.5f, 1.0f, changeAspect); } } }
別バージョン。
Rectじゃなくてカメラの距離を調整して表示比率を保つよ。
こちらは黒帯は入らない。やったぜ。
ただ、注意点として解像度によっては表示範囲が広がるので
見えちゃいけないものが見えないように要確認なのです。
(ポリゴンマップの端とか、出待ちのキャラとか)
public class CameraAdjuster3D : MonoBehaviour { //デフォルトの画面比率 [Range(5, 16)] public int BaseAspectWidth = 16; [Range(5, 16)] public int BaseAspectHeight = 9; void Awake() { Camera camera = gameObject.GetComponent<Camera>(); float fov = camera.fieldOfView; float baseAspect = (float)BaseAspectHeight / (float)BaseAspectWidth; float nowAspect = (float)Screen.height / (float)Screen.width; float changeAspect; if (baseAspect > nowAspect) { changeAspect = baseAspect / nowAspect; camera.fieldOfView = fov * changeAspect; } else if (nowAspect > baseAspect) { changeAspect = nowAspect / baseAspect; camera.fieldOfView = fov * changeAspect; } } }