Unity UICanvas

本文介绍了一种在Unity中实现屏幕适配的方法,通过使用CanvasScaler组件调整UI元素的大小和位置,确保不同分辨率和屏幕比例下的显示效果一致。根据屏幕的宽高比决定匹配宽度还是高度。
        CanvasScaler scaler = UICanvas.transform.GetComponent<CanvasScaler>();
        scaler.screenMatchMode = CanvasScaler.ScreenMatchMode.MatchWidthOrHeight;
        float ratio = (scaler.referenceResolution.x / scaler.referenceResolution.y) / (Screen.width / Screen.height);
        scaler.matchWidthOrHeight = ratio <= 1 ? 1 : 0;

在这里插入图片描述
宽高比 如果宽高比小于等于1 说明屏幕宽度小 高度大 可以理解位竖屏,那么应该匹配高度 设置Match为1
宽高比 如果宽高比大于等于1 说明屏幕宽度大 高度小 可以理解位横屏,那么应该匹配宽度 设置Match为0

### 如何在 Unity 中配置和设置 UI Canvas 属性 #### 创建 Canvas 对象 在 Unity 编辑器中,可以通过右键单击 Hierarchy 视图并选择 `UI > Canvas` 来创建一个新的 Canvas 对象[^1]。这会自动生成一个带有默认属性的 Canvas。 #### 修改 Canvas 的渲染模式 Canvas 的渲染模式决定了它如何呈现其子级 UI 元素。有三种主要的渲染模式可供选择: - **Screen Space - Overlay**: 此模式下的 UI 始终覆盖在屏幕上,不考虑任何摄像机的位置或角度。 - **Screen Space - Camera**: 此模式允许指定一个摄像机作为参考,使 UI 可以相对于该摄像机进行渲染[^3]。 - **World Space**: 在此模式下,Canvas 成为世界空间中的一个实体对象,可以像其他游戏对象一样移动和旋转。 要修改这些属性,在 Inspector 窗口中找到 Canvas 组件,并调整 `Render Mode` 下拉菜单选项即可。 #### 动态调整 Canvas 尺寸 为了适应不同设备的屏幕比例,可以在 Game 窗口顶部切换预览分辨率。具体操作方法如下:进入 Game 窗口后,点击 “Free Aspect”,然后从下拉列表中选择目标设备型号(例如 iPhone 13)。完成选择后,Scene 和 Game 界面都会自动更新以反映新的尺寸变化[^4]。 #### 实现鼠标拖拽功能 当需要支持用户通过鼠标交互来拖动某个 UI 元件时,则需要用到 RectTransformUtility 类来进行坐标转换处理。以下是实现这一逻辑的核心代码片段: ```csharp if (RectTransformUtility.ScreenPointToLocalPointInRectangle( rectTransform, Input.mousePosition, camera, out Vector2 localPosition)) { draggableObject.rectTransform.localPosition = localPosition; } ``` 上述脚本实现了将鼠标的屏幕坐标映射至特定矩形区域内的局部坐标的计算过程[^2]。 #### 调整显示顺序 如果希望某些三维模型能够出现在 UI 图层之后或者之前,那么就需要对 Canvas 的相关参数做进一步设定。主要包括以下几个方面的工作流程说明: 1. 更改 Canvas 的 Render Mode 至 Screen Space-Camera 或者 World Space; 2. 设定合适的 Depth 数值; 3. 如果选择了 Screen Space-Camera 渲染方式的话还需要额外绑定一台专门用于捕捉 UI 的摄像头组件; 4. 利用 Layers 特性定义不同的遮罩关系以便控制哪些物体应该被渲染出来以及它们之间的层次结构。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值