当前位置: 首页 > news >正文

Unity UI中的Pixels Per Unit

Pixels Per Unit在图片导入到Unity的时候,将图片格式设置为Sprite的情况下会出现,其意思是精灵中的多少像素对应世界中的一个单位,默认是100
在这里插入图片描述

1. 对于在世界坐标中

在世界坐标中,一般对于Sprite的应用是Sprite Renderer组件
在这里插入图片描述
使用一张100 * 100分辨率的图片
在这里插入图片描述
将相机设置为正交相机,同时将Size设置为0.5,因为orthographicSize表示相机垂直视体大小的一半,设置为0.5,就代表此时相机的垂直视体大小为一个单位
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
发现此时图片的长度刚好撑满相机的垂直视体长度,应该是因为此时世界中的主体是Sprite Renderer,而其Scale是1,所以刚好对应一个世界单位,此时,orthographicSize= 0.5,正交相机的高度就是一个世界单位

2. 对于UI系统来说,当Canvas是Overlay模式时

当Canvas是Overlay模式时
在Canvas Scaler中,有一个referencePixelsPerUnit属性
在这里插入图片描述

其意思为“如果精灵具有此“每单位像素(Pixels Per Unit)”设置,则精灵中的一个像素将覆盖用户界面中的一个单位”。默认是100

对于Image来说,它也有一个Pixels Per Unit属性
在这里插入图片描述
其最终计算结果是Sprite的 PPU / Canvas的referencePixelsPerUnit
其中,SetNativeSize方法有用到这个Imgae的Pixels Per Unit属性
在这里插入图片描述
这个方法的意思是调整图像大小以使其达到像素完美,这意味着将图像的 RectTransform.sizeDelta 设置为与精灵的尺寸相等
在这个方法中,通过Sprite的宽高和Image的PPU比值,来得到当前图片的sizeDelta,且将anchorMin和anchorMax聚拢在一点,当锚点聚在一起时,此时的sizeDelta就是图片的大小,而pixelsPerUnit又等于spritePixelsPerUnit / m_CachedReferencePixelsPerUnit,所以此时
图片的尺寸 = Sprite宽高 / (Sprite 的PPU / Canvas的referencePixelsPerUnit)

- 当Sprite的PPU = 100, Canvas的RPPU = 100,Sprite的尺寸是100 * 100时

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

在这里插入图片描述
图片尺寸 = (100,100)/ (100 / 100)= (100,100)
点击SetNativeSize,查看Image的宽高
在这里插入图片描述
符合计算结果

- 当Sprite的PPU = 50,Canvas的RPPU = 100,Sprite的尺寸是100 * 100时

点击一下SetNativeSize
在这里插入图片描述
此时Imgae的长宽变成了200,即(100,100)/ (50 / 100) = (200, 200),符合计算规则

即当在其他情况不变的情况下,Sprite的PPU越大,在UI中的Image的原始尺寸越小

3.Image的PPU的其他应用

在这里插入图片描述

在这里插入图片描述

在计算ILayoutElement的preferredWidth和preferredHeight时也有用到

4. 当Canvas为World Space模式时

在这里插入图片描述
Camera的Size为0.5
在这里插入图片描述
在这里插入图片描述
此时Image的宽高需要是1才能让相机视体的高刚好撑满图片
在这里插入图片描述
在官方文档中有说明,是Sprite中的每一个像素将覆盖世界中的一个单位,所以此时一个单位像素对应一个世界单位

参考链接帮你理清Unity中的Pixels Per Unit

相关文章:

  • 从源码安装ROS的serial包(替换github的方案)
  • Python中的strip()
  • VSCode CMake调试CPP程序
  • 闲鱼分销玩法详解
  • 深入解读 React 纯组件(PureComponent)
  • 【Chain(链) 和 LCEL(LangChain Expression Language) 】概念区,用途差异对比
  • JavaScript学习教程,从入门到精通, JavaScript 函数全面解析与案例实践(11)
  • 浏览器与网络模块
  • 大模型——mcp-ui基于MCP协议的简洁AI聊天界面
  • Transformer模型的自注意机制原理、作用、优缺点,通俗易懂
  • qt mapFrom返回的QPoint和event->pos()区别和globalPos区别
  • Python爬虫第12节-解析库Beautiful Soup的使用下篇
  • AF3 ProteinDataset类的_get_masked_sequence方法解读
  • Linux Kernel 1
  • gazebo 启动卡死的解决方法汇总
  • transformers的 pipeline是什么:将模型加载、数据预处理、推理等步骤进行了封装
  • Linux下Docker安装超详细教程(以CentOS为例)
  • transformer 规范化层
  • Linux 进程基础(一):冯诺依曼结构
  • Java设计模式实战:策略模式在SimUDuck问题中的应用
  • 建筑方案的网站/seo接单
  • 网站做任务赚qb/网络推广的概念
  • 三拼域名做网站/一个域名大概能卖多少钱
  • 电影模板哪个网站好/公司营销策划方案
  • 网站制作公司怎么收费/360关键词指数查询
  • 网站建设服务哪里便宜/推广软文范文800字