Unity 正交相机和透视相机的屏幕适配

//横向适配
//正交相机:
float sizeWidth = bgSpriteRenderer.size.x;
float sizeHeight = sizeWidth / camera.aspect;
camera.orthographicSize = sizeHeight * 0.5f;

//透视相机
float sizeWidth = bgSpriteRenderer.size.x;
float distance2Camera = 10;
float fov = Mathf.Atan(Mathf.Abs(sizeWidth / camera.aspect * 0.5f / distance2Camera)) * Mathf.Rad2Deg * 2;
camera.fieldOfView = fov;

camera.orthographicSize指的是屏幕高度的一半,也就是设置为1代表纵向可以正好填满2个scale是1的cube。

camera.aspect指相机在当前屏幕的宽高比。

camera.fieldOfView指纵向可视范围的角度值。可以通过Atan求弧度再转成角度。

### 设置 Unity 中相机分辨率的方法 在 Unity 中,相机本身并不直接处理分辨率的概念。相反,它通过视场角(Field of View, FOV)、正交模式下的尺寸以及屏幕宽高比等因素来控制渲染的内容范围。然而,可以通过调整 `Screen` `Display` API 来间接影响相机所呈现的画面效果。 #### 方法一:基于屏幕比例动态调整相机视野 如果希望适配不同的设备分辨率,可以使用脚本来计算当前屏幕的比例,并据此修改相机的 Field Of View 值。这种方法特别适用于 3D 场景中的透视摄像机: ```csharp void AdjustCameraFoV() { if (Camera.main != null) { float referenceAspect = 16f / 9f; // 默认参考分辨率为 16:9 Camera cameraMain = Camera.main; float currentAspect = (float)Screen.width / Screen.height; // 计算新的 FoV 并应用到主相机上 float newFov = Mathf.Tan(cameraMain.fieldOfView * 0.5f * Mathf.Deg2Rad); newFov *= referenceAspect / currentAspect; newFov = Mathf.Atan(newFov) * Mathf.Rad2Deg * 2f; cameraMain.fieldOfView = newFov; } } ``` 上述代码片段展示了如何根据实际屏幕宽度与高度重新设定相机视角角度[^2]。 #### 方法二:激活特定显示器并设置其分辨率 对于多显示器环境或者需要强制指定某个显示区域作为主要输出的情况,则需利用 `Display` 类提供的功能。下面是一个例子说明怎样切换至第二个显示屏并将该屏设为活动状态的同时也更改了它的解析度参数: ```csharp if (Display.displays.Length >= 2) { Display secondDisplay = Display.displays[1]; // 激活次级显示器 secondDisplay.Activate( secondDisplay.renderingWidth, secondDisplay.renderingHeight, 60); // 将游戏窗口移动至此显示器上 Screen.SetResolution(secondDisplay.renderingWidth, secondDisplay.renderingHeight, FullScreenMode.FullScreenWindow); } ``` 这里需要注意的是调用了 `secondDisplay.Activate()` 函数指定了新创建出来的虚拟桌面大小及其刷新率;接着再呼叫一次 `Screen.SetResolution()` 确保整个应用程序能够正确映射到选定的目标屏幕上[^3]。 #### 总结 虽然无法单独定义某台摄影器材本身的像素密度或者说确切数值上的“分辨率”,但我们依然能借助多种手段达成类似目的——无论是改变视锥体开口程度还是物理层面操控硬件资源分配情况等等皆可实现预期成果。最终目的是为了让我们的作品能够在各种类型的终端上面呈现出最佳视觉体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值