Unity3D UGUI适配不同分辨率详解

前言

在Unity3D开发中,UGUI(Unity's Graphical User Interface)是构建用户界面(UI)的重要工具。然而,随着移动设备和桌面设备的分辨率日益多样化,确保UI能够在不同分辨率下良好显示变得尤为重要。本文将详细解析Unity3D中UGUI如何适配不同分辨率,并提供技术详解及代码实现。

对惹,这里有一个游戏开发交流小组,大家可以点击进来一起交流一下开发经验呀!

一、UGUI适配原理

1. 核心组件

UGUI适配主要依赖于三个核心组件:Rect TransformCanvasCanvas Scaler

  • Rect Transform:控制UI元素的位置、大小、旋转和缩放。
  • Canvas:UI元素的容器,用于定义UI的渲染模式和层级。
  • Canvas Scaler:根据屏幕大小和分辨率自动调整Canvas及其子元素的大小和位置。

2. Canvas属性

Canvas组件的Render Mode属性决定了UI的渲染方式,主要有三种模式:

  • Screen Space - Overlay:UI元素始终位于3D物体前面,不考虑空间排序。
  • Screen Space - Camera:UI元素根据摄像机位置进行渲染,可能会被3D物体遮挡。
  • World Space:UI元素作为3D物体在场景中渲染,常用于指示标志等。

3. Canvas Scaler属性

Canvas Scaler组件用于根据屏幕大小自动调整Canvas的缩放。主要属性包括:

  • UI Scale Mode
    • Scale With Screen Size:根据屏幕大小进行缩放,常用。
    • Constant Pixel Size:UI元素保持固定像素大小。
    • Constant Physical Size:根据屏幕的物理大小进行缩放,较少使用。

  • Screen Match Mode
    • Match Width Or Height:根据屏幕的宽高比进行缩放。
    • Expand:扩展UI以填充整个屏幕。
    • Shrink:缩小UI以适应屏幕。

  • Reference Resolution:开发时设定的基准分辨率。

二、技术详解

1. Scale With Screen Size

这是最常用的适配方式,通过调整Canvas Scaler的UI Scale ModeScale With Screen Size,并设置合适的Reference Resolution,可以实现UI在不同分辨率下的自适应。

2. Anchors与Pivot

Anchors(锚点)和Pivot(支点)是Rect Transform中用于控制UI元素位置的重要属性。Anchors定义了元素相对于父容器的位置,而Pivot定义了元素旋转和缩放的中心点。

  • Anchors:通过调整Anchors的Min和Max值,可以控制元素如何随着父容器的大小变化而变化。
  • Pivot:Pivot是元素自身的中心点,用于旋转和缩放操作。

三、代码实现

以下是一个简单的示例,展示了如何在Unity脚本中动态调整Canvas Scaler以适应不同分辨率。

using UnityEngine;
using UnityEngine.UI;
public class CanvasScalerAdapter : MonoBehaviour
{
void Start()
{
// 获取Canvas Scaler组件
CanvasScaler canvasScaler = GetComponent<CanvasScaler>();
// 初始宽度和高度
float standardWidth = 960f;
float standardHeight = 640f;
// 当前设备宽度和高度
float deviceWidth = Screen.width;
float deviceHeight = Screen.height;
// 计算宽高比
float standardAspect = standardWidth / standardHeight;
float deviceAspect = deviceWidth / deviceHeight;
// 计算缩放比例
float adjustor = 0f;
if (deviceAspect < standardAspect)
{
adjustor = standardAspect / deviceAspect;
canvasScaler.matchWidthOrHeight = 0; // 匹配高度
}
else
{
adjustor = 1f; // 匹配宽度
}
// 如果需要,可以在这里进一步调整Canvas Scaler的其他属性
}
}

这段代码会在游戏开始时运行,根据设备的宽高比动态调整Canvas Scaler的matchWidthOrHeight属性,以实现基于屏幕宽度的适配。

四、总结

通过合理设置Canvas、Canvas Scaler以及Rect Transform的Anchors和Pivot属性,Unity3D的UGUI可以很好地适配不同分辨率的设备。此外,通过编写脚本来动态调整Canvas Scaler的属性,可以进一步提高UI的适配性和灵活性。希望本文的解析和代码示例能对你在Unity3D中开发适配不同分辨率的UI界面有所帮助。

更多教学视频

Unity3D​www.bycwedu.com/promotion_channels/2146264125

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/49119.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CAS乐观锁原理

1、什么是CAS&#xff1f; compare and swap也就是比较和交换&#xff0c;他是一条CPU的并发原语。 他在替换内存的某个位置的值时&#xff0c;首先查看内存中的值与预期值是否一致&#xff0c;如果一致&#xff0c;执行替换操作。 这个操作是一个原子性操作。 Java中基于Un…

手机免费恢复照片的软件有哪些?这2个工具来帮忙

照片是我们情感的载体&#xff0c;是记忆的碎片。它们无声地诉说着过去的故事&#xff0c;记录着生活中的点点滴滴。但意外常常是突如其来的&#xff0c;当发现手机照片丢失时&#xff0c;我们往往心痛不已。 不用担心&#xff0c;这场看似绝望的危机&#xff0c;实则有解决之…

C++ OpenCV 实现多张图片叠加 叠加文字

C OpenCV 实现多张图片叠加 叠加文字 在C中使用OpenCV叠加多张图片以及添加文字的基本步骤如下&#xff1a; 加载多张图片。 确定叠加位置。 使用cv::addWeighted叠加图片&#xff0c;可以为叠加的图片添加透明度。 使用cv::putText在图片上添加文字。 显示或保存结果图片…

Sql Server缓冲池、连接池等基本知识(附Demo)

目录 前言1. 缓存池2. 连接池3. 彩蛋 前言 基本的知识推荐阅读&#xff1a; java框架 零基础从入门到精通的学习路线 附开源项目面经等&#xff08;超全&#xff09;Mysql优化高级篇&#xff08;全&#xff09;Mysql底层原理详细剖析常见面试题&#xff08;全&#xff09; 1…

Go 环境安装配置

1、下载 wget https://go.dev/dl/go1.21.6.linux-amd64.tar.gz 2、安装 sudo tar -xvf go1.21.6.linux-amd64.tar.gz -C $HOME/3、设置环境变量及代理 # 打开 ~/.bash_profile,输入&#xff1a; export PATH$PATH:$HOME/go/bin # 设置 Go 语言代理 export GOPROXYhttps://go…

AI发展下的伦理挑战

AI发展下的伦理挑战&#xff0c;应当如何应对&#xff1f; 人工智能飞速发展的同时&#xff0c;也逐渐暴露出侵犯数据隐私、制造“信息茧房”等种种伦理风险。随着AI技术在社会各个领域的广泛应用&#xff0c;关于AI伦理和隐私保护问题日趋凸显。尽管国外已出台系列法规来规范…

ls lsattr lsblk lscpu lsdiff lshw lsinitrd lsipc lslocks lslogins

ls: 描述&#xff1a;列出目录内容。用法&#xff1a;ls [选项] [文件或目录]示例&#xff1a; ls&#xff1a;列出当前目录的文件和子目录。ls -l&#xff1a;以详细列表形式显示目录内容。ls /path/to/directory&#xff1a;列出指定路径下的内容。 lsattr: 描述&#xff1a;…

【VSCode】安装 【ESP-IDF】插件及【ESP32-S3】新建工程和工程配置

一、搭建基础工程 二、基础工程的文件架构解析 三、调试相关工具介绍 1、串口下载2、JTAG 下载与调试 四、工程的文件架构解析 五、基础工程配置 一、搭建基础工程 在 VS Code 中新建 ESP-IDF 基础工程的步骤如下&#xff1a; 1、启动 VS Code 并打开命令面板 按下“Ctrl…

逆向案例二十八——某高考志愿网异步请求头参数加密,以及webpack

网址&#xff1a;aHR0cDovL3d3dy54aW5nYW9rYW90Yi5jb20vY29sbGVnZXMvc2VhcmNo 抓包分析&#xff0c;发现请求头有参数u-sign是加密的&#xff0c;载荷没有进行加密&#xff0c;直接跟栈分析。 进入第二个栈&#xff0c;打上断点&#xff0c;分析有没有加密位置。 可以看到参数…

Chapter17 表面着色器——Shader入门精要学习

Chapter17 表面着色器 一、编译指令1.表面函数2.光照函数3.其他可选参数 二、两个结构体1.Input 结构体&#xff1a;数据来源2.SurfaceOutput 三、Unity背后做了什么四、表面着色器的缺点 一、编译指令 作用&#xff1a;指明该表面着色器的 表面函数 和 光照函数&#xff0c;并…

【React】深入探索React:表单控制、组件通信、副作用管理、自定义Hook

一、React表单控制 表单控制是React应用中常见的需求&#xff0c;React Hooks提供了两种方式来实现&#xff1a;受控组件和非受控组件。 1.1 受控组件 受控组件是将表单输入的值保存在组件的状态中。这样&#xff0c;表单数据就完全由React控制。 import React, { useState…

【系统架构设计 每日一问】三 Redis支持事务么,Redis的事务如何保证

实际上&#xff0c;关于Redis事务的说法“Redis 的事务只能保证隔离性和一致性&#xff08;I 和 C&#xff09;&#xff0c;无法保证原子性和持久性&#xff08;A 和 D&#xff09;”并不完全准确。下面我将分别解释Redis事务的四个特性&#xff1a;原子性&#xff08;Atomicit…

探索Mojo模型的超参数优化:自定义搜索策略全解析

探索Mojo模型的超参数优化&#xff1a;自定义搜索策略全解析 在机器学习领域&#xff0c;超参数的调整是提高模型性能的关键步骤。Mojo模型&#xff0c;作为一种高效的模型部署方式&#xff0c;其超参数的搜索同样至关重要。本文将深入探讨如何在Mojo模型中实现自定义的超参数…

5.波士顿房价预测(KNN,决策树,线性回归)

波士顿房价预测 1. 机器学习中的任务分类2. 波士顿房价预测2.1 分析数据2.2 比较 MAE 和 MSE2.2 代码 1. 机器学习中的任务分类 有监督学习&#xff08;supervised&#xff09;&#xff1a;有特征也有标签 分类问题 classification预测离散量 回归问题 regression预测连续量 …

DPDK收包流程和Linux内核收包流程对比

DPDK 网卡收包流程-腾讯云开发者社区-腾讯云NIC 在接收到数据包之后&#xff0c;首先需要将数据同步到内核中&#xff0c;这中间的桥梁是 rx ring buffer。它是由 NIC 和驱动程序共享的一片区域&#xff0c;事实上&#xff0c;rx ring buffer 存储的并不是实际的 packet 数据&a…

【Gin】精准应用:Gin框架中工厂模式的现代软件开发策略与实施技巧(上)

【Gin】精准应用&#xff1a;Gin框架中工厂模式的现代软件开发策略与实施技巧(上) 大家好 我是寸铁&#x1f44a; 【Gin】精准应用&#xff1a;Gin框架中工厂模式的现代软件开发策略与实施技巧(上)✨ 喜欢的小伙伴可以点点关注 &#x1f49d; 前言 本次文章分为上下两部分&…

Golang使用docker sdk管理docker

包括列出容器、创建容器、删除容器、进入容器、构建镜像等操作。 package dockertoolimport ("context""fmt""github.com/docker/docker/api/types""github.com/docker/docker/api/types/container""github.com/docker/docker/ap…

【RaspberryPi】树莓派系统UI优化

接上文&#xff0c;如何去定制一个树莓派的桌面系统&#xff0c;还是以CM4为例。 解除CM4上电USB无法使用问题 将烧录好的tf卡通过读卡器插入到电脑上&#xff0c;进入boot磁盘&#xff0c;里面有一个Config文件&#xff0c;双击用记事本打开&#xff0c;在【pi4】一栏里加入一…

从零开始手写STL库:List

从零开始手写STL库–List部分 Github链接&#xff1a;miniSTL 文章目录 从零开始手写STL库–List部分List是什么&#xff1f;List需要包含什么函数1&#xff09;基础成员函数2&#xff09;核心功能3)其他功能 基础成员函数的编写核心功能的编写其他功能编写总结 List是什么&am…

QT之QWebEngineView详细介绍

QWebEngineView 是 Qt 框架中用于实现 Web 浏览器功能的一个类&#xff0c;它基于 Chromium 引擎&#xff0c;提供了丰富的接口来支持网页的加载、显示、交互等功能。以下是对 QWebEngineView 的详细介绍&#xff1a; 一、基本概述 引入版本&#xff1a;QWebEngineView 是从 …