【Unity】相机与UI的自适应

1.相机自适应

相机的自适应是为了让游戏在不同分辨率的设备下运行的时候,尽可能保证所有游戏的关键内容都能让玩家看得到。

比如一个1920×1080的屏幕,在屏幕的最左侧摆放着一个物体,这时候切换到500×500的分辨率,这个物体就看不到了,这时候就需要我们让相机能自动适应玩家的屏幕分辨率。

下面是一个相机屏幕适配器的工具脚本,你可以直接挂载到主相机上运行,一些参数可以根据你的项目实际需要做调整。

cs 复制代码
using UnityEngine;

public class CameraScreenAdapter : MonoBehaviour
{
    private Camera mainCamera;
    
    //设计游戏时确定的宽高比(1920*1080)
    private readonly float design_AspectRatio = 1.77f;
    
    //设计游戏时确定的相机视体大小(orthographicSize)
    private readonly float design_CameraSize = 8.5f;
    
    public  void Awake()
    {
        mainCamera =  Camera.main;
    }
    
    public  void Update()
    {
        AutoSize();
    }
    
    private void AutoSize()
    {
        //获得当前屏幕的宽高比
        float aspectRatio = (float)Screen.width / (float)Screen.height;

        //如果当前的宽高比小于设计的宽高比,那我们就要计算新的宽高比与现在的宽高比的比例,将这个比例乘以现在的宽高比
        if(aspectRatio < design_AspectRatio)
        {
            float scale = aspectRatio / design_AspectRatio;
            mainCamera.orthographicSize = design_CameraSize / scale;
        }else
        {
            mainCamera.orthographicSize = design_CameraSize;
        }
    }
}

2.UI自适应

UI自适应一般用Unity的CanvasScaler 组件实现

这个在创建Canvas的时候会默认自带,如果没有你就需要自己添加一个。

  1. CanvaScaler 中,将UI Scale Mode 设置为Scale With Screen Size

  2. 输入参考分辨率Reference Resolution ,这取决于你设计游戏的时候选定屏幕尺寸,比如你要做横屏游戏,那么X = 1920,Y = 1080 ,这是常用的参考分辨率。

  3. 设置Screen Match ModeMatch Width Or Height

  4. 接下来下面会有一个Match拖动条,这个表示确定缩放操作是依据宽度还是高度作为参考,还是两者兼而有之。横屏游戏拖到最左边即可。

相关推荐
脚踏实地皮皮晨6 小时前
003003002_WPF Grid 基类官方类定义逐行深度解析
开发语言·windows·算法·c#·wpf·visual studio
_ZHOURUI_H_15 小时前
Unity MyFramework 用法说明(二十三):使用 PrefabPoolManager 复用预设实例
unity·游戏引擎·游戏开发·游戏ui·手游开发
凯丨16 小时前
AI 蠕虫来了:恶意文档如何通过 Copilot for Word 自我传播?
人工智能·c#·copilot
玛艾露贝17 小时前
Browser-Use在UI自动化测试中的应用
ui
冰凌糕17 小时前
Unity3D Shader 法线与基础光照
unity
Aaron - Wistron17 小时前
Web API C# (Furion版)带 单元测试
开发语言·后端·c#
brave_zhao17 小时前
Axure RP 9模板的使用
ui·axure·photoshop
骊城英雄19 小时前
基于C#+avalonia ui实现的跨平台点胶机灌胶监控控制上位机软件
开发语言·ui·c#
吾儿良辰19 小时前
一个被BCL遗忘的高性能集合:C# CircularBuffer<T>深度解析
开发语言·windows·c#
哎呦喂我去去去19 小时前
C#实现屏幕墙:同时监控多个电脑桌面(支持Windows、信创Linux、银河麒麟、统信UOS)
linux·windows·c#