C# 如何根据统一的不同屏幕分辨率调整精灵的大小?

C# 如何根据统一的不同屏幕分辨率调整精灵的大小?,c#,unity3d,sprite,C#,Unity3d,Sprite,我正在做一个2d项目。我在项目中使用不同像素的不同精灵。每个精灵都有不同的高度和宽度,而不是正方形的边。 例如,查看项目中的精灵设置。类似地,也有许多类似的精灵。此浅绿色背景用作足球场。它在ipad视图(2732 x 2048纵向模式)中看起来正常。 但如果我将其更改为iphone6视图(750 x 1334 Potrait模式)。精灵不会调整大小。仍然看起来很大。深绿色部分看不见。我添加了其他精灵,它们也不会改变大小。下图所示 public static float GetScreenToW

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

但如果我将其更改为iphone6视图(750 x 1334 Potrait模式)。精灵不会调整大小。仍然看起来很大。深绿色部分看不见。我添加了其他精灵,它们也不会改变大小。下图所示

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

    }
}
我得到了一个获取屏幕大小的代码,如下所示

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),我不需要更改精灵的大小。但对于所有其他屏幕分辨率,都会相应更改。

您可以在正交相机上执行类似操作:

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;
    }
}
public类MatchCameraToFit:MonoBehavior
{
公众内部高度;
公共整数宽度;
公共图书馆
{
匹配摄像机();
}
私有void OnValidate()
{
匹配摄像机();
}
专用照相机()
{
var cam=GetComponent();
if(cam==null)返回;
变量位置=cam.ViewportToWorldPoint(矢量3.0);
var up=cam.ViewportToWorldPoint(矢量3.up)-位置;
var right=cam.ViewportToWorldPoint(矢量3.right)-位置;
var matchSize=Mathf.Max(高度、宽度*up.MARGENT/右.MARGENT);
凸轮。正交尺寸=匹配尺寸;
}
}

此脚本将调整相机的大小,使世界大小的对象(宽度、高度)始终与相机在水平或垂直方向(取决于哪个方向不适合)完全匹配。

您可以在正交相机上执行类似操作:

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;
    }
}
public类MatchCameraToFit:MonoBehavior
{
公众内部高度;
公共整数宽度;
公共图书馆
{
匹配摄像机();
}
私有void OnValidate()
{
匹配摄像机();
}
专用照相机()
{
var cam=GetComponent();
if(cam==null)返回;
变量位置=cam.ViewportToWorldPoint(矢量3.0);
var up=cam.ViewportToWorldPoint(矢量3.up)-位置;
var right=cam.ViewportToWorldPoint(矢量3.right)-位置;
var matchSize=Mathf.Max(高度、宽度*up.MARGENT/右.MARGENT);
凸轮。正交尺寸=匹配尺寸;
}
}

此脚本将调整相机的大小,使世界大小的对象
(宽度、高度)
始终与相机水平或垂直匹配(取决于哪个方向不适合)。

这是配置相机的问题。你在使用正交投影吗?(请注意,对于正交投影,您可以编辑的参数是“大小”,它表示相机可以垂直看到的世界单位数。)是投影-主相机的正交。这是一个配置相机的问题。你在使用正交投影吗?(请注意,对于正交投影,可以编辑的参数是“大小”,它表示相机可以垂直看到的世界单位数。)是投影-主相机的正交。