Files
XRLib/Assets/Scripts/NHN/ContentSizeSetter.cs
2025-08-07 21:12:44 +09:00

74 lines
1.8 KiB
C#

namespace Gpm.Ui
{
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;
[ExecuteAlways]
[RequireComponent(typeof(RectTransform))]
public class ContentSizeSetter : UIBehaviour
{
[System.NonSerialized]
private RectTransform m_Rect;
private RectTransform rectTransform
{
get
{
if (m_Rect == null)
{
m_Rect = GetComponent<RectTransform>();
}
return m_Rect;
}
}
public Vector2 margin;
public RectTransform[] target;
protected override void OnEnable()
{
SetDirty();
}
protected override void OnRectTransformDimensionsChange()
{
base.OnRectTransformDimensionsChange();
Vector2 sizeDelta = new Vector2(rectTransform.sizeDelta.x + margin.x, rectTransform.sizeDelta.y + margin.y);
if (target != null)
{
for (int i = 0; i < target.Length; i++)
{
target[i].sizeDelta = sizeDelta;
LayoutRebuilder.MarkLayoutForRebuild(target[i]);
}
}
}
protected void SetDirty(bool force = false)
{
if (IsActive() == false)
{
return;
}
if (force == true)
{
LayoutRebuilder.ForceRebuildLayoutImmediate(rectTransform);
}
else
{
LayoutRebuilder.MarkLayoutForRebuild(rectTransform);
}
}
#if UNITY_EDITOR
protected override void OnValidate()
{
SetDirty(false);
}
#endif
}
}