unity 屏幕适配(适用于UI与2D相机)

本文探讨了Unity中2D游戏的屏幕适配问题,特别是针对UI和2D相机的设置。内容包括理解图片的pixels Per Unit属性如何影响世界中的显示大小,2D相机的size值计算方法,以及如何根据游戏窗口尺寸进行适配调整,确保美术资源与实际显示一致。同时,提供了屏幕适配的代码解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

屏幕适配是大家经常遇到的话题,对于2D游戏开发常常会发生美术提供的图片尺寸放置在精灵上时显示大小与美术提供的视图不一致问题?

	在unity中图片pixels Per Unit 属性 与 图片在世界中的显示大小为 =  当前图片像素 / pixels Per Unit 值 (100 * 100 的图片pixels Per Unit 值为100在世界中的大小为 x = 1, y = 1)。
	unity中2d相机的size值是默认为5,该值正常算法 = 当前game视窗设置的高 / 2(屏幕分为正负两部分)/ 100 (pixels Per Unit 值)例如:(1080 * 1920 的屏幕比例那么 size值就该设置为 1920 / 2 / 100 = 9.6) ,当值设置正确时美术给的图片与相机渲染出来的图片视觉感官就会一致大小。
	屏幕适配代码:
 public Camera _camera; //当前的2D相机
    public CanvasScaler cs; //当前的UI相机

    private float iconScale = 1; //当前2d相机size 与 实际相机size 的比例(当前项目已经做到一半相机size值为默认时用,如果对了为1) 
    private float _width = 1080; //当前设置的屏幕宽
    private float _height = 2160; //屏幕高
    private float currPrivate; //当前屏幕的比例
    private float ratio; //设备的屏幕的比例

    private void Awake()
    {
        
#if WEIXINMINIGAME && !UNITY_EDITOR
       ratio = WX.GetWindowInfo().screenWidth * 1f / WX.GetWindowInfo().screenHeight; 
#else
        ratio = Screen.width * 1f / Screen.height;
#endif
       
        currPrivate = _width / _height;
        //说明当前设备屏幕的宽度比预设宽带要大
        if (ratio > currPrivate)
        {
            //UI相机的 UI Scale Mode 要为 Scale With Screen Size 模式 并且 设置好值
            //cs.matchWidthOrHeight = 1; //说明UI适配应该以高适配
            _camera.orthographicSize = iconScale * _height / 2 / 100; // 2d相机渲染大小
        }
        //说明当前设备屏幕的高度比预设高度要大
        else
        {
            //cs.matchWidthOrHeight = 0; //UI相机应该以宽带适配
            float num = _width / ratio; // 计算出当前的实际高度(实际高度 不等于 设备高度)实际高度 = 预设宽度 / 当前设备宽高比例
            _camera.orthographicSize = num * iconScale / 2 / 100; // 用实际的高度去计算新的2D相机的size值
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值