如何根据不同的屏幕分辨率统一调整子画面的大小?

时间:2019-10-11 12:12:35

标签: c# unity3d sprite

我正在一个2D项目中,我在项目中使用不同像素的不同精灵,每个精灵的高度和宽度都不同,而不是正方形。 例如查看项目中的精灵设置,类似地有很多这样的精灵,浅绿色的背景用作足球场,在ipad视图中看起来还可以(2732 x 2048纵向模式)。 SheetProperty

但是如果我将其更改为iphone6视图(750 x 1334 Potrait Mode)。精灵没有调整大小。仍然看起来很大。看不到深绿色的部分。我添加了其他精灵也没有改变它们的大小。图片如下。enter image description here

我得到了获取屏幕尺寸的代码,如下所示。

dismissViewList(ObjecClass) {
    if (_personList.contains(ObjecClass)) {
    //_personList is list of ObjecClass shown in ListView
      setState(() {
        _personList.remove(ObjecClass);
      });
    }
}

如果我有屏幕宽度,如何使用它来将子画面调整为各种屏幕分辨率。对于此分辨率(2732 x 2048纵向模式ipad pro),我不需要更改子画面的大小。但是对于所有其他屏幕分辨率相应地更改。

1 个答案:

答案 0 :(得分:0)

您可以在正交摄影机上执行以下操作:

public class MatchCameraToFit : MonoBehaviour
{
    public int Height;
    public int Width;

    public void Awake()
    {
        MatchCamera();
    }

    private void OnValidate()
    {
        MatchCamera();
    }

    private void MatchCamera()
    {
        var cam = GetComponent<Camera>();
        if (cam == null) return;

        var position = cam.ViewportToWorldPoint(Vector3.zero);
        var up = cam.ViewportToWorldPoint(Vector3.up) - position;
        var right = cam.ViewportToWorldPoint(Vector3.right) - position;

        var matchSize = Mathf.Max(Height, Width * up.magnitude / right.magnitude);

        cam.orthographicSize = matchSize;
    }
}

此脚本将调整相机的大小,以使相机(Width, Height)始终可以水平或垂直地完美匹配相机(取决于哪个方向不合适)。