Unity UGUI的VerticalLayoutGroup(垂直布局)组件的介绍及使用

  • Unity UGUI的VerticalLayoutGroup(垂直布局)组件的介绍及使用已关闭评论
  • 111 次浏览
  • A+
所属分类:.NET技术
摘要

VerticalLayoutGroup是Unity UGUI中的一种布局组件,用于在垂直方向上自动排列子对象。它可以根据子对象的大小和布局设置,自动调整子对象的位置和大小,实现垂直布局效果。


Unity UGUI的VerticalLayoutGroup(垂直布局)组件的介绍及使用

1. 什么是VerticalLayoutGroup组件?

VerticalLayoutGroup是Unity UGUI中的一种布局组件,用于在垂直方向上自动排列子对象。它可以根据子对象的大小和布局设置,自动调整子对象的位置和大小,实现垂直布局效果。

2. VerticalLayoutGroup组件的工作原理

VerticalLayoutGroup组件通过以下步骤实现垂直布局:

  • 获取所有子对象的RectTransform组件。
  • 根据子对象的大小和布局设置,计算子对象的位置和大小。
  • 调整子对象的位置和大小,使其按照垂直方向上的布局要求进行排列。

3. VerticalLayoutGroup组件的常用属性

  • Padding:内边距,控制子对象与VerticalLayoutGroup之间的间距。
  • Spacing:子对象之间的间距。
  • Child Force Expand:子对象是否自动扩展以填充VerticalLayoutGroup的宽度。
  • Child Control Height:子对象是否自动调整高度以适应VerticalLayoutGroup的高度。
  • Child Alignment:子对象的对齐方式。

4. VerticalLayoutGroup组件的常用函数

  • CalculateLayoutInputHorizontal():计算垂直布局的水平方向上的布局要求。
  • CalculateLayoutInputVertical():计算垂直布局的垂直方向上的布局要求。
  • SetLayoutHorizontal():设置垂直布局的水平方向上的布局。
  • SetLayoutVertical():设置垂直布局的垂直方向上的布局。

5. 例子代码

例子1:创建一个垂直布局的面板

using UnityEngine; using UnityEngine.UI;  public class VerticalLayoutExample : MonoBehaviour {     public VerticalLayoutGroup verticalLayoutGroup;      private void Start()     {         verticalLayoutGroup.spacing = 10f;         verticalLayoutGroup.childForceExpandWidth = false;         verticalLayoutGroup.childForceExpandHeight = false;         verticalLayoutGroup.childControlHeight = true;         verticalLayoutGroup.childAlignment = TextAnchor.UpperCenter;     } } 

操作步骤:

  1. 创建一个空物体,并将VerticalLayoutGroup组件添加到该物体上。
  2. 将需要进行垂直布局的子对象添加到VerticalLayoutGroup物体下。
  3. 将VerticalLayoutExample脚本添加到VerticalLayoutGroup物体上。
  4. 在Inspector面板中,将VerticalLayoutGroup的spacing设置为10,childForceExpandWidth和childForceExpandHeight设置为false,childControlHeight设置为true,childAlignment设置为UpperCenter。

例子2:动态添加子对象

using UnityEngine; using UnityEngine.UI;  public class AddChildExample : MonoBehaviour {     public VerticalLayoutGroup verticalLayoutGroup;     public GameObject childPrefab;      private void Start()     {         for (int i = 0; i < 5; i++)         {             GameObject child = Instantiate(childPrefab, verticalLayoutGroup.transform);             child.GetComponentInChildren<Text>().text = "Child " + (i + 1);         }     } } 

操作步骤:

  1. 创建一个空物体,并将VerticalLayoutGroup组件添加到该物体上。
  2. 创建一个子对象的预制体,并将其赋值给AddChildExample脚本的childPrefab变量。
  3. 将AddChildExample脚本添加到空物体上。
  4. 在Inspector面板中,将VerticalLayoutGroup的spacing和其他布局设置进行适当调整。

例子3:动态删除子对象

using UnityEngine; using UnityEngine.UI;  public class RemoveChildExample : MonoBehaviour {     public VerticalLayoutGroup verticalLayoutGroup;      private void Start()     {         for (int i = 0; i < verticalLayoutGroup.transform.childCount; i++)         {             Destroy(verticalLayoutGroup.transform.GetChild(i).gameObject);         }     } } 

操作步骤:

  1. 创建一个空物体,并将VerticalLayoutGroup组件添加到该物体上。
  2. 将RemoveChildExample脚本添加到空物体上。
  3. 在Inspector面板中,将VerticalLayoutGroup的spacing和其他布局设置进行适当调整。
  4. 运行游戏,所有子对象将被删除。

例子4:动态调整子对象的大小

using UnityEngine; using UnityEngine.UI;  public class ResizeChildExample : MonoBehaviour {     public VerticalLayoutGroup verticalLayoutGroup;      private void Start()     {         for (int i = 0; i < verticalLayoutGroup.transform.childCount; i++)         {             RectTransform childRectTransform = verticalLayoutGroup.transform.GetChild(i).GetComponent<RectTransform>();             childRectTransform.sizeDelta = new Vector2(childRectTransform.sizeDelta.x, 100f);         }     } } 

操作步骤:

  1. 创建一个空物体,并将VerticalLayoutGroup组件添加到该物体上。
  2. 将ResizeChildExample脚本添加到空物体上。
  3. 在Inspector面板中,将VerticalLayoutGroup的spacing和其他布局设置进行适当调整。
  4. 运行游戏,所有子对象的高度将被调整为100。

例子5:动态调整子对象的对齐方式

using UnityEngine; using UnityEngine.UI;  public class AlignChildExample : MonoBehaviour {     public VerticalLayoutGroup verticalLayoutGroup;      private void Start()     {         verticalLayoutGroup.childAlignment = TextAnchor.MiddleCenter;     } } 

操作步骤:

  1. 创建一个空物体,并将VerticalLayoutGroup组件添加到该物体上。
  2. 将AlignChildExample脚本添加到空物体上。
  3. 在Inspector面板中,将VerticalLayoutGroup的spacing和其他布局设置进行适当调整。
  4. 运行游戏,所有子对象的对齐方式将被调整为MiddleCenter。

注意事项

  • VerticalLayoutGroup组件只能用于垂直布局,如果需要水平布局,请使用HorizontalLayoutGroup组件。
  • 在使用VerticalLayoutGroup组件时,确保子对象的RectTransform组件的锚点和位置设置正确,以便正确计算子对象的位置和大小。

参考资料