1.屏幕的宽高比Aspect Ratio = 屏幕宽度/屏幕高度 2.当摄像机orthographicSize属性值等于当前屏幕高度单位的一半时,摄像机大小正好与屏幕大小(移动端的实际屏幕大小)相等。 【注】这里的高度单位是经过像素到单位比即Pixels To Units换算的,Unity2D中这个比例的默认值是100,即100像素等于1单位。假设我们的游戏屏幕有640像素高,那么实际换算成单位高度则是6.4个单位,当我们摄像机的orthographicSize值是3.2时,摄像机大小刚好与屏幕大小相等。
摄像机实际宽度 = 摄像机orthographicSize * 2 * 屏幕宽高比 等同于 摄像机实际宽度 = 摄像机高度 * 屏幕宽高比
问题展示: 当我们在使用iPhone4(640x960)尺寸的时候,此时屏幕的单位高度是9.6,orthographicSize为4.8,摄像机大小正好与屏幕大小(移动端的实际屏幕大小)相等,并且单位宽度是6.4.
但是我们此界面展示在iPhone5(640x1136)尺寸的时候,效果却不尽人意,如图:
我们看到场景中的游戏对象将近有一半被摄像机裁剪掉了。 原因如下: Aspect Ratio = 640/1136 = 9/16; 摄像机的高度 = 4.8 * 2 = 9.6; 摄像机的宽度 = 9.6 * 9 / 16= 5.4
5.4小于6.4,所以我们就看到了游戏对象被裁剪了一部分,如果我们要继续保持和iPhone4上的宽度,那么我们可以调整orthographicSize 摄像机高度 = 摄像机宽度/Aspect Ratio = 摄像机宽度 * 16/9=6.4*16/9=11.38; orthographicSize = 摄像机高度/2 = 5.69;
效果图如下:
参考代码(代码挂载到摄像机上):
using UnityEngine;
using System.Collections;
public class Test : MonoBehaviour {
//基于iPhone4比例的单位高度
float devHeight = 9.6f;
//基于iPhone4比例的单位宽度
float devWidth = 6.4f;
// Use this for initialization
void Start()
{
float screenHeight = Screen.height;
Debug.Log("screenHeight = " + screenHeight);
//摄像机的尺寸
float orthographicSize = this.GetComponent<Camera>().orthographicSize;
//宽高比
float aspectRatio = Screen.width * 1.0f / Screen.height;
//摄像机的单位宽度
float cameraWidth = orthographicSize * 2 * aspectRatio;
Debug.Log("cameraWidth = " + cameraWidth);
//如果设备的宽度大于摄像机的宽度的时候 调整摄像机的orthographicSize
if (cameraWidth < devWidth)
{
orthographicSize = devWidth / (2 * aspectRatio);
Debug.Log("new orthographicSize = " + orthographicSize);
this.GetComponent<Camera>().orthographicSize = orthographicSize;
}
}
}
转载自:https://blog.csdn.net/yy763496668/article/details/77824413 |