在此说明,此文章测试结果是像机可视宽度不变,可视高度还是会变的!!UNITY原本是高度不变,宽度变化! 如果需要特殊要求,例如:高度不变,宽度也不变,不好意思,您可以退出本文了。。目前还没研究出来
场景中建一个物体挂上一个脚本,如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ScreenInit : MonoBehaviour {
private void Awake()
{
//1024/768 是编辑模式下固定的屏幕宽度和屏幕高度,Screen.Height和Screen.Width是实际屏幕高度和实际屏幕宽度
Camera.main.orthographicSize = Camera.main.orthographicSize * 1024 / 768 * Screen.height / Screen.width;
}
}
解释:编辑模式下是指Unity开发模式下的Game视图所设置的宽高(1024/768)
结果: 摄像机的可视范围会随着实际屏幕分辨率而调整,保持最佳可视范围,也就是开发模式下的可视范围。
测试得知:如上公式会让摄像机可视宽度永远不会变化,而高度还是会变的,若需要高度不变、宽度变化的话,保持原样即可。也就是你不用看文章方法去做了,unity原本的方法就是高度永不变,宽度变化。
鱼与熊掌不可兼得!只能调整, 不过这篇文章就仅仅是宽度不变,高度会变这样的变化。。
注意:只适用于正交模式摄像机的调整,Camera组件的Projection为Orthographic即正交模式.
如果你的屏幕可以被用户实时地拉大或拉小的话,如下所示:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ScreenInit : MonoBehaviour
{
private float lastHeight = 0; //上一次实际高度
private float lastWidth = 0; //上一次实际宽度
private float size; //开发模式下的摄像机orthographicSize
private float w = 1280f;
private float h = 800f;
private void Awake()
{
size = Camera.main.orthographicSize;
InvokeRepeating("Init", 0, 1f / 5);
}
public void Init()
{
if (Screen.height != lastHeight || Screen.width != lastWidth)
{
//1024/768 是编辑模式下固定的屏幕宽度和屏幕高度,Screen.Height和Screen.Width是实际屏幕高度和实际屏幕宽度
Camera.main.orthographicSize = size * (w / h) * ((float)Screen.height / Screen.width);
}
lastWidth = Screen.width;
lastHeight = Screen.height;
}
//总结就是:摄像机Size = 摄像机原来Size * 原来宽高比 * 实际高宽比
}
测试结果:摄像机可视宽度不会变化,摄像机可视高度会变化(与屏幕宽度成反比,与屏幕高度成正比)。