Unity正交模式摄像机与屏幕适配的方法(摄像机可视宽度不变,高度变化)

在此说明,此文章测试结果是像机可视宽度不变,可视高度还是会变的!!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 * 原来宽高比 * 实际高宽比
}

测试结果:摄像机可视宽度不会变化,摄像机可视高度会变化(与屏幕宽度成反比,与屏幕高度成正比)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值