Unity图片优化与比例控制全攻略

目录

前言

不规则按钮点击区域优化方案

[1. 设置资源参数](#1. 设置资源参数)

[2. 代码设置按钮Image的alphaHitTestMinimumThreshold](#2. 代码设置按钮Image的alphaHitTestMinimumThreshold)

[3. 解释:](#3. 解释:)

[4. 效果](#4. 效果)

[Unity Image 原图比例控制](#Unity Image 原图比例控制)

[方法一 Preserve Aspect](#方法一 Preserve Aspect)

[1. 设置勾选Preserve Aspect(保持长宽比),控制图片渲染保持本身比例,它会根据rectTranform 的width 和 height 计算能保持比例的最大渲染尺寸。](#1. 设置勾选Preserve Aspect(保持长宽比),控制图片渲染保持本身比例,它会根据rectTranform 的width 和 height 计算能保持比例的最大渲染尺寸。)

[2. 效果](#2. 效果)

[3. 代码控制](#3. 代码控制)

[方法二 Aspect Ratio Fitter](#方法二 Aspect Ratio Fitter)

[1. 添加Aspect Ratio Fitter组件](#1. 添加Aspect Ratio Fitter组件)

[2. height controls width的效果,其他效果可以自行去测试](#2. height controls width的效果,其他效果可以自行去测试)

使图片拉伸不变形

[第一步:打开Sprite Editor](#第一步:打开Sprite Editor)

第二步:按住图片边缘上的绿色小点,往中间拖

[第三步:在image中,将Image Type中的Simple改为Sliced(已切片)。](#第三步:在image中,将Image Type中的Simple改为Sliced(已切片)。)


前言

图片在游戏开发中应用广泛,但若使用不当也会带来诸多问题。本文记录了我踩过的图片相关坑点,希望能为大家提供一些实用参考。

不规则按钮点击区域优化方案

在使用UGUI开发时,经常会遇到需要精确点击不规则按钮或带有透明区域的按钮的情况。然而,默认创建的Button组件会响应整个矩形区域的点击事件,包括图片的透明部分,这会影响交互体验。

这时候我们就能通过设置一些参数,来不响应透明区域的点击

1. 设置资源参数

开启资源的Read/Write Enabled

2. 代码设置按钮Image的alphaHitTestMinimumThreshold

获取按钮控件下的Image脚本,设置Image脚本的alphaHitTestMinimumThreshold参数

cs 复制代码
public class ButtonTest : MonoBehaviour
{
    private Image btnImage;
    // Start is called before the first frame update
    void Start()
    {
        btnImage = GetComponent<Image>();
        btnImage.alphaHitTestMinimumThreshold = 0.5f;
    }
}

3. 解释:

设置 alphaHitTestMinimumThreshold 会影响 View 的点击测试行为。具体表现为:当 View 的透明度低于该阈值时,即使可见也不会响应点击事件。

这个特性在提升用户体验方面很有实用价值,例如当某个 View 透明度较低时,可以通过该属性禁用其点击功能。

需要注意的是,不同 Android 版本对该属性的支持可能存在差异,使用时需充分测试以确保兼容性。

4. 效果

Unity Image 原图比例控制

Image图片在使用的时候,我们总希望它保持本身比例,这样美术图片就不会变形了。

比如一个图片被压缩了

方法一 Preserve Aspect

1. 设置勾选Preserve Aspect(保持长宽比),控制图片渲染保持本身比例,它会根据rectTranform 的width 和 height 计算能保持比例的最大渲染尺寸。
2. 效果

如图中,图片比例是1:1,rectTranform的width大于height,因此渲染尺寸的height为rectTransform的height。

渲染高度就无法填充整个width。所以左右有空白。

这个使用有问题就是,如果子物体以image的左上为锚点。那么位置可能就会有偏差了。

3. 代码控制
复制代码
[SerializeField] private Image ItemSprite; // 物品图像的引用
ItemSprite.preserveAspect = true;

方法二 Aspect Ratio Fitter

1. 添加Aspect Ratio Fitter组件

该参数控制 RectTransform 的尺寸大小:

  • Width Controls Height:以宽度为基准,通过宽高比自动计算高度值,此时高度不可手动调整
  • Height Controls Width:以高度为基准,通过宽高比自动计算宽度值,此时宽度不可手动调整

两种适配模式:

  1. Fit InParent

    • 以父物体尺寸为基准
    • 计算宽高的最大值
    • 原理与Preserve Aspect相似但会修改RectTransform尺寸
    • 锚点随父物体自动缩放
    • 确保图片始终保持在父物体范围内
  2. Envelope Parent

    • 以父物体尺寸为基准
    • 图片以最小尺寸完整覆盖父物体
    • 适合用作背景图片
2. height controls width的效果,其他效果可以自行去测试

使图片拉伸不变形

如果经常做对话框之类的,经常就会遇到这个问题

【解决前效果】

【解决后效果】

解决方法:

第一步:打开Sprite Editor

第二步:按住图片边缘上的绿色小点,往中间拖

拖成如下效果,其中中间绿色框围成的区域就是变形的区域。

点击Apply保存。

第三步:在image中,将Image Type中的Simple改为Sliced(已切片)。

调整Width和Height参数即可完成设置

相关推荐
HELLOMILI8 分钟前
[UnrealEngine] 虚幻引擎UE5下载及安装(UE4、UE5)
游戏·ue5·游戏引擎·ue4·虚幻·软件需求
gopyer29 分钟前
180课时吃透Go语言游戏后端开发2:Go语言中的变量
开发语言·游戏·golang·游戏后端开发
PaoloBanchero4 小时前
Unity 虚拟仿真实验中设计模式的使用 ——策略模式(Strategy Pattern)
unity·设计模式·策略模式
PaoloBanchero4 小时前
Unity 虚拟仿真实验中设计模式的使用 —— 观察者模式(Observer Pattern)
观察者模式·unity·设计模式
mon_star°4 小时前
基于微信小程序高仿背单词消除游戏
游戏·微信小程序·小程序
软件黑马王子6 小时前
2025Unity超详细《坦克大战3D》项目实战案例(上篇)——UI搭建并使用和数据持久化(附资源和源代码)
游戏·ui·unity·c#
古译汉书10 小时前
嵌入式铁头山羊STM32-各章节详细笔记-查阅传送门
数据结构·笔记·stm32·单片机·嵌入式硬件·个人开发
爱吃小胖橘20 小时前
Unity-动画子状态机
3d·unity·c#·游戏引擎
Roye_ack21 小时前
【项目实战 Day7】springboot + vue 苍穹外卖系统(微信小程序 + 微信登录模块 完结)
spring boot·redis·后端·小程序·个人开发·学习方法·苍穹外卖
SmalBox21 小时前
【光照】[物理模型]中的[BRDF]是什么?
unity·渲染