Unity的UGUI自动布局小功能组件制作及学习历程(1)

功能需求:

假设项目中有一个UI公告板的需求,这个公告板的长度或者宽度是固定的。里面有很多带文字的新闻,但是这些个新闻的字数和大小是不固定的,要求模仿自动布局组件,写一个组件满足UI的需求。

前置学习(主要学习来自与唐老狮的UGUI课以及自己总结,感兴趣可以自行去购买查看内容)

要想完成该功能,首先需要学习已经存在的自动布局组件,了解已经存在的自动布局组件为什么不能满足该需求。

  1. Layout Properties

  2. 水平垂直布局组件

      

    • 将子对象并排或者竖直放在一起,组件名Horizontal Layout Group 和 Vertical Layout Group

    • 参数相关:

      • Padding:与左右上下偏移的位置

      • Spacing:子对象之间的间距

      • ChildAlignment:九宫格对其方式,在父对象有富余的时候,能在九宫格中进行对齐。

      • Control Child Size:是否由父物体自动控制子对象的宽高,比较重要的功能。

      • Use Child Scale:在设置子对象大小和布局时,是否考虑子对象的缩放。如果勾选了,缩放后的大小就会参与进布局的计算中,如果没有勾选,就会按照原有的大小去计算。

      • Child Force Expand:是否强制子对象拓展以填充额外可用空间,有点像平均分配大小,当不是自动控制大小的时候,并不会改变原有的物体大小,但是会把整个长度平均分成几块,然后把子物体放进平均块中,这个分的比例会根据每个物体的Flexible来计算。当自动控制大小的时候,首先会铺满这个平均块中,在改变父物体的大小时,平均块的大小随之改变,子物体的大小也随之改变。但是子物体不会小于本身的min值,而带有preferred值的子物体,会优先的占据这个大小,然后其他的子物体再平均分块。该组件理解起来较为困难,需要多实践实践。

  3. 网格布局组件

    • 将子对象当成一个一个小格子,放进父物体的范围中

    • 组件名:Grid Layout Group

    • 参数相关:

      • 其中Padding,Spacing,ChildAlignment和上面水平垂直完全一样的功能,不再说明

      • Cell Size 该项用于设置每个格子的长宽大小,该项注定了无法设置子对象的大小,也就不适配上述的需求。

      • StartCorner 开始摆放的位置,有4个位置可以选择。

      • StartAxis 摆放的顺序,和StartCorner结合起来,那就是控制格子的走向。

      • Constraint 有三个可以选择,Flexible 不限制行列数量,Fixed Column Count限制列的数量,Fixed Row Count限制行的数量

  4. 内容大小适配器:Content Size Fitter

     

    • 它可以自动的调整RectTransform的长宽来让组件自动设置大小

    • 参数相关:

      • Horizontal Fit :如何控制宽度

      • Vertical Fit :如何控制高度

        • Unconstrained:不根据布局元素伸展

        • Min Size:根据布局元素的最小宽高度来伸展

        • Preferred Size:根据布局元素的偏好宽度来伸展宽度。

    • 补充:该内容是非常重要的一个功能组件,他可以让子物体大小改变的情况下,超出父物体的范围或者父物体富于内容过多。自动的改变设置大小。其中在Text上用的较多,文字变多内容也能变大。

    • 补充2:但是在挂载自动布局组件的子物体上,并不能使用这个内容,特别是长宽自动布局,所以自动布局组件才给了个自动控制,能根据子物体的min和preferred值去自动扩展大小(通常子物体为Text或者带有自动布局组件的时候,内容变多后,min和preferred值会随着改变),这个就是自动控制子物体的大小的必要性,这也是设计扩展组件的关键点和难点。

  5. 宽高比适配器

      

    • 组件名:Aspect Ratio Fitter

    • 功能:让布局元素按照一定比例来调整自己的大小;使布局元素在父对象内部根据父对象大小进行适配。

    • 参数相关:

      • Aspect Mode:适配模式,如何调整矩形大小来实施宽高比。

        • None:不让举行适应宽高比

        • Width Controls Height:根据宽度自动调整高度

        • Height Controls Width:根据高度自动调整宽度

        • Fit In Parent:自动调整宽度、高度、位置和锚点,使矩形适应父项的矩形,同时保持宽高比,会出现“黑边”

        • Envelope Parent:自动调整宽度、高度、位置和锚点,使矩形覆盖父项的整个区域,同时保持宽高比,会出现“裁剪”

      • Aspect Ratio:宽高比;宽除以高的比值

在了解完现有的自动布局组件的用法后,我们就要分析为什么不能达到我们的需求了。

1.该需求首先是大小可以手动改变大小,从各个公告大小不同就能看出来,所以Grid无法满足我们的需求。

2.要按格子的模式去填充进矩形当中,自然也无法使用长宽自动布局了。

在知道了我们得自定义自动布局组件后,我们就要先开始分析其他两种布局组件的源码,明白他们为什么能够自动布局,将在下一篇文章继续。

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值