UGUI基础篇 第(3)课: RectTransform组件常用小技巧与困惑知识点讲解

一. Debug调试模式以及RectTransform两种位置属性的关系

1.Debug调试模式介绍

Debug模式用于查阅隐藏在组件内部,不在编辑器公开显示的属性。如AchorsPosition ,LocalPosition这些处于
RectTransform的并不在编辑器显示的属性。

开启方式:如图所示,点击红色箭头的尾部 (哈哈,没想到把,在尾巴处,不在箭头指向处)

在这里插入图片描述

之后:选择Debug模式,就会显示RectTransform的属性面板,这样我们测试开发起来会更加方便。

在这里插入图片描述

2.RectTransform两种Position属性的讲解(Anchored Position与Local Position)

在Debug模式下,我们有许多RectTransform的隐藏属性参数可以查阅。
下面我主要讲解一下容易造成误解的两个属性参数:(Anchored Position与Local Position)
从本质区别上Local Position是Vector3类型,继承自Transform,Anchored Position是Vector2类型,继承自RectTransform
但是我们往往在使用时发现他们的X,Y的数值是一样的,(请看演示1)其实他们也会有不同的时候,我将用案例给大家讲解一下他们在UGUI
中使用的区别之处。

演示1:在一个UI的Pivot与锚点重合的情况下(蓝色圆环与4个锚钉围成的锚点位置相同,或者查看Anchor 的x,y的min,max是否是相同的,且都对应与Pivot x,y的数值),Anchored Position与Local Position的X,Y 数值相同。请看图 1-2-1;

                                                                                   图1-2-1

演示2:在一个UI的锚点不在父物体的几何rect(矩形区域)中心情况下(图1-2-2),或者说4个锚钉之间只要有分开的情况下(图1-2-3),两个值都不会相同。

在这里插入图片描述
在这里插入图片描述

                                                                     上面两图为1-2-2

### Unity UGUI 自动适配屏幕分辨率和不同设备的最佳实践 #### 1. 使用 Canvas Scaler 组件优化 UI 布局 为了使UI能够适应不同的屏幕尺寸,在Canvas组件上添加`Canvas Scaler`是非常重要的。该组件提供了三种缩放模式来处理不同情况下的UI布局: - **Constant Pixel Size**: 此模式保持所有UI元素的像素大小不变,适用于不需要考虑分辨率差异的情况。 - **Scale With Screen Size**: 这种方式依据参考分辨率的比例调整UI对象的实际渲染尺寸,从而保证在各种屏幕上都能获得一致的效果[^1]。 ```csharp // 设置Canvas Scaler参数 canvasScaler.matchWidthOrHeight = 0; // 完全匹配宽度或高度 canvasScaler.referenceResolution = new Vector2(1920, 1080); // 设定参考分辨率为1920x1080 ``` #### 2. 调整锚点矩形变换属性 通过合理设置UI控件的Anchor Points(锚点),可以确保它们相对于父级容器的位置关系不会因为窗口大小的变化而错乱。对于需要固定位置或者跟随边缘变动的对象来说尤其有用。同时利用RectTransform中的Pivot Point(轴心点)、Anchored Position(定位偏移量)以及Size Delta(尺寸增量)等特性进一步微调各个部件之间的间距和比例[^2]。 #### 3. 实现自定义脚本控制动态变化 当遇到更复杂的场景需求时,则可以通过编写C#脚本来实现更加灵活的功能逻辑。比如根据不同类型的终端加载特定资源文件;或是基于当前显示区域计算出最佳的文字字号、图片质量等级等参数并应用到对应的视觉元素之上[^4]。 ```csharp using UnityEngine; using UnityEngine.UI; public class ResolutionAdapter : MonoBehaviour { private void Start() { AdjustBackgroundImage(); } /// <summary> /// 根据屏幕纵横比调整背景图像填充策略 /// </summary> public void AdjustBackgroundImage(){ float aspectRatio = (float)Screen.width / Screen.height; Image backgroundImage = GetComponent<Image>(); if(aspectRatio >= 16f/9f){ // 对于宽屏采用裁剪拉伸的方式展示完整画面 backgroundImage.preserveAspect = false; backgroundImage.rectTransform.localScale = new Vector3(1, 1, 1); }else{ // 非标准比例则按照原始比例缩小至合适范围 backgroundImage.preserveAspect = true; backgroundImage.rectTransform.sizeDelta *= Mathf.Min(Screen.width/1920f , Screen.height/1080f ); } } } ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值