c# - 在多种移动分辨率下保持相同的相机视图
问题描述
我正在创建一个 3D 手机游戏,其中我的基本参考屏幕尺寸是 Galaxy S9,纵横比为 18:37(纵向)。玩家控制一个盒子,您可以在其中沿 X 轴移动 +/- 5 个单位,并且您必须避免或抓住的物体会掉落。
这部分很容易,困难的部分是当我改变纵横比或分辨率时,游戏比例也会改变,现在 X 轴上 +/- 5 个单位意味着我的盒子可以被切断,或者完全脱离屏幕。
我的目标是限制相机视图,使其始终显示相同的坐标,无论纵横比或分辨率如何,在合理范围内(在手机上是纵向模式,显然不想关心它在横向或 PC 上工作/苹果电脑)。
如何以最小的游戏对象拉伸或扭曲来实现这一点?我看到有些人展示了一种方法来实现正交视图,但我的相机必须是透视的。我使用的默认 FoV 是 60,我想我可以尝试根据纵横比缩放 FoV,但我不知道如何开始。任何帮助表示赞赏!
解决方案
支持游戏的多种纵横比绝对是让游戏看起来很专业的最令人沮丧的事情之一。
最常见的技术可能与 Film 使用的技术相同,称为信箱。
宽屏刚问世时,电视必须解决一个问题:如何在 4:3 纵横比的电视上播放 16:9 的电影?有两种选择:要么在屏幕的顶部和底部添加黑条以使宽高比为 4:3,要么您可以确保所有重要的东西都发生在中间区域,这两种长宽比都将显示,然后只如果视图的一部分不符合纵横比,则将其截断。
我的建议是用看起来不错的东西围绕可玩区域,但如果它被切断不会影响游戏。然后编写一个例程,该例程将在您的关卡加载时运行,以便您的相机缩小直到所有游戏区域都可见。由于您已缩小,这意味着与您的游戏区域不具有相同纵横比的设备将能够看到游戏区域周围的区域。只要你有足够大的非游戏区域,就不会有问题。
注意:抱歉,这些示例是正交的,但同样适用于透视,您可能需要有一点创意,从相机平截头体进行投影以确定您的游戏区域是否全部可见
推荐阅读
- ios - 使用 FirebaseApp.configure(options:) 时找不到配置文件 GoogleService-Info.plist
- kotlin - 我在 Kotlin KClass 中看不到私人成员
- jenkins - 有没有在声明性管道中使用 Active Choices Plugin 的好例子?
- c# - 使用 COMPlus_EnableEventLog=1 运行 .NET 二进制文件时没有获得 GCallocationTick 堆栈计数
- linux - Yocto Initramfs Transaction Error 添加 cryptsetup 包
- c# - 当单击登录事件满足条件时,语句正在跳过
- javascript - 如何通过 jquery 动态地将 id 和值添加到文章标签?
- sql - 如何将此 SQL Server 触发器从 T-SQL 迁移到 PL/SQL
- python - 如何在seaborn中设置除主对角线之外的点的颜色?
- javascript - 无法从表中获取字符串