Unity 3D 正交(Orthographic)摄像机尺寸与背景自适应

在 Unity 3D 中可以把摄像机设置为正交。正交摄像机与 Unity 3D 中普通摄像机相比没有透视效果(近大远小),所以正交相机一般可以用于 2D 游戏开发或者是 3D 游戏的 UI 开发。

在 2D 游戏开发中,有时会遇到根据屏幕的分辨率对游戏的背景进行自适应缩放的需求,这就需要对正交摄像机的尺寸也就是显示范围有一定的了解。

在正交相机中唯一与显示范围相关的属性只有一个,那就是 Size,单位为 Unity 单位。这个属性的值代表了摄像机在纵向上一半的显示范围。举例来说,如果把 Size 设置为5,那就意味着这个摄像机在纵向可以显示10个 Uinty 单位。摄像机的 Size 是不会随着屏幕的分辨率而变化。而摄像机横向的显示范围则是会发生变化的,Uinty 3D 通过屏幕的宽度除以高度获 Camera.aspect,再通过纵向的显示范围乘以 Camera.aspect 获得摄像机横向的显示范围,这就保证了摄像机的显示范围可以覆盖整个屏幕。

在通常情况下,使用 Unity 单位来对游戏中的对象(例如:Rigidbody,Collider)的大小进行调节就够了,但是要调节一些图片素材的大小时就需要考虑到像素(Pixel)和 Unity 单位之间的转换。那么问题就来了,像素和 Unity 单位之间的转换关系是怎么的呢?准确的说,他们两者之间的关系是不固定的,这取决与在导入素材时"Pixels To Units"这一属性的值,在默认情况下这个属性的数值为100,也就是说100像素等于1个 Unity 单位。

了解这些知识之后,再根据屏幕的分辨率来做游戏背景的自适应就会很容易了。首先,使用摄像机的 Size 和 aspect 计算出以 Unity 单位为单位的屏幕长宽。然后,根据"Pixels To Units"的值算出以像素为单位的长宽。同理,对于背景素材,首先通过 gameObject.render.bounds.size 获取以 Unity 单位为单位的素材大小,然后转换为像素大小。知道了背景和素材的像素大小后就可以很容易地得出他们之间的比例,最后通过调节背景的 transform.localScale 就可以达到背景自适应的目的了。

### 设置或调整 Unity摄像机的分辨率 在 Unity 中,摄像机本身并不直接处理分辨率的概念;相反,它通过视口(Viewport)和投影矩阵来控制场景渲染的方式。为了实现不同设备上的最佳显示效果,通常会结合 Canvas Scaler 和 Camera 的设置来进行优化。 对于希望 UI 自适应多种分辨率的情况,在创建 UI 组件时应合理配置其锚点位置[^1]。这有助于确保界面元素能够根据屏幕尺寸的变化自动调整布局。 当涉及到具体的游戏画面呈现时,则可以通过修改 `Camera` 对象的相关属性间接影响最终输出的画面大小: - **正交投影 (Orthographic Projection)** 下,可通过改变 `orthographicSize` 来调整可视区域的高度范围; - **透视投影 (Perspective Projection)** 则主要依赖于 `fieldOfView` 参数来定义视角角度,从而决定近大远小的效果程度。 另外值得注意的是,如果想要获取当前设备的实际分辨率用于某些特定逻辑运算中,可以访问 `Screen.currentResolution.width` 及 `.height` 属性获得宽高数值[^4]。然而需要注意的是,这些值并不代表实际渲染窗口的比例,因为它们仅反映了物理显示屏的信息。 针对一些特殊情况下可能出现的显示异常问题,比如提到的例子中由于计算方式不当导致图像拉伸变形的现象[^3],建议重新审视并修正相关的缩放算法,确保按照正确的比例因子进行变换操作。 最后提醒开发者们注意,虽然上述方法提供了基础指导方针,但具体的适配策略还需依据各自项目的独特需求灵活运用[^2]。 ```csharp // 修改 orthographic camera size 示例代码 public class AdjustCamera : MonoBehaviour { private Camera mainCam; void Start() { mainCam = GetComponent<Camera>(); float targetAspect = 16f / 9f; float windowAspect = (float)Screen.width / (float)Screen.height; float scaleHeight = windowAspect / targetAspect; if(scaleHeight < 1){ mainCam.orthographicSize = 5 * scaleHeight; }else{ mainCam.orthographicSize = 5; } } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值