相机正投影尺寸一定宽度

S.A*_*hid 2 2d orthographic unity-game-engine

如何设置一定的尺寸单位来定义相机在人像模式下的正交尺寸的宽度?

我想将任何移动设备的水平尺寸设置为从屏幕左中到右中正好5 米? 我怎样才能做到这一点?我从视频剪辑中找到了这段代码,但我不明白它,我认为它对我没有帮助,因为我没有游戏场,而且我的游戏世界将在游戏过程中自动生成(它是无限 2D 卷轴游戏)。

[SerializeField] private SpriteRenderer gameField;
void Start()
{
    float screenRatio = (float)Screen.width / (float)Screen.height;
    float targetRatio = gameField.bounds.size.x / gameField.bounds.size.y;
   
    if (screenRatio > targetRatio)
    {
        Camera.main.orthographicSize = gameField.bounds.size.y / 2;
    }
    else
    {
        float differenceInSize = targetRatio / screenRatio;
        Camera.main.orthographicSize = gameField.bounds.size.y / 2 * differenceInSize;
    }
}
Run Code Online (Sandbox Code Playgroud)

我不知道为什么unity不自动处理这些问题?

小智 5

我找到了你所说的视频,其实很简单。作为参考,这是这个视频。我会尽力向你解释。
这 5 个框代表您想要在屏幕上显示的所有内容。您希望您的相机始终能够自我调整,以便适合其中的所有盒子。

在此输入图像描述

要存档此数据,您必须将盒子的宽度(我们所有盒子的所有尺寸均为 1 米宽)乘以屏幕高度除以屏幕宽度。然后你想将该数字除以二。

boxes.width * screen.height / screen.width * 0.5
Run Code Online (Sandbox Code Playgroud)

在我们的代码中,它看起来像这样:

public float sizeInMeters;

void Start()
{
    float orthoSize = sizeInMeters * Screen.height / Screen.width * 0.5f;

    Camera.main.orthographicSize = orthoSize;
}
Run Code Online (Sandbox Code Playgroud)

如果您想从中间向左和向右各 5 米,则在sizeInMeters变量中输入 10。如果从左到右的屏幕总宽度仅覆盖 5 米,则必须将 5 放入变量中sizeInMetersif仅当您希望用户能够将手机翻转到垂直位置时,代码的内部才存在。

在此输入图像描述

在此输入图像描述