UGUI中的粒子特效如何与屏幕适配

该文解决如下问题

  • 美术特效在制作UI特效的时候无法保证在运行中的效果
  • 在不同屏幕分辨率下ui 特效与UI不匹配
  • 特效需要直接挂载到ui上

解决方案

  • 在粒子特效创建时修改缩放
  • 在游戏启动时修改 Camera 的 size 属性

对比两个方案明显修改Camera 属性更简单, 并且对性能没有影响

规则

规定UI运行的基础环境

  • 游戏是横板游戏
  • 定义一个基础分辨率 比如1136x640
  • 定义基础像素与Unity 单位的转换 (默认是100)
  • Canvas Render Mode 为Screen Space
  • Canvas Scaler 为 Scale Width Screen Size
  • Canvas Match With Or Height值为0 , (尽量匹配屏幕宽度, 高度自适应)
  • UI 摄像机为 Orghographic.
  • UI摄像机的基础Size = 640 / 100 / 2 = 3.2

在游戏启动时动态修改

float defaultRadio = 1136f/ 640f; // 获得默认的宽高比例
float defaultSize = 640f / 100 / 2;
float radio = (float)Screen.width / (float)Screen.height;
float scale = radio >= defaultRadio ? 1 : defaultRadio / radio;
float cameraSize = defaultSize  * scale;
GetUICam().size = cameraSize;

背后机制

在正交摄像机中size 的含义是从屏幕中心到屏幕顶部之间的距离,而这个距离
是以1个Unity单位来定的,一般我们可以理解为(米),其中一个单位可以
以一个Unity Cude 的默认宽高来确定,比如下面:


property.png
screen.png

题外话

那我如果ui 想用 透视投影该怎么弄?
首先是计算高度 height = distance * tan(fov/2)

根据实际项目, 我把问题限制在如何在

适配方案是通过屏幕分辨率动态调整Camera 中的Size 以达到UI 与特效匹配的效果.

流程如下:
1> 首先定义

相关知识点:
什么是Pixels Per Unit?
正交相机中的Size 是什么含义?
Canvas Scaler 中的Scale Width Scene Size 会如何影响到UI特效的播放?

适配中的难题是:
UGUI 会根据屏幕改变, 特效也是. 而UGUI 中使用的是像素单位.

你可能感兴趣的:(UGUI中的粒子特效如何与屏幕适配)