天天看点

Unity——Canvas与UI物理问题解决Canvas组件:Canvas Scaler组件:

Canvas组件:

Render Mode(渲染模式):

  • Screen Space-Overlay:屏幕空间,位于场景之上的渲染屏幕上。摄像机的位置变化对Canvas上的UI无影响。当分辨率变化时,Canvas会随同变化。弊端:不能添加UI特效,否则当分辨率变化时会不匹配。
  • Screen Space-Camare:画布位于世界空间,画布放置在指定摄像机前面的给定距离处。摄像机设置会影响 UI 的外观。如果调整屏幕大小、更改分辨率或摄像机视锥体发生改变,则画布也将自动更改大小来适应此情况。
  • World Space:世界空间,画布与场景里的其他物体一样,UI元素会因位置因素被其他物体遮挡等。

Canvas Scaler组件:

用于控制画布中UI元素的整体缩放和像素密度。

UI Scale Mode:

  • Constant Pixel Size:整个画布UI的缩放方式
Unity——Canvas与UI物理问题解决Canvas组件:Canvas Scaler组件:

        1.Scale Factor 按此系数缩放画布中的所有UI元素。

        2.Perference Pixels Per Unit 如果精灵具有“Pixel per Unit”设置,则精灵中的每个像素会覆盖UI中的一个单位。

  • Scale With Screen Size:屏幕越大,UI 元素越大
Unity——Canvas与UI物理问题解决Canvas组件:Canvas Scaler组件:

        1.Reference Resolution:UI布局设计的目标分辨率,如果屏幕分辨率加大,则UI会放大,反之,缩小。

        2.Screen Match Mode:分辨率不适应时,用于缩放画布的模式,3个值:

            i.Match Width or Height:以宽度、高度或二者的某种平均值作为参考来缩放画布区域。

            ii.Expand:水平或垂直扩展,使画布不会小于参考。

            iii.Shrink:水平或垂直裁剪画布区域,使画布不会大于参考。

        3.Match:确定一个宽高比来进行缩放。

        4.Perference Pixels Per Unit :如果精灵具有“Pixel per Unit”设置,则精灵中的每个像素会覆盖UI中的一个单位。

  • Constant Physical Size:无论屏幕大小和分辨率如何,UI 元素都保持相同的物理大小。
Unity——Canvas与UI物理问题解决Canvas组件:Canvas Scaler组件:

            1.Physical Unit : 用于指定位置和大小的物理单位。

            2.Fallback Screen DPI:在屏幕DPI未知时采用的DPI。

            3.Default Sprite DPI:用于精灵的每英寸像素,使其“Pixels Per Unit”设置与“Reference Pixels Per Unit”设置匹配。

           4.Reference Pixels Per Unit:如果精灵具有此“Pixels Per Unit”设置,则其 DPI 将与“Default Sprite DPI”设置匹配。

当Canvas的Render Mode为World Space时,Canvas Scaler:

Unity——Canvas与UI物理问题解决Canvas组件:Canvas Scaler组件:

1.Dynamic Pixels Per Unit:用于 UI 中动态创建的位图(如文本)的每单位像素量。

2.Reference Pixels Per Unit:如果精灵具有此“Pixels Per Unit”设置,则精灵中的每个像素将覆盖世界中的一个单位。如果“Reference Pixels Per Unit”设置为 1,则精灵中的“Pixels Per Unit”设置将按原样使用。

          今天在做项目时,遇到UGUI在进行缩放后,其物理行为发生了意料之外的情况。是因为在Unity的物理系统中,重力加速度是g=9.81,当放大五倍时,重力加速度对其影响会缩小5倍。造成下落速度过慢。

解决:1.通过调整重力加速度,但这种方法不推荐,因为缩放还会产生其他的影响。

           2.通过上面的方法来调整Canvas和摄像机的设置,使不缩放就达到想要的大小。

继续阅读