针对不同的移动纵横比的背景缩放。Unity 2D C#

问题描述 投票:0回答:1

我最近开始使用Unity和C#,目前正在制作一款垂直2D手机游戏。我正在努力让我的背景在不同的纵横比下进行缩放,我的背景精灵是19,59,可玩区域是169。背景精灵是19.59,可玩区域是169。目前背景的缩放是为了适应屏幕的顶部和底部,但我的想法是让背景固定在侧面和底部,如果需要的话,视图可以向上延伸(因此,高精灵)。有什么想法吗?Thanks in advance.Here is the code im trying, its attached to the Camera.

public SpriteRenderer background;

private void Start()
{
     float screenRatio = (float)Screen.width / (float)Screen.height;
    float targetRatio = background.bounds.size.x / background.bounds.size.y;

    if(screenRatio >= targetRatio)
    {
        Camera.main.orthographicSize = background.bounds.size.y / 2;
    }
    else
    {
        float differenceInSize = targetRatio / screenRatio;
        Camera.main.orthographicSize = background.bounds.size.y / 2 * differenceInSize;
    }
}
c# unity3d mobile
1个回答
0
投票

我的解决方案是使用一个世界空间的UI画布。

将画布设置为世界空间,将其放置在场景中所需的深度(尺寸并不重要,因为我们可以在脚本中设置),然后添加一个图像对象作为子对象,或者向画布对象添加一个图像组件。像这样添加你的精灵作为图像的来源。

void Awake()
{

    RectTransform rt = GetComponent<RectTransform>();
    rt.position = new Vector3(0, 0, rt.position.z);
    float camHeight = Camera.main.orthographicSize * 2;
    rt.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, camHeight);
    float targetRectWidth = camHeight * Camera.main.aspect;
    rt.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, targetRectWidth);

}

步骤是 - 设置矩形变换的位置在屏幕中心,你在编辑器中设置的深度。 - 获取2x摄像头高度(因为那是屏幕顶部到底部的距离)--设置锚点,使UI对象与屏幕顶部和底部对齐--通过将高度乘以摄像头的纵横比来获取目标宽度--根据目标宽度设置正确的宽度。

如果需要的话,可以在更新中代替Awake或Start来动态调整背景的大小。

这里是在1080p 16:9和5:4.红色的立方体是为了显示它是在场景中的物体后面的背景。

At 1020p 16:9

At 5:4 aspect ratio

如果这对你有帮助,请投票并接受答案。无意求人,但新手往往不会想到去做。

© www.soinside.com 2019 - 2024. All rights reserved.