Как настроить размер спрайтов в соответствии с различными разрешениями экрана в единстве? - PullRequest
1 голос
/ 11 октября 2019

Я работаю над 2D-проектом. Я использую разные спрайты разных пикселей внутри моего проекта. Все спрайты имеют разную высоту и ширину, а не квадратные стороны. Например, посмотрите на настройки спрайтов в проекте. Точно так же есть много спрайтов, подобных этому. Этот светло-зеленый фон используется в качестве футбольного поля. Он выглядит нормально в режиме ipad (2732 x 2048 Портретный режим). Sprite settings

Но если я переключу его в режим просмотра iphone6 ​​(режим «750 x 1334»). Спрайты не изменятся в размерах. Все еще выглядят большими. Темно-зеленую часть не видно.Я добавил другие спрайты, которые также не меняют свой размер. Изображение приведено ниже. Sprite size not changed

Я получил код получения размера экрана, который приведен ниже.

public static float GetScreenToWorldWidth
{
    get
    {
        Vector2 topRightCorner = new Vector2(1, 1);
        Vector2 edgeVector = Camera.main.ViewportToWorldPoint(topRightCorner);
        var width = edgeVector.x * 2;
        return width;

    }
}

Если у меня есть ширина экрана, как использовать ее для настройки спрайтов в зависимости от разрешения экрана. Для этого разрешения (2732 x 2048 Портретный режим ipad pro) мне не нужно изменять размер спрайтов. Но для всех остальных разрешений экрана меняются соответственно.

1 Ответ

0 голосов
/ 11 октября 2019

Вы можете сделать что-то подобное на орфографической камере:

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) всегда будет идеально соответствовать камере по горизонтали или вертикали. (в зависимости от того, какое направление не подходит).

...