【问题标题】:Camera orthographic size certain width相机正交尺寸一定宽度
【发布时间】:2021-09-06 09:02:20
【问题描述】:

我们如何设置一定大小的单位来定义纵向模式下相机正交尺寸的宽度?

我想为任何移动设备将水平尺寸设置为 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;
    }
}

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

【问题讨论】:

  • 所以您实际上想要存档所有屏幕尺寸的所有玩家都可以看到游戏的相同部分?
  • @DanielM,是的,正好 5 米。
  • 您是设置等轴测图还是侧平视图?
  • @joreldraw,简单的正交投影。

标签: unity3d 2d orthographic


【解决方案1】:

我找到了您一直在谈论的视频,它实际上非常简单。供参考,它是this 视频。我会尽力向你解释。
这 5 个框代表您想要在屏幕上显示的所有内容。您希望您的相机始终进行自我调整,使其适合其中的所有这些盒子。

要存档此内容,您必须将我们的盒子的宽度(我们所有的盒子在所有维度上都是 1 米宽)乘以屏幕高度除以屏幕宽度。然后,您想将该数字除以 2。

boxes.width * screen.height / screen.width * 0.5

在我们的代码中是这样的:

public float sizeInMeters;

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

    Camera.main.orthographicSize = orthoSize;
}

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

【讨论】:

  • 我会测试你的脚本
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-11
  • 1970-01-01
相关资源
最近更新 更多