zoukankan      html  css  js  c++  java
  • SIKI_Unity_3_进阶_UGUI整体解决方案(基础篇)

    UGUI整体解决方案(基础篇)

    课程目录:

      基础组件的讲解
      每种组件的示例
      扩展UGUI组件
      图文混排 (Text Mesh Pro)
      富文本
      UGUI图表 (柱状图等)
      多语言解决方案
      UI优化

    参考博文:https://blog.csdn.net/zcaixzy5211314/article/details/86515168

    基础组件讲解:

    任务3: RectTransform组件(锚点、中心点)

    RectTransform组件是UI相关游戏物体的必须组件,不可移除

    RectTransform组件的基础属性:
      Position/Width/ Height单位为像素
      Anchors锚点: 相对于父物体的对齐方式
      Pivot中心点: Position的位置信息是根据Anchor和Pivot来计算的

    Debug模式下Inspector面板显示的RectTransform组件的属性更全面
      比如LocalPosition/ SizeDelta等

     

    任务4~6: Anchor锚点及适应性设置

    锚点:相对于父物体  的对齐方式

    RectTransform的位置是根据Anchor与Pivot的相对位置来计算的

    AnchoredPosition: Pivot与四个锚点的中心的相对位置

    rectTransform.localPosition: pivot与父物体的几何中心点的相对位置

    任务8: 获取UI宽高最安全的方式

    RectTransform有两个属性: Width和Height,如何在脚本中获取呢

    在定位模式下(四个锚点在一起),sizeDelta的值可以视为Width和Height
    但是在拉伸模式下(锚点分开了),此时sizeDelta的值变为(-(Left+Right), -(Top+Bottom)),用处不大

    获取RectTransform的属性值的方式:
      RectTransform rectTransform = transform as RectTran sform;
      rectTransform.rect.width;
      rectTransform.rect.height;

    任务9:BluePrint蓝图模式和RawEditMode原始编辑模式

    BluePrint 蓝图模式

    在蓝图模式时:旋转或缩放时,响应区域的大小不受影响

    应用:当UI显示本身需要旋转或缩放(比如动画等),但是响应区域不变时可勾选

    比如:

    RawEditMode 原始编辑模式

    在原始编辑模式时:修改Pivot和Anchor的值时不会改变Pivot或Anchor的点的位置,而是会改变UI的位置以符合Pivot和Anchor的值(注意,手动拖动锚点或轴心点则不受该模式影响)

    任务10:Canvas的三种渲染模式

    Canvas组件的RenderMode
      ScreenSpace-Overlay: 画布和摄像机位置无关,画布永远在最上层

    Pixel Perfect: 抗锯齿效果有的时候会导致像素的略微的改变(比如会有1px的偏差)
      如果勾选上该属性,则会忽略抗锯齿效果带来的像素改变。

    ScreenSpace-Camera: 画布和摄像机位置有关,画布作为摄像机视域的一个切面
      切面与摄像机的距离由PlaneDistance控制

    WorldSpace: 将画布作为一个3D物体,位于世界坐标中,可以任意指定RectTransform的位置等

     

    [画布为摄像机视域的切面:]

    任务11:Constant Pixel Size

    Canvas Scaler组件:
      https://blog.csdn.net/gz_huangzl/article/details/52484611
      作用于该Canvas下的所有UI元素的缩放与像素密度

    UI Scale Mode: 

    Constant Pixel Size
    Scale With Screen Size
    Constant Physical Size

    Constant Pixel Size:
      像素大小为常量,即一张n*n的图片在任何分辨率下都占用n*n像素

    Scale Factor: 缩放倍数
      比如一个Image的width=300,height=400, ScaleFactor=0.5时,Image的width和height值不变,但是实际显示在屏幕上的尺寸却为150*200

    Reference Pixels Per Unit: 每一个UI单位表示的像素数
      If a sprite has this 'Pixels Per Unit' setting, then one pixel in the sprite will cover one unit in the UI.
      该值可以和图片的一个值放在一起看

    TextureType=Sprite的图片的Pixels Per Unit属性:
      该图片的100像素在Unity的世界坐标中代表1个unit
      如果该图片原始尺寸为128*128,则该图片大小为1.28unit*1.28unit
      即如果将该图片和一个scale为1.28*1.28的单位游戏物体放在一起,大小相同

    当该图片的Pixels Per Unit属性调为50时,128*128的像素表示2.56*2.56unit

    此时该图片与1.28*1.28的单位游戏物体放在一起

    假设现有一张128*128大小的图片,其Pixels Per Unit = 100;
      则它正常情况在世界坐标中占用的空间为1.28 unit * 1.28 unit
      若它所在的CanvasScaler.ReferencePixelsPerUnit = 100
      则一个世界坐标单位换算成UI中变为100个ui单位
      则它UI中显示的宽高为128*128
      若它所在的CanvasScaler.ReferencePixelsPerUnit = 50
      则它UI中显示的宽高为(1.28*50) * (1.28*50)

    任务12:Constant Pixel Size模式下的UI适配

    该模式下,无论屏幕分辨率如何改变,UI大小不变

    比如在1920*1080分辨率下摆放的UI,在1280*720下UI大小不变,会导致错位

    1920*1080下

    1280*720下

    UI适配方法:脚本动态修改CanvasScaler中ScaleFactor的值

    float wScale = Screen.width / 1920f;
    float hScale = Screen.height / 1080f;
    // 因为长宽比可能不同,所以wScale和hScale可能不同
    // 这里选择比例变化更大的作为缩放比例,也可以视具体想要实现的效果而定
    float scale = wScale > hScale ? wScale : hScale;
    GetComponent<CanvasScaler>().scaleFactor = scale; 

    任务13:最常用的UI适配方式 -- Scale With Screen Size

    顾名思义,即根据屏幕大小进行缩放

    Reference Resolution: 设置UI时的默认窗口分辨率  
      注意,这种情况下,该值与Game视窗的长宽比需要一致,不然会有问题

    Screen Match Mode

    Match Width Or Height:
      针对宽或者高的值进行等比例缩放

    Expand:

    Shrink:

     

     

     

     

     

     

     

     

     

     

     

     

  • 相关阅读:
    OSGI概念理解和入门
    东莞工厂探访
    软件开发经验之谈
    参加2019华为软件精英挑战赛心得
    论python中的函数参数的传递问题。
    pyhton中常用的基础模块
    程序编译
    hadoop源码学习(二)之ZooKeeper
    我用linux系统的采坑记
    macos解决Hadoop之Unable to load native-hadoop library
  • 原文地址:https://www.cnblogs.com/FudgeBear/p/11677019.html
Copyright © 2011-2022 走看看