一、水平居中布局
using System.Collections; using System.Collections.Generic; using UnityEngine; /// <summary> /// 水平居中布局 /// </summary> public class UIHorizontalLayoutGroup : MonoBehaviour { //间隙 public float spacing = 20f; //Group宽度 public float groupWidth { get; private set; } [System.NonSerialized] private RectTransform m_Rect; protected RectTransform rectTransform { get { if (m_Rect == null) m_Rect = GetComponent<RectTransform>(); return m_Rect; } } [System.NonSerialized] private List<RectTransform> m_RectChildren = new List<RectTransform>(); private void CalculateLayoutInputHorizontal() { m_RectChildren.Clear(); groupWidth = 0; int childCount = rectTransform.childCount; for (int i = 0; i < childCount; i++) { var rect = rectTransform.GetChild(i) as RectTransform; if (rect == null || !rect.gameObject.activeInHierarchy) continue; m_RectChildren.Add(rect); if (i > 0) groupWidth += spacing; groupWidth += rect.rect.width; } } public void UpdateLayout() { CalculateLayoutInputHorizontal(); float startX = -groupWidth / 2; for (int i=0; i<m_RectChildren.Count; i++) { var rect = m_RectChildren[i]; rect.anchoredPosition = new Vector2(startX, 0); startX += spacing + rect.rect.width; } } private void Reset() { UpdateLayout(); } }