UGUI自适应笔记

策划要求图片比例必须为16:9,宽度跟屏幕宽度一致,长度可以延伸出屏幕外面

本来想自己想自造轮子,挂脚本实现

后来发现Unity已经有相应的脚本


Aspect Ratio Fitter



Aspect Mode:Envelope Parent

Asperct Ratio:16/9(1.777778)


即可

在Unity UGUI中实现界面自适应同分辨率或屏幕尺寸,是确保UI在各种设备上都能良好显示的关键。以下是几种常见的实现方法和技术要点。 ### 1. 使用Canvas Scaler组件 Unity提供了一个非常实用的组件——Canvas Scaler,用于根据屏幕大小自动调整UI元素的大小。通过设置Canvas Scaler的`UI Scale Mode`,可以控制UI如何响应同的屏幕尺寸。 - **Constant Pixel Size**:UI元素保持固定像素大小,屏幕尺寸变化。适用于需要精确像素控制的场景,但可能导致在同设备上显示一致。 - **Scale With Screen Size**:根据屏幕尺寸进行缩放,可以选择一个参考分辨率(Reference Resolution),然后根据实际屏幕尺寸按比例缩放UI。这种模式适合大多数跨设备适配的情况[^3]。 - **Constant Physical Size**:保持UI的物理大小变,适用于需要在同设备上保持相同物理尺寸的UI,比如VR应用[^4]。 ```csharp // 示例代码:设置Canvas Scaler的模式 CanvasScaler scaler = canvas.GetComponent<CanvasScaler>(); scaler.uiScaleMode = CanvasScaler.ScaleMode.ScaleWithScreenSize; scaler.referenceResolution = new Vector2(1920, 1080); // 设置参考分辨率 scaler.screenMatchMode = CanvasScaler.ScreenMatchMode.MatchWidthOrHeight; scaler.matchWidthOrHeight = 0.5f; // 0表示优先匹配宽度,1表示优先匹配高度 ``` ### 2. 使用锚点(Anchors)进行布局 锚点是UGUI中用于控制UI元素相对于父容器位置和大小的重要工具。通过合理设置锚点,可以让UI元素在同分辨率下自动调整位置和尺寸。 - **锚定到角点**:将UI元素的锚点设置为父容器的某个角落,这样在屏幕尺寸变化时,UI会保持在该角落,并根据父容器的大小进行缩放。 - **拉伸模式**:通过设置UI元素的锚点为左右或上下边缘,可以让元素在水平或垂直方向上自动拉伸,适应同的屏幕宽高比[^4]。 ### 3. 动态调整Canvas的缩放因子 除了使用Canvas Scaler组件外,还可以通过脚本动态计算并设置Canvas的缩放因子。这种方法适用于需要更精细控制的情况,例如当屏幕宽高比发生变化时(如从竖屏切换到横屏),可以根据实际分辨率与参考分辨率的比例来调整缩放。 ```csharp // 示例代码:动态调整Canvas缩放 RectTransform canvasRect = canvas.GetComponent<RectTransform>(); float referenceWidth = 1080f; float currentWidth = Screen.width; float scaleFactor = currentWidth / referenceWidth; canvasRect.localScale = Vector3.one * scaleFactor; ``` ### 4. 处理同宽高比 在处理同宽高比时,可以通过Canvas Scaler的`Screen Match Mode`来选择如何处理屏幕宽高比与参考分辨率的差异。例如: - **Match Width Or Height**:可以选择优先匹配宽度或高度,通过`matchWidthOrHeight`参数来平衡两者。 - **Expand**:允许UI元素超出屏幕范围,适用于某些特定的UI设计。 - **Shrink**:缩小UI以适应屏幕,确保所有UI元素都在屏幕内可见[^4]。 ### 5. 使用自定义脚本进行复杂适配 对于更复杂的适配需求,可以编写自定义脚本来处理UI的布局和缩放。例如,可以根据设备的屏幕尺寸和方向动态调整UI的布局,或者根据同的设备类型应用同的适配策略。 ```csharp // 示例代码:根据屏幕方向调整UI布局 void Update() { if (Screen.orientation == ScreenOrientation.Portrait || Screen.orientation == ScreenOrientation.PortraitUpsideDown) { // 竖屏布局 // 调整UI元素的位置和大小 } else { // 横屏布局 // 调整UI元素的位置和大小 } } ``` ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值